diff --git a/.gitmodules b/.gitmodules index bcb38a7b1..e69de29bb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,18 +0,0 @@ -[submodule "oscal"] - path = vendor/oscal - url = https://github.com/usnistgov/OSCAL.git - branch = main - ignore = dirty - -[submodule "resources/validations/lib/xspec"] - path = vendor/xspec - url = https://github.com/xspec/xspec.git - branch = master - ignore = dirty - -[submodule "resources/validations/src/schematron"] - path = vendor/schematron - url = https://github.com/schematron/schematron.git - branch = master - ignore = dirty - diff --git a/Makefile b/Makefile index 4dfdcfdd3..2fa01434f 100644 --- a/Makefile +++ b/Makefile @@ -6,9 +6,7 @@ help: # Most of the real work of the build is in sub-project Makefiles. include src/content/module.mk -include src/examples/module.mk include src/validations/module.mk -include src/web/module.mk .PHONY: help diff --git a/src/config b/src/config deleted file mode 100644 index fff56b190..000000000 --- a/src/config +++ /dev/null @@ -1,11 +0,0 @@ -# path to source|format of source|model of source|format(s) to convert to -src/content/rev4/templates/ssp/xml/FedRAMP-SSP-OSCAL-Template.xml|xml|ssp|json -src/content/rev4/templates/sap/xml/FedRAMP-SAP-OSCAL-Template.xml|xml|assessment-plan|json -src/content/rev4/templates/sar/xml/FedRAMP-SAR-OSCAL-Template.xml|xml|assessment-results|json -src/content/rev4/templates/poam/xml/FedRAMP-POAM-OSCAL-Template.xml|xml|poam|json -src/content/rev4/baselines/xml/*profile.xml|xml|profile|json -src/content/rev5/templates/ssp/xml/FedRAMP-SSP-OSCAL-Template.xml|xml|ssp|json -src/content/rev5/templates/sap/xml/FedRAMP-SAP-OSCAL-Template.xml|xml|assessment-plan|json -src/content/rev5/templates/sar/xml/FedRAMP-SAR-OSCAL-Template.xml|xml|assessment-results|json -src/content/rev5/templates/poam/xml/FedRAMP-POAM-OSCAL-Template.xml|xml|poam|json -src/content/rev5/baselines/xml/*profile.xml|xml|profile|json diff --git a/src/examples/README.md b/src/examples/README.md deleted file mode 100644 index 605606354..000000000 --- a/src/examples/README.md +++ /dev/null @@ -1,100 +0,0 @@ -# fedramp-automation usage examples - DEPRECATED - -**THE EXAMPLES IN THIS FOLDER ARE OBSOLETE AND WILL BE DEPRECATED.** - -**NOTE - CONTENT IN THIS FOLDER OR SUBFOLDER IS DEPRECATED. SUBSEQUENT RELEASES WILL NOT INCLUDE THIS CONTENT.** - -As a collection of validation rules for FedRAMP OSCAL documents, `fedramp-automation` is intended to be used by FedRAMP reviewers to ensure that the documents meet the requirements of the OSCAL standard with FedRAMP extensions. Additionally, validation rules can be integrated with third-party tools to ensure that documents meet FedRAMP requirements. - -For the purposes of third-party integration, Schematron validation rules are provided in a compiled XSLT format. This repository includes usage examples that leverage appropriate Saxon XSLT libraries. - -- [Python example](./python/README.md) -- [Java example](./java/README.md) -- [Javascript example](./javascript/README.md) - -Additionally, these examples serve as basic automated tests of the validation suite over each of the implemented languages. - -## General overview - -- The source SSP rules defined in [../validations/rules/ssp.sch](../validations/rules/ssp.sch) are compiled into a single XSLT file, [../validations/target/rules/rev4/ssp.sch.xsl](../validations/target/rules/rev4/ssp.sch.xsl). Similar artifacts are produced for SAP, SAR, and POA&M rules. -- The compiled XSLT file must be evaluated by an XSLT 3.0 compatible processor. The [Saxon](https://www.saxonica.com/) suite of libraries are the only compatible XSLT 3.0 processors at the time of writing. - - Java Saxon-HE is open-source and recommended. - - Javascript Saxon-JS is free, but not open-source. The UI for this project may be referenced as an example. - - .NET Saxon-HE is open-source. It requires .NET Framework (ie, not compatible with .NET Core). - - Saxon/C is an open-source C-compatibility layer over the Java runtime. It has bindings for Python and PHP. The Python example in this directory utilizes Saxon/C with the Python extension. -- When evaluated, the XSLT output is an SVRL document (Schematron Validation Report Language). Failed assertions and diagnostic messages may be extracted from the SVRL using XPath. SVRL identifies the locus of the error in the source document via an XPath 3.0 location. - -## Validation parameters - -The Schematron rules support a number of parameters that can be applied via XSLT stylesheet parameters. - -- `baselines-base-path` - Path to this repository's baselines. Default value is path relative to Schematron source document. Set to local or network root path. See: https://github.com/GSA/fedramp-automation/tree/master/dist/content/rev4/baselines/xml -- `registry-base-path` - Path to this repository's registry values. Default value is path relative to Schematron source document. Set to local or network root path. See: https://github.com/GSA/fedramp-automation/tree/master/dist/content/rev4/resources/xml -- `param-use-remote-resources` - Boolean, default False. If True, validate references to external resources, which may be remote. - -# JSON support - -OSCAL may be represented via both XML and JSON formats. The FedRAMP OSCAL validation rules, however, require XML. To validate a JSON OSCAL SSP, you must convert the JSON to XML. The OSCAL project provides an collection of JSON to XML converters, in the form of XSLT stylesheets, [available here](https://github.com/usnistgov/OSCAL/tree/main/xml#oscal-json-to-xml-converters). - -Each of the examples (Java, Python, and Javascript) provide examples of usage of these stylesheets. - -# Schematron Validation Report Language (SVRL) - -The result of an evaluated Schematron ruleset is an XML document in SVRL format. This document includes failed assertions, diagnostic messages for each assertion, and the XPath selector that identifies the location of the deficiency in the source OSCAL document. - -To browse a sample SVRL document, you may evaluate the sample SSP via the command-line. You may need to refer to [../validations/CONTRIBUTING.md](../validations/CONTRIBUTING.md) for set-up instructions first. - -```bash -cd src/validations -./bin/validate_with_schematron.sh -f ./test/demo/FedRAMP-SSP-OSCAL-Template.xml -``` - -On success, the SVRL document will be available here: [../validations/report/schematron/test/demo/FedRAMP-SSP-OSCAL-Template.xml__ssp.results.xml](../validations/report/schematron/test/demo/FedRAMP-SSP-OSCAL-Template.xml__ssp.results.xml) - -## SVRL reference - -A number of notable SVRL elements are outlined below. - -### //svrl:failed-assert - -Failed assertions. Example: - -```xml - - This base64 has a media-type attribute. - -This base64 lacks a media-type attribute. - -``` - -### //svrl:fired-rule - -A reference that a Schematron rule fired, and its corresponding XPath context. Example: - -```xml - -``` - -### //svrl:successful-report - -Similar to `failed-assert`, but purely for informational reporting purposes. At time of writing, `fedramp-automation` utilizes reporting to extract metadata from the source SSP. Example: - -```xml - - System's Full Name - - - FedRAMP System Security Plan (SSP) - -``` diff --git a/src/examples/java/.gitignore b/src/examples/java/.gitignore deleted file mode 100644 index beef00d01..000000000 --- a/src/examples/java/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.classpath -.project -.settings -target diff --git a/src/examples/java/Dockerfile b/src/examples/java/Dockerfile deleted file mode 100644 index c333d9db7..000000000 --- a/src/examples/java/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM maven:3.8.1-openjdk-17-slim - -WORKDIR /code/src/examples/java -ADD pom.xml /code/src/examples/java/pom.xml -RUN mvn install diff --git a/src/examples/java/README.md b/src/examples/java/README.md deleted file mode 100644 index 433322814..000000000 --- a/src/examples/java/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# fedramp-automation Java usage example - -This is a simple example of how to use the fedramp-automation validation rules with the Java Saxon-HE library. - -The implementation applies the project's compiled XSLT (`ssp.sch.xsl`, `sap.sch.xsl`, `sar.sch.xsl`, and `poam.sch.xsl`), to the demo documents (eg, [FedRAMP-SSP-OSCAL-Template.xml](../../../dist/content/rev4/templates/ssp/xml/FedRAMP-SSP-OSCAL-Template.xml)), and then extracts failed assertions from the resulting SVRL. - -## Prerequisites - -Compiled Schematron XSLT artifacts are required to run this example. The following command will build the artifact: - -```bash -cd ../../.. -make build-validations -``` - -## Usage - -This example uses Maven. You may run directly, or via the provided `docker compose` configuration. - -```bash -mvn --help -``` - -```bash -docker compose run example mvn --help -``` - -## Developer notes - -To run tests: - -```bash -docker compose run example mvn test -``` - -To auto-format code: - -```bash -docker compose run example mvn com.coveo:fmt-maven-plugin:format -``` diff --git a/src/examples/java/docker-compose.yml b/src/examples/java/docker-compose.yml deleted file mode 100644 index 926ffdc96..000000000 --- a/src/examples/java/docker-compose.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- - -version: "3.9" - -services: - example: - build: . - volumes: - - ../../..:/code - working_dir: /code/src/examples/java - command: bash -l diff --git a/src/examples/java/pom.xml b/src/examples/java/pom.xml deleted file mode 100644 index c22680836..000000000 --- a/src/examples/java/pom.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - 4.0.0 - - gov.fedramp.automationExample - fedramp-automation-example - 1.0-SNAPSHOT - - fedramp-automation-example - - http://www.example.com - - - UTF-8 - 1.7 - 1.7 - - - - - junit - junit - 4.13.1 - test - - - net.sf.saxon - Saxon-HE - 10.8 - - - - - - - - - maven-clean-plugin - 3.1.0 - - - - maven-resources-plugin - 3.0.2 - - - maven-compiler-plugin - 3.8.0 - - - maven-surefire-plugin - 2.22.1 - - - maven-jar-plugin - 3.0.2 - - - maven-install-plugin - 2.5.2 - - - maven-deploy-plugin - 2.8.2 - - - - maven-site-plugin - 3.7.1 - - - maven-project-info-reports-plugin - 3.0.0 - - - com.coveo - fmt-maven-plugin - 2.9 - - src/main/java - src/test/java - false - .*\.java - false - false - - - - - - check - - - - - - - - diff --git a/src/examples/java/src/main/java/gov/fedramp/automationExample/FedrampAutomationValidator.java b/src/examples/java/src/main/java/gov/fedramp/automationExample/FedrampAutomationValidator.java deleted file mode 100644 index 1404e746d..000000000 --- a/src/examples/java/src/main/java/gov/fedramp/automationExample/FedrampAutomationValidator.java +++ /dev/null @@ -1,120 +0,0 @@ -package gov.fedramp.automationExample; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.xml.transform.stream.StreamSource; -import net.sf.saxon.om.NodeInfo; -import net.sf.saxon.s9api.DocumentBuilder; -import net.sf.saxon.s9api.Processor; -import net.sf.saxon.s9api.QName; -import net.sf.saxon.s9api.SaxonApiException; -import net.sf.saxon.s9api.XPathCompiler; -import net.sf.saxon.s9api.XPathExecutable; -import net.sf.saxon.s9api.XPathSelector; -import net.sf.saxon.s9api.XdmAtomicValue; -import net.sf.saxon.s9api.XdmDestination; -import net.sf.saxon.s9api.XdmItem; -import net.sf.saxon.s9api.XdmNode; -import net.sf.saxon.s9api.XdmValue; -import net.sf.saxon.s9api.XsltCompiler; -import net.sf.saxon.s9api.XsltExecutable; -import net.sf.saxon.s9api.XsltTransformer; - -/** - * Simple example of how to use Saxon-HE to apply fedramp-automation validation rules to an OSCAL - * Fedramp System Security Plan. - */ -public class FedrampAutomationValidator { - private String compiledSchXsltPath; - private String baselinesPath; - private String resourcesPath; - - private Processor processor; - private XsltExecutable xsltExecutable; - - public FedrampAutomationValidator( - String compiledSchXsltPath, String baselinesPath, String resourcesPath) - throws SaxonApiException { - this.compiledSchXsltPath = compiledSchXsltPath; - this.baselinesPath = baselinesPath; - this.resourcesPath = resourcesPath; - - // Create a Saxon processor - processor = new Processor(false); - // Compile the source XSLT to an XsltExecutable. - StreamSource xslDocument = new StreamSource(new File(this.compiledSchXsltPath)); - XsltCompiler xsltCompiler = processor.newXsltCompiler(); - xsltExecutable = xsltCompiler.compile(xslDocument); - } - - /** Validate the OSCAL document with the fedramp-automation rules as compiled to XSLT. */ - public List> validateOscalDocument(String sspPath) - throws IOException, SaxonApiException { - XsltTransformer xsltTransformer = getTransformer(); - - // Read the source SSP document - XdmNode inputNode = getInputNode(sspPath); - xsltTransformer.setInitialContextNode(inputNode); - - // Do the transformation and output the result directly to an XdmValue - // that we may query with XPath. - XdmDestination xdmDestination = new XdmDestination(); - xsltTransformer.setDestination(xdmDestination); - xsltTransformer.transform(); - - // Query failed assertions via XPath. - XdmNode svrlXdmNode = xdmDestination.getXdmNode(); - XdmValue failedAssertions = queryXPath(svrlXdmNode, "//svrl:failed-assert"); - - // Accumulate the failed assertion `test` attributes in a list of maps. - // An assertion looks something like: - /* - * Assertion - * description - */ - List> failedAsserts = new ArrayList>(); - for (XdmItem item : failedAssertions) { - XdmNode node = (XdmNode) item; - NodeInfo info = node.getUnderlyingNode(); - Map attributes = new HashMap(); - attributes.put("test", info.getAttributeValue("", "test")); - failedAsserts.add(attributes); - } - - return failedAsserts; - } - - private XsltTransformer getTransformer() { - XsltTransformer xsltTransformer = xsltExecutable.load(); - xsltTransformer.setParameter( - new QName("baselines-base-path"), new XdmAtomicValue(this.baselinesPath)); - xsltTransformer.setParameter( - new QName("registry-base-path"), new XdmAtomicValue(this.resourcesPath)); - // Set to `true` to validate external resource references. - xsltTransformer.setParameter( - new QName("param-use-remote-resources"), new XdmAtomicValue(false)); - return xsltTransformer; - } - - private XdmNode getInputNode(String sspPath) throws SaxonApiException, FileNotFoundException { - StreamSource inputSource = new StreamSource(new File(sspPath)); - DocumentBuilder documentBuilder = processor.newDocumentBuilder(); - return documentBuilder.build(inputSource); - } - - public XdmValue queryXPath(XdmNode sourceXdmNode, String xPathQuery) throws SaxonApiException { - XPathCompiler xPathCompiler = processor.newXPathCompiler(); - xPathCompiler.declareNamespace("svrl", "http://purl.oclc.org/dsdl/svrl"); - XPathExecutable executable = xPathCompiler.compile(xPathQuery); - XPathSelector selector = executable.load(); - - selector.setContextItem(sourceXdmNode); - return selector.evaluate(); - } -} diff --git a/src/examples/java/src/main/java/gov/fedramp/automationExample/OscalJsonToXmlConverter.java b/src/examples/java/src/main/java/gov/fedramp/automationExample/OscalJsonToXmlConverter.java deleted file mode 100644 index d8ca2aa61..000000000 --- a/src/examples/java/src/main/java/gov/fedramp/automationExample/OscalJsonToXmlConverter.java +++ /dev/null @@ -1,106 +0,0 @@ -package gov.fedramp.automationExample; - -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.Base64; -import javax.xml.transform.stream.StreamSource; -import net.sf.saxon.s9api.Processor; -import net.sf.saxon.s9api.QName; -import net.sf.saxon.s9api.SaxonApiException; -import net.sf.saxon.s9api.XPathCompiler; -import net.sf.saxon.s9api.XPathExecutable; -import net.sf.saxon.s9api.XPathSelector; -import net.sf.saxon.s9api.XdmAtomicValue; -import net.sf.saxon.s9api.XdmDestination; -import net.sf.saxon.s9api.XdmNode; -import net.sf.saxon.s9api.XdmValue; -import net.sf.saxon.s9api.XsltCompiler; -import net.sf.saxon.s9api.XsltExecutable; -import net.sf.saxon.s9api.XsltTransformer; - -/** - * Simple example of how to use Saxon-HE to apply fedramp-automation validation rules to an OSCAL - * Fedramp System Security Plan. - */ -public class OscalJsonToXmlConverter { - private static final String JSON_TO_XML_XSLT = - new File("../../../vendor/oscal/xml/convert/oscal_complete_json-to-xml-converter.xsl") - .getAbsolutePath(); - - private Processor processor; - private XsltExecutable xsltExecutable; - - public OscalJsonToXmlConverter() throws SaxonApiException { - // Create a Saxon processor - processor = new Processor(false); - // Compile the source XSLT to an XsltExecutable. - StreamSource xslDocument = new StreamSource(new File(JSON_TO_XML_XSLT)); - XsltCompiler xsltCompiler = processor.newXsltCompiler(); - xsltExecutable = xsltCompiler.compile(xslDocument); - } - - /** - * Convert a JSON SSP to XML. - * - *

This method is an example of how to use the NIST-provided OSCAL JSON to XML stylesheet. - * Rather than apply the stylesheet to a JSON document, the stylesheet instead is parameterized on - * the JSON SSP with the `file` attribute. This attribute must be set to a valid URI - a path, or - * a data URI. - * - *

To avoid network or filesystem I/O, you may choose to use a data URI. Here we demonstrate - * such data URI usage. - * - * @throws URISyntaxException - */ - public boolean convert(String jsonPath) - throws IOException, SaxonApiException, URISyntaxException { - XsltTransformer xsltTransformer = getTransformer(jsonPath); - - // Read the source SSP document - // XdmNode inputNode = getInputNode(jsonPath); - // xsltTransformer.setInitialContextNode(inputNode); - - // Do the transformation and output the result directly to an XdmValue - // that we may query with XPath. - XdmDestination xdmDestination = new XdmDestination(); - xsltTransformer.setDestination(xdmDestination); - xsltTransformer.transform(); - - // There should be a root node of `system-security-plan` in an OSCAL SSP - // document. - XdmNode svrlXdmNode = xdmDestination.getXdmNode(); - XdmValue rootNode = queryXPath(svrlXdmNode, "//oscal:system-security-plan"); - return rootNode.size() > 0; - } - - private XsltTransformer getTransformer(String jsonPath) throws IOException, URISyntaxException { - XsltTransformer xsltTransformer = xsltExecutable.load(); - URI jsonDataUri = getJsonDataUri(jsonPath); - xsltTransformer.setParameter(new QName("file"), new XdmAtomicValue(jsonDataUri)); - xsltTransformer.setInitialTemplate(new QName("from-json")); - return xsltTransformer; - } - - private XdmValue queryXPath(XdmNode sourceXdmNode, String xPathQuery) throws SaxonApiException { - XPathCompiler xPathCompiler = processor.newXPathCompiler(); - xPathCompiler.declareNamespace("oscal", "http://csrc.nist.gov/ns/oscal/1.0"); - XPathExecutable executable = xPathCompiler.compile(xPathQuery); - XPathSelector selector = executable.load(); - - selector.setContextItem(sourceXdmNode); - return selector.evaluate(); - } - - private URI getJsonDataUri(String jsonPath) throws IOException, URISyntaxException { - File jsonFile = new File(jsonPath); - String jsonDataUri = - "data:application/json;base64," - + Base64.getEncoder() - .encodeToString(Files.readAllBytes(Paths.get(jsonFile.getAbsolutePath()))); - return new URI(jsonDataUri); - } -} diff --git a/src/examples/java/src/test/java/gov/fedramp/automationExample/FedrampAutomationValidatorTest.java b/src/examples/java/src/test/java/gov/fedramp/automationExample/FedrampAutomationValidatorTest.java deleted file mode 100644 index b4f5ae2c9..000000000 --- a/src/examples/java/src/test/java/gov/fedramp/automationExample/FedrampAutomationValidatorTest.java +++ /dev/null @@ -1,108 +0,0 @@ -package gov.fedramp.automationExample; - -import java.io.File; -import java.util.List; -import java.util.Map; -import org.junit.Assert; -import org.junit.Test; - -/** Unit test for simple App. */ -public class FedrampAutomationValidatorTest { - - /** Location of baseline 800-53rev4 definitions */ - private static final String BASELINE_REV4_XML = "../../../dist/content/rev4/baselines/xml"; - - /** Location of resource values */ - private static final String RESOURCES_XML = "../../../dist/content/rev4/resources/xml"; - - /** compiled Schematron XSLT path for SSP resource values */ - private static final String SSP_RESOURCE = "../../../src/validations/target/rules/rev4/ssp.sch.xsl"; - - /** compiled Schematron XSLT path for SAP resource values */ - private static final String SAP_RESOURCE = "../../../src/validations/target/rules/rev4/sap.sch.xsl"; - - /** compiled Schematron XSLT path for SAR resource values */ - private static final String SAR_RESOURCE = "../../../src/validations/target/rules/rev4/sar.sch.xsl"; - - /** compiled Schematron XSLT path for POA&M resource values */ - private static final String POAM_RESOURCE = "../../../src/validations/target/rules/rev4/poam.sch.xsl"; - - /** SSP template */ - private static final String SSP_TEMPLATE = "../../../dist/content/rev4/templates/ssp/xml/FedRAMP-SSP-OSCAL-Template.xml"; - - /** SAP template */ - private static final String SAP_TEMPLATE = "../../../dist/content/rev4/templates/sap/xml/FedRAMP-SAP-OSCAL-Template.xml"; - - /** SAR template */ - private static final String SAR_TEMPLATE = "../../../dist/content/rev4/templates/sar/xml/FedRAMP-SAR-OSCAL-Template.xml"; - - /** POA&M template */ - private static final String POAM_TEMPLATE = "../../../dist/content/rev4/templates/poam/xml/FedRAMP-POAM-OSCAL-Template.xml"; - - /** error message returned when something unexpected happens */ - private static final String ERROR_MESSAGE = "Unexpected exception: "; - - /** Rigorous Test :-) */ - @Test - public void shouldValidateSSP() { - try { - FedrampAutomationValidator validator = new FedrampAutomationValidator( - new File(SSP_RESOURCE).getAbsolutePath(), - new File(BASELINE_REV4_XML).getAbsolutePath(), - new File(RESOURCES_XML).getAbsolutePath()); - List> failedAsserts = validator.validateOscalDocument( - new File(SSP_TEMPLATE).getAbsolutePath()); - Assert.assertNotNull(failedAsserts); - } catch (Exception e) { - Assert.fail(ERROR_MESSAGE + e.getMessage()); - } - } - - /** Rigorous Test :-) */ - @Test - public void shouldValidateSAP() { - try { - FedrampAutomationValidator validator = new FedrampAutomationValidator( - new File(SAP_RESOURCE).getAbsolutePath(), - new File(BASELINE_REV4_XML).getAbsolutePath(), - new File(RESOURCES_XML).getAbsolutePath()); - List> failedAsserts = validator.validateOscalDocument( - new File(SAP_TEMPLATE).getAbsolutePath()); - Assert.assertNotNull(failedAsserts); - } catch (Exception e) { - Assert.fail(ERROR_MESSAGE + e.getMessage()); - } - } - - /** Rigorous Test :-) */ - @Test - public void shouldValidateSAR() { - try { - FedrampAutomationValidator validator = new FedrampAutomationValidator( - new File(SAR_RESOURCE).getAbsolutePath(), - new File(BASELINE_REV4_XML).getAbsolutePath(), - new File(RESOURCES_XML).getAbsolutePath()); - List> failedAsserts = validator.validateOscalDocument( - new File(SAR_TEMPLATE).getAbsolutePath()); - Assert.assertNotNull(failedAsserts); - } catch (Exception e) { - Assert.fail(ERROR_MESSAGE + e.getMessage()); - } - } - - /** Rigorous Test :-) */ - @Test - public void shouldValidatePOAM() { - try { - FedrampAutomationValidator validator = new FedrampAutomationValidator( - new File(POAM_RESOURCE).getAbsolutePath(), - new File(BASELINE_REV4_XML).getAbsolutePath(), - new File(RESOURCES_XML).getAbsolutePath()); - List> failedAsserts = validator.validateOscalDocument( - new File(POAM_TEMPLATE).getAbsolutePath()); - Assert.assertNotNull(failedAsserts); - } catch (Exception e) { - Assert.fail(ERROR_MESSAGE + e.getMessage()); - } - } -} diff --git a/src/examples/java/src/test/java/gov/fedramp/automationExample/OscalJsonToXmlConverterTest.java b/src/examples/java/src/test/java/gov/fedramp/automationExample/OscalJsonToXmlConverterTest.java deleted file mode 100644 index bf65a739c..000000000 --- a/src/examples/java/src/test/java/gov/fedramp/automationExample/OscalJsonToXmlConverterTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package gov.fedramp.automationExample; - -import java.io.File; -import org.junit.Assert; -import org.junit.Test; - -/** Unit test for simple App. */ -public class OscalJsonToXmlConverterTest { - - /** absolute location of the demo SSP file (JSON) */ - private static final String DEMO_JSON_SSP_PATH = - new File("../../../dist/content/rev4/templates/ssp/json/FedRAMP-SSP-OSCAL-Template.json") - .getAbsolutePath(); - - @Test - public void testConvert() throws Exception { - OscalJsonToXmlConverter converter = new OscalJsonToXmlConverter(); - boolean success = converter.convert(DEMO_JSON_SSP_PATH); - Assert.assertTrue(success); - } -} diff --git a/src/examples/javascript/.gitignore b/src/examples/javascript/.gitignore deleted file mode 100644 index a56a7ef43..000000000 --- a/src/examples/javascript/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules - diff --git a/src/examples/javascript/.prettierrc b/src/examples/javascript/.prettierrc deleted file mode 100644 index 22755cfa6..000000000 --- a/src/examples/javascript/.prettierrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "arrowParens": "avoid", - "trailingComma": "all", - "useTabs": false, - "semi": true, - "singleQuote": true, - "bracketSpacing": true, - "jsxBracketSameLine": false, - "tabWidth": 2, - "printWidth": 80 -} diff --git a/src/examples/javascript/Dockerfile b/src/examples/javascript/Dockerfile deleted file mode 100644 index 8f884e231..000000000 --- a/src/examples/javascript/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM node:18.12.1-slim - -WORKDIR /code/src/examples/javascript -ADD package.json /code/src/examples/javascript/package.json -ADD package-lock.json /code/src/examples/javascript/package-lock.json -RUN npm i diff --git a/src/examples/javascript/README.md b/src/examples/javascript/README.md deleted file mode 100644 index 9feb90cee..000000000 --- a/src/examples/javascript/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# fedramp-automation Javascript usage example - -This is a simple example of how to use the fedramp-automation validation rules with `SaxonJS`. - -`SaxonJS` is available in two forms: - -- A node.js version, installable via npm: https://www.npmjs.com/package/saxon-js -- A browser version, which must be loaded via a ` - FedRAMP Validations - - - - -

- - - - diff --git a/src/web/module.mk b/src/web/module.mk deleted file mode 100644 index 4c5328e67..000000000 --- a/src/web/module.mk +++ /dev/null @@ -1,22 +0,0 @@ -REQUIRED_NODE_VERSION = $(strip $(shell cat .nvmrc)) -INSTALLED_NODE_VERSION = $(strip $(shell node --version)) - -init-web: node - cd src/web && \ - npm install - -node: -ifneq ($(REQUIRED_NODE_VERSION),$(INSTALLED_NODE_VERSION)) - $(error node.js version `$(REQUIRED_NODE_VERSION)` required, `$(INSTALLED_NODE_VERSION)` installed) -endif - -clean-web: ## Clean web artifacts - @echo "Cleaning web..." - cd src/web && \ - npm run clean - -build-web: node ## Build web bundle - @echo "Deprecated web bundle..." - -test-web: ## Test web codebase - @echo "Deprecated web tests..." diff --git a/src/web/package-lock.json b/src/web/package-lock.json deleted file mode 100644 index 63865c9ce..000000000 --- a/src/web/package-lock.json +++ /dev/null @@ -1,8702 +0,0 @@ -{ - "name": "web", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "dependencies": { - "classnames": "^2.3.2", - "commander": "^9.4.1", - "highlight.js": "^11.7.0", - "path-to-regexp": "^8.0.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-modal": "^3.16.1", - "reselect": "^4.1.7", - "saxon-js": "2.4.0", - "uswds": "^2.13.0", - "xml-formatter": "^2.6.1", - "yaml": "^2.3.4" - }, - "devDependencies": { - "@types/node": "^18.11.15", - "@types/react": "^17.0.52", - "@types/react-dom": "^17.0.18", - "@types/react-modal": "^3.13.1", - "@vitejs/plugin-react": "^2.2.0", - "autoprefixer": "^10.4.13", - "c8": "^7.12.0", - "concurrently": "^7.6.0", - "mkdirp": "^1.0.4", - "npm-run-all": "^4.1.5", - "prettier": "^2.8.1", - "sass": "^1.56.2", - "tsup": "^6.5.0", - "typescript": "^4.9.4", - "vite": "^3.2.11", - "vite-tsconfig-paths": "^4.0.3", - "vitest": "^0.25.8", - "vitest-mock-extended": "^1.0.7", - "xslt3": "^2.5.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/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/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "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, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/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, - "optional": true, - "peer": 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/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/@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/@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, - "optional": true, - "peer": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", - "dev": true - }, - "node_modules/@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.11.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.15.tgz", - "integrity": "sha512-VkhBbVo2+2oozlkdHXLrb3zjsRkpdnaU2bXmX8Wgle3PUi569eLRaHGlgETQHR7lLL1w7GiG3h9SnePhxNDecw==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/react": { - "version": "17.0.52", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.52.tgz", - "integrity": "sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "17.0.18", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.18.tgz", - "integrity": "sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw==", - "dev": true, - "dependencies": { - "@types/react": "^17" - } - }, - "node_modules/@types/react-modal": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.13.1.tgz", - "integrity": "sha512-iY/gPvTDIy6Z+37l+ibmrY+GTV4KQTHcCyR5FIytm182RQS69G5ps4PH2FxtC7bAQ2QRHXMevsBgck7IQruHNg==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "node_modules/@vitejs/plugin-react": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz", - "integrity": "sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-jsx": "^7.19.0", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-jsx-self": "^7.18.6", - "@babel/plugin-transform-react-jsx-source": "^7.19.6", - "magic-string": "^0.26.7", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^3.0.0" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/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, - "optional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.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, - "optional": true, - "peer": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "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": "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/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "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/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/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/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "dependencies": { - "follow-redirects": "^1.14.4" - } - }, - "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/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/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-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "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, - "optional": true, - "peer": true - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/bundle-require": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-3.1.2.tgz", - "integrity": "sha512-Of6l6JBAxiyQ5axFxUM6dYeP/W7X2Sozeo/4EYB9sJhL+dqL7TKjg+shwxp6jlu/6ZSERfsYtIpSJ1/x3XkAEA==", - "dev": true, - "dependencies": { - "load-tsconfig": "^0.2.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "esbuild": ">=0.13" - } - }, - "node_modules/c8": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", - "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/c8/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/cac": { - "version": "6.7.12", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.12.tgz", - "integrity": "sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/caniuse-lite": { - "version": "1.0.30001434", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", - "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "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/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "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/classlist-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.0.3.tgz", - "integrity": "sha512-bDLDUsSg5LYFWsc2hphtG6ulyaCFSupdEBU3wxNECKWHnyPVvY8EB9Wbt9DzWkstWclFZhDaZK/VnEK/DmqE/Q==" - }, - "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, - "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/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/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "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, - "optional": true, - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concurrently": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", - "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.29.1", - "lodash": "^4.17.21", - "rxjs": "^7.0.0", - "shell-quote": "^1.7.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^17.3.1" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "node_modules/concurrently/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/concurrently/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/concurrently/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/concurrently/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/concurrently/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/concurrently/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/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/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "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/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", - "dev": true, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "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/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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, - "optional": true, - "peer": true - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "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": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "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/dir-glob/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/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/domready": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz", - "integrity": "sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "node_modules/element-closest": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/element-closest/-/element-closest-2.0.2.tgz", - "integrity": "sha512-QCqAWP3kwj8Gz9UXncVXQGdrhnWxD8SQBSeZp5pOsyCcQ6RpL738L1/tfuwBiMi6F1fYkxqPnBrFBR4L+f49Cg==", - "engines": { - "node": ">=4.0.0" - } - }, - "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/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/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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.15.16", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.16.tgz", - "integrity": "sha512-o6iS9zxdHrrojjlj6pNGC2NAg86ECZqIETswTM5KmJitq+R1YmahhWtMumeQp9lHqJaROGnsBi2RLawGnfo5ZQ==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.16", - "@esbuild/linux-loong64": "0.15.16", - "esbuild-android-64": "0.15.16", - "esbuild-android-arm64": "0.15.16", - "esbuild-darwin-64": "0.15.16", - "esbuild-darwin-arm64": "0.15.16", - "esbuild-freebsd-64": "0.15.16", - "esbuild-freebsd-arm64": "0.15.16", - "esbuild-linux-32": "0.15.16", - "esbuild-linux-64": "0.15.16", - "esbuild-linux-arm": "0.15.16", - "esbuild-linux-arm64": "0.15.16", - "esbuild-linux-mips64le": "0.15.16", - "esbuild-linux-ppc64le": "0.15.16", - "esbuild-linux-riscv64": "0.15.16", - "esbuild-linux-s390x": "0.15.16", - "esbuild-netbsd-64": "0.15.16", - "esbuild-openbsd-64": "0.15.16", - "esbuild-sunos-64": "0.15.16", - "esbuild-windows-32": "0.15.16", - "esbuild-windows-64": "0.15.16", - "esbuild-windows-arm64": "0.15.16" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.16", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.16.tgz", - "integrity": "sha512-fMXaUr5ou0M4WnewBKsspMtX++C1yIa3nJ5R2LSbLCfJT3uFdcRoU/NZjoM4kOMKyOD9Sa/2vlgN8G07K3SJnw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "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-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "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, - "optional": true, - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "optional": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "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, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "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.6.0" - } - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "optional": true, - "peer": 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/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-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/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "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/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/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": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "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-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/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "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/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/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/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/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "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/highlight.js": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.7.0.tgz", - "integrity": "sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==", - "engines": { - "node": ">=12.0.0" - } - }, - "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/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "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/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, - "optional": true, - "peer": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "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, - "optional": true, - "peer": 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/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "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-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "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-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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-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-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-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-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, - "optional": true, - "peer": true - }, - "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-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-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/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "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-lib-report/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/istanbul-lib-report/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/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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==" - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": 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-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/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/keyboardevent-key-polyfill": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keyboardevent-key-polyfill/-/keyboardevent-key-polyfill-1.1.0.tgz", - "integrity": "sha512-NTDqo7XhzL1fqmUzYroiyK2qGua7sOMzLav35BfNA/mPUSCtw8pZghHFMTYR9JdnJ23IQz695FcaM6EE6bpbFQ==" - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "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-tsconfig": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.3.tgz", - "integrity": "sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/local-pkg": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", - "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "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/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.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/magic-string": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", - "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, - "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/matches-selector": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/matches-selector/-/matches-selector-1.2.0.tgz", - "integrity": "sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==" - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "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/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "mime-db": "1.52.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/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/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/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/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/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "dev": true, - "optional": true, - "peer": 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.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "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/normalize-package-data/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/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-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/npm-run-all/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/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/npm-run-all/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all/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/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/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "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.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "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/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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/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/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true, - "optional": true, - "peer": true - }, - "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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": "8.0.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.0.0.tgz", - "integrity": "sha512-GAWaqWlTjYK/7SVpIUA6CTxmcg65SP30sbjdCvyYReosRkk7Z/LyHWwkK3Vu0FcIi0FNTADUs4eh1AsU5s10cg==", - "engines": { - "node": ">=16" - } - }, - "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/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/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.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/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/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.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "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, - "optional": true, - "peer": true - }, - "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/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true, - "optional": true, - "peer": true - }, - "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/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-modal": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.1.tgz", - "integrity": "sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==", - "dependencies": { - "exenv": "^1.2.0", - "prop-types": "^15.7.2", - "react-lifecycles-compat": "^3.0.0", - "warning": "^4.0.3" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", - "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18" - } - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "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/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/receptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/receptor/-/receptor-1.0.0.tgz", - "integrity": "sha512-yvVEqVQDNzEmGkluCkEdbKSXqZb3WGxotI/VukXIQ+4/BXEeXVjWtmC6jWaR1BIsmEAGYQy3OTaNgDj2Svr01w==", - "dependencies": { - "element-closest": "^2.0.1", - "keyboardevent-key-polyfill": "^1.0.2", - "matches-selector": "^1.0.0", - "object-assign": "^4.1.0" - } - }, - "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/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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-id-refs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/resolve-id-refs/-/resolve-id-refs-0.1.0.tgz", - "integrity": "sha512-hNS03NEmVpJheF7yfyagNh57XuKc0z+NkSO0oBbeO67o6IJKoqlDfnNIxhjp7aTWwjmSWZQhtiGrOgZXVyM90w==" - }, - "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/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": "3.5.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.5.0.tgz", - "integrity": "sha512-TYu2L+TGhmNsXCtByont89u+ATQLcDy6A+++PwLXYunRtOm7XnaD+65s1pvewaOxMYR0eOkMXn9/i0saBxxpnQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "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": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "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, - "optional": true, - "peer": true - }, - "node_modules/sass": { - "version": "1.56.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.2.tgz", - "integrity": "sha512-ciEJhnyCRwzlBCB+h5cCPM6ie/6f8HrhZMQOf5vlU60Y1bI1rx5Zb0vlDZvaycHsg/MqFfF1Eq2eokAa32iw8w==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/saxon-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/saxon-js/-/saxon-js-2.4.0.tgz", - "integrity": "sha512-PQ0EaoAECzYAAP6d7DZx4aRxVYLDTD3JPsEKxNpbR5q20d4/6S1cHjgaFm0O1roCxkBu4e/3jB71HL2hPz1T/w==", - "dependencies": { - "axios": "^0.24.0" - } - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "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/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/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "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.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/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/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "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, - "optional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.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==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "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": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", - "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/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.padend": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", - "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/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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-literal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.0.tgz", - "integrity": "sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ==", - "dev": true, - "dependencies": { - "acorn": "^8.8.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/sucrase": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.21.0.tgz", - "integrity": "sha512-FjAhMJjDcifARI7bZej0Bi1yekjWQHoEvWIXhLPwDhC6O4iZ5PtGb86WV56riW87hzpgB13wwBKO9vKAiWu5VQ==", - "dev": true, - "dependencies": { - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/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/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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/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/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", - "dev": true, - "optional": true, - "peer": 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/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, - "optional": true, - "peer": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "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": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tinybench": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.3.1.tgz", - "integrity": "sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==", - "dev": true - }, - "node_modules/tinypool": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.0.tgz", - "integrity": "sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz", - "integrity": "sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==", - "dev": true, - "engines": { - "node": ">=14.0.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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "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/ts-essentials": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-9.3.0.tgz", - "integrity": "sha512-XeiCboEyBG8UqXZtXl59bWEi4ZgOqRsogFDI6WDGIF1LmzbYiAkIwjkXN6zZWWl4re/lsOqMlYfe8KA0XiiEPw==", - "dev": true, - "peerDependencies": { - "typescript": ">=4.1.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "node_modules/tsconfck": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.0.1.tgz", - "integrity": "sha512-/ipap2eecmVBmBlsQLBRbUmUNFwNJV/z2E+X0FPtHNjPwroMZQ7m39RMaCywlCulBheYXgMdUlWDd9rzxwMA0Q==", - "dev": true, - "bin": { - "tsconfck": "bin/tsconfck.js" - }, - "engines": { - "node": "^14.13.1 || ^16 || >=18", - "pnpm": "^7.0.1" - }, - "peerDependencies": { - "typescript": "^4.3.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/tsup": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/tsup/-/tsup-6.5.0.tgz", - "integrity": "sha512-36u82r7rYqRHFkD15R20Cd4ercPkbYmuvRkz3Q1LCm5BsiFNUgpo36zbjVhCOgvjyxNBWNKHsaD5Rl8SykfzNA==", - "dev": true, - "dependencies": { - "bundle-require": "^3.1.2", - "cac": "^6.7.12", - "chokidar": "^3.5.1", - "debug": "^4.3.1", - "esbuild": "^0.15.1", - "execa": "^5.0.0", - "globby": "^11.0.3", - "joycon": "^3.0.1", - "postcss-load-config": "^3.0.1", - "resolve-from": "^5.0.0", - "rollup": "^3.2.5", - "source-map": "0.8.0-beta.0", - "sucrase": "^3.20.3", - "tree-kill": "^1.2.2" - }, - "bin": { - "tsup": "dist/cli-default.js", - "tsup-node": "dist/cli-node.js" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@swc/core": "^1", - "postcss": "^8.4.12", - "typescript": "^4.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "postcss": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/tsup/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/tsup/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/tsup/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/tsup/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/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "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/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.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/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/uswds": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/uswds/-/uswds-2.13.3.tgz", - "integrity": "sha512-qCblljeaRvS3+PrSxoHqQwmMnp746+Y1YZA34BkTzJknvo2bhhdzGE21yJaInumzIqV3glLD13TFdRwrwikMMQ==", - "dependencies": { - "classlist-polyfill": "1.0.3", - "domready": "1.0.8", - "object-assign": "4.1.1", - "receptor": "1.0.0", - "resolve-id-refs": "0.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "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/vite": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.11.tgz", - "integrity": "sha512-K/jGKL/PgbIgKCiJo5QbASQhFiV02X9Jh+Qq0AKCRCRKZtOTVi4t6wh75FDpGf2N9rYOnzH87OEFQNaFy6pdxQ==", - "dev": true, - "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-tsconfig-paths": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.0.3.tgz", - "integrity": "sha512-gRO2Q/tOkV+9kMht5tz90+IaEKvW2zCnvwJV3tp2ruPNZOTM5rF+yXorJT4ggmAMYEaJ3nyXjx5P5jY5FwiZ+A==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "tsconfck": "^2.0.1" - }, - "peerDependencies": { - "vite": ">2.0.0-0" - } - }, - "node_modules/vite/node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/vitest": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.25.8.tgz", - "integrity": "sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==", - "dev": true, - "dependencies": { - "@types/chai": "^4.3.4", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "acorn": "^8.8.1", - "acorn-walk": "^8.2.0", - "chai": "^4.3.7", - "debug": "^4.3.4", - "local-pkg": "^0.4.2", - "source-map": "^0.6.1", - "strip-literal": "^1.0.0", - "tinybench": "^2.3.1", - "tinypool": "^0.3.0", - "tinyspy": "^1.0.2", - "vite": "^3.0.0 || ^4.0.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": ">=v14.16.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vitest-mock-extended": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/vitest-mock-extended/-/vitest-mock-extended-1.0.7.tgz", - "integrity": "sha512-AgNlZ3yxbrQNDaBuZgkSUASeTmIcACLWTmoBujjL4rGXiiGLhjlQ12ItIZCvSjkdQ9hl+6KSdjztmLxPSIuvGA==", - "dev": true, - "dependencies": { - "ts-essentials": "^9.3.0" - }, - "peerDependencies": { - "typescript": "3.x || 4.x", - "vitest": ">=0.24.3" - } - }, - "node_modules/vitest/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/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-encoding/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, - "optional": true, - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "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/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true, - "optional": true, - "peer": 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/xml-formatter": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.6.1.tgz", - "integrity": "sha512-dOiGwoqm8y22QdTNI7A+N03tyVfBlQ0/oehAzxIZtwnFAHGeSlrfjF73YQvzSsa/Kt6+YZasKsrdu6OIpuBggw==", - "dependencies": { - "xml-parser-xo": "^3.2.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/xml-parser-xo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.2.0.tgz", - "integrity": "sha512-8LRU6cq+d7mVsoDaMhnkkt3CTtAs4153p49fRo+HIB3I1FD1o5CeXRjRH29sQevIfVJIcPjKSsPU/+Ujhq09Rg==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/xslt3": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xslt3/-/xslt3-2.5.0.tgz", - "integrity": "sha512-ZtdcA7di6dATmN21t3yX9tAbpuXPda2gjBCwCBSdTr5BFVbDFtIeaOhi50onwz785Wowr04m0qdb7wCL80y0fQ==", - "dev": true, - "dependencies": { - "axios": "^0.24.0", - "saxon-js": "^2.5.0" - }, - "bin": { - "xslt3": "xslt3.js" - } - }, - "node_modules/xslt3/node_modules/saxon-js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/saxon-js/-/saxon-js-2.5.0.tgz", - "integrity": "sha512-bdUmnW//mNha5OFYGDA/rqh+4ZuHPtYUQor8yqnOIhFb0JxD+mauFuZbp2GpEwHnTEpFTQ8OcoVFLcDxu7SXAg==", - "dev": true, - "dependencies": { - "axios": "^0.24.0" - } - }, - "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/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "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/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "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": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - } - }, - "@babel/compat-data": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", - "dev": true - }, - "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", - "dev": true, - "requires": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@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" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", - "dev": true - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - }, - "@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@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, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@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, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@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" - } - }, - "@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" - } - }, - "@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, - "optional": true, - "peer": true - }, - "@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", - "dev": true - }, - "@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", - "dev": true, - "requires": { - "@types/chai": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/node": { - "version": "18.11.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.15.tgz", - "integrity": "sha512-VkhBbVo2+2oozlkdHXLrb3zjsRkpdnaU2bXmX8Wgle3PUi569eLRaHGlgETQHR7lLL1w7GiG3h9SnePhxNDecw==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "@types/react": { - "version": "17.0.52", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.52.tgz", - "integrity": "sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "17.0.18", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.18.tgz", - "integrity": "sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw==", - "dev": true, - "requires": { - "@types/react": "^17" - } - }, - "@types/react-modal": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.13.1.tgz", - "integrity": "sha512-iY/gPvTDIy6Z+37l+ibmrY+GTV4KQTHcCyR5FIytm182RQS69G5ps4PH2FxtC7bAQ2QRHXMevsBgck7IQruHNg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "@vitejs/plugin-react": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz", - "integrity": "sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==", - "dev": true, - "requires": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-jsx": "^7.19.0", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-jsx-self": "^7.18.6", - "@babel/plugin-transform-react-jsx-source": "^7.19.6", - "magic-string": "^0.26.7", - "react-refresh": "^0.14.0" - } - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true, - "optional": true, - "peer": true - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "optional": true, - "peer": 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, - "optional": true, - "peer": true, - "requires": { - "debug": "4" - } - }, - "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": "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" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "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" - } - }, - "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 - }, - "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 - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "optional": true, - "peer": true - }, - "autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "requires": { - "follow-redirects": "^1.14.4" - } - }, - "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 - }, - "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 - }, - "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-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true, - "optional": true, - "peer": true - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "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, - "optional": true, - "peer": true - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "bundle-require": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-3.1.2.tgz", - "integrity": "sha512-Of6l6JBAxiyQ5axFxUM6dYeP/W7X2Sozeo/4EYB9sJhL+dqL7TKjg+shwxp6jlu/6ZSERfsYtIpSJ1/x3XkAEA==", - "dev": true, - "requires": { - "load-tsconfig": "^0.2.0" - } - }, - "c8": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", - "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "dependencies": { - "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" - } - } - } - }, - "cac": { - "version": "6.7.12", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.12.tgz", - "integrity": "sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==", - "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" - } - }, - "caniuse-lite": { - "version": "1.0.30001434", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", - "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", - "dev": true - }, - "chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "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" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "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" - } - }, - "classlist-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.0.3.tgz", - "integrity": "sha512-bDLDUsSg5LYFWsc2hphtG6ulyaCFSupdEBU3wxNECKWHnyPVvY8EB9Wbt9DzWkstWclFZhDaZK/VnEK/DmqE/Q==" - }, - "classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, - "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" - } - }, - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "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, - "optional": true, - "peer": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concurrently": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", - "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "date-fns": "^2.29.1", - "lodash": "^4.17.21", - "rxjs": "^7.0.0", - "shell-quote": "^1.7.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^17.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "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" - } - } - } - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "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" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true, - "optional": true, - "peer": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", - "dev": true - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", - "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" - } - }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true, - "optional": true, - "peer": true - }, - "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "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, - "optional": true, - "peer": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "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": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "optional": true, - "peer": 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" - }, - "dependencies": { - "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 - } - } - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "domready": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz", - "integrity": "sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==" - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "element-closest": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/element-closest/-/element-closest-2.0.2.tgz", - "integrity": "sha512-QCqAWP3kwj8Gz9UXncVXQGdrhnWxD8SQBSeZp5pOsyCcQ6RpL738L1/tfuwBiMi6F1fYkxqPnBrFBR4L+f49Cg==" - }, - "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 - }, - "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" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "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.15.16", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.16.tgz", - "integrity": "sha512-o6iS9zxdHrrojjlj6pNGC2NAg86ECZqIETswTM5KmJitq+R1YmahhWtMumeQp9lHqJaROGnsBi2RLawGnfo5ZQ==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.16", - "@esbuild/linux-loong64": "0.15.16", - "esbuild-android-64": "0.15.16", - "esbuild-android-arm64": "0.15.16", - "esbuild-darwin-64": "0.15.16", - "esbuild-darwin-arm64": "0.15.16", - "esbuild-freebsd-64": "0.15.16", - "esbuild-freebsd-arm64": "0.15.16", - "esbuild-linux-32": "0.15.16", - "esbuild-linux-64": "0.15.16", - "esbuild-linux-arm": "0.15.16", - "esbuild-linux-arm64": "0.15.16", - "esbuild-linux-mips64le": "0.15.16", - "esbuild-linux-ppc64le": "0.15.16", - "esbuild-linux-riscv64": "0.15.16", - "esbuild-linux-s390x": "0.15.16", - "esbuild-netbsd-64": "0.15.16", - "esbuild-openbsd-64": "0.15.16", - "esbuild-sunos-64": "0.15.16", - "esbuild-windows-32": "0.15.16", - "esbuild-windows-64": "0.15.16", - "esbuild-windows-arm64": "0.15.16" - } - }, - "esbuild-darwin-arm64": { - "version": "0.15.16", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.16.tgz", - "integrity": "sha512-fMXaUr5ou0M4WnewBKsspMtX++C1yIa3nJ5R2LSbLCfJT3uFdcRoU/NZjoM4kOMKyOD9Sa/2vlgN8G07K3SJnw==", - "dev": true, - "optional": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "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, - "optional": true, - "peer": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "optional": true, - "peer": 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, - "optional": true, - "peer": 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" - } - }, - "exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "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-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "optional": true, - "peer": 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" - } - }, - "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-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" - } - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "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" - } - }, - "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 - }, - "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": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "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" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "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" - } - }, - "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 - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "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" - } - }, - "highlight.js": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.7.0.tgz", - "integrity": "sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==" - }, - "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 - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "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 - }, - "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, - "optional": true, - "peer": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "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, - "optional": true, - "peer": 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 - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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 - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "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-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "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-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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-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-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-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-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, - "optional": true, - "peer": true - }, - "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-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-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" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "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" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "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==" - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "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 - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "keyboardevent-key-polyfill": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keyboardevent-key-polyfill/-/keyboardevent-key-polyfill-1.1.0.tgz", - "integrity": "sha512-NTDqo7XhzL1fqmUzYroiyK2qGua7sOMzLav35BfNA/mPUSCtw8pZghHFMTYR9JdnJ23IQz695FcaM6EE6bpbFQ==" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "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 - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "load-tsconfig": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.3.tgz", - "integrity": "sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==", - "dev": true - }, - "local-pkg": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", - "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", - "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" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "magic-string": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", - "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "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" - } - }, - "matches-selector": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/matches-selector/-/matches-selector-1.2.0.tgz", - "integrity": "sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==" - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "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 - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "optional": true, - "peer": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mime-db": "1.52.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 - }, - "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" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "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 - }, - "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" - } - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "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" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "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-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "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" - } - } - } - }, - "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" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true, - "optional": true, - "peer": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "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.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "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" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "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" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true, - "optional": true, - "peer": true - }, - "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "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": "8.0.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.0.0.tgz", - "integrity": "sha512-GAWaqWlTjYK/7SVpIUA6CTxmcg65SP30sbjdCvyYReosRkk7Z/LyHWwkK3Vu0FcIi0FNTADUs4eh1AsU5s10cg==" - }, - "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" - } - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "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.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "dependencies": { - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - } - } - }, - "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.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "optional": true, - "peer": true - }, - "prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", - "dev": true - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "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, - "optional": true, - "peer": true - }, - "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 - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true, - "optional": true, - "peer": true - }, - "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 - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-modal": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.1.tgz", - "integrity": "sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==", - "requires": { - "exenv": "^1.2.0", - "prop-types": "^15.7.2", - "react-lifecycles-compat": "^3.0.0", - "warning": "^4.0.3" - } - }, - "react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.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" - } - }, - "receptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/receptor/-/receptor-1.0.0.tgz", - "integrity": "sha512-yvVEqVQDNzEmGkluCkEdbKSXqZb3WGxotI/VukXIQ+4/BXEeXVjWtmC6jWaR1BIsmEAGYQy3OTaNgDj2Svr01w==", - "requires": { - "element-closest": "^2.0.1", - "keyboardevent-key-polyfill": "^1.0.2", - "matches-selector": "^1.0.0", - "object-assign": "^4.1.0" - } - }, - "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" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "optional": true, - "peer": true - }, - "reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "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-id-refs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/resolve-id-refs/-/resolve-id-refs-0.1.0.tgz", - "integrity": "sha512-hNS03NEmVpJheF7yfyagNh57XuKc0z+NkSO0oBbeO67o6IJKoqlDfnNIxhjp7aTWwjmSWZQhtiGrOgZXVyM90w==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "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": "3.5.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.5.0.tgz", - "integrity": "sha512-TYu2L+TGhmNsXCtByont89u+ATQLcDy6A+++PwLXYunRtOm7XnaD+65s1pvewaOxMYR0eOkMXn9/i0saBxxpnQ==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "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": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "optional": true, - "peer": true - }, - "sass": { - "version": "1.56.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.2.tgz", - "integrity": "sha512-ciEJhnyCRwzlBCB+h5cCPM6ie/6f8HrhZMQOf5vlU60Y1bI1rx5Zb0vlDZvaycHsg/MqFfF1Eq2eokAa32iw8w==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "saxon-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/saxon-js/-/saxon-js-2.4.0.tgz", - "integrity": "sha512-PQ0EaoAECzYAAP6d7DZx4aRxVYLDTD3JPsEKxNpbR5q20d4/6S1cHjgaFm0O1roCxkBu4e/3jB71HL2hPz1T/w==", - "requires": { - "axios": "^0.24.0" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "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 - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "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.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "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 - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "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, - "optional": true, - "peer": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", - "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 - }, - "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.padend": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "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": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "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-literal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.0.tgz", - "integrity": "sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ==", - "dev": true, - "requires": { - "acorn": "^8.8.1" - } - }, - "sucrase": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.21.0.tgz", - "integrity": "sha512-FjAhMJjDcifARI7bZej0Bi1yekjWQHoEvWIXhLPwDhC6O4iZ5PtGb86WV56riW87hzpgB13wwBKO9vKAiWu5VQ==", - "dev": true, - "requires": { - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - } - } - }, - "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" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "optional": true, - "peer": true - }, - "terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "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, - "optional": true, - "peer": true - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "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": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "tinybench": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.3.1.tgz", - "integrity": "sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==", - "dev": true - }, - "tinypool": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.0.tgz", - "integrity": "sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==", - "dev": true - }, - "tinyspy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz", - "integrity": "sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "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" - } - }, - "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "optional": true, - "peer": 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 - }, - "ts-essentials": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-9.3.0.tgz", - "integrity": "sha512-XeiCboEyBG8UqXZtXl59bWEi4ZgOqRsogFDI6WDGIF1LmzbYiAkIwjkXN6zZWWl4re/lsOqMlYfe8KA0XiiEPw==", - "dev": true, - "requires": {} - }, - "ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "tsconfck": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.0.1.tgz", - "integrity": "sha512-/ipap2eecmVBmBlsQLBRbUmUNFwNJV/z2E+X0FPtHNjPwroMZQ7m39RMaCywlCulBheYXgMdUlWDd9rzxwMA0Q==", - "dev": true, - "requires": {} - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "tsup": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/tsup/-/tsup-6.5.0.tgz", - "integrity": "sha512-36u82r7rYqRHFkD15R20Cd4ercPkbYmuvRkz3Q1LCm5BsiFNUgpo36zbjVhCOgvjyxNBWNKHsaD5Rl8SykfzNA==", - "dev": true, - "requires": { - "bundle-require": "^3.1.2", - "cac": "^6.7.12", - "chokidar": "^3.5.1", - "debug": "^4.3.1", - "esbuild": "^0.15.1", - "execa": "^5.0.0", - "globby": "^11.0.3", - "joycon": "^3.0.1", - "postcss-load-config": "^3.0.1", - "resolve-from": "^5.0.0", - "rollup": "^3.2.5", - "source-map": "0.8.0-beta.0", - "sucrase": "^3.20.3", - "tree-kill": "^1.2.2" - }, - "dependencies": { - "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" - } - } - } - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "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 - }, - "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "dev": 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" - } - }, - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "optional": true, - "peer": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "uswds": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/uswds/-/uswds-2.13.3.tgz", - "integrity": "sha512-qCblljeaRvS3+PrSxoHqQwmMnp746+Y1YZA34BkTzJknvo2bhhdzGE21yJaInumzIqV3glLD13TFdRwrwikMMQ==", - "requires": { - "classlist-polyfill": "1.0.3", - "domready": "1.0.8", - "object-assign": "4.1.1", - "receptor": "1.0.0", - "resolve-id-refs": "0.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "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" - } - }, - "vite": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.11.tgz", - "integrity": "sha512-K/jGKL/PgbIgKCiJo5QbASQhFiV02X9Jh+Qq0AKCRCRKZtOTVi4t6wh75FDpGf2N9rYOnzH87OEFQNaFy6pdxQ==", - "dev": true, - "requires": { - "esbuild": "^0.15.9", - "fsevents": "~2.3.2", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - }, - "dependencies": { - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - } - } - }, - "vite-tsconfig-paths": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.0.3.tgz", - "integrity": "sha512-gRO2Q/tOkV+9kMht5tz90+IaEKvW2zCnvwJV3tp2ruPNZOTM5rF+yXorJT4ggmAMYEaJ3nyXjx5P5jY5FwiZ+A==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "tsconfck": "^2.0.1" - } - }, - "vitest": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.25.8.tgz", - "integrity": "sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==", - "dev": true, - "requires": { - "@types/chai": "^4.3.4", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "acorn": "^8.8.1", - "acorn-walk": "^8.2.0", - "chai": "^4.3.7", - "debug": "^4.3.4", - "local-pkg": "^0.4.2", - "source-map": "^0.6.1", - "strip-literal": "^1.0.0", - "tinybench": "^2.3.1", - "tinypool": "^0.3.0", - "tinyspy": "^1.0.2", - "vite": "^3.0.0 || ^4.0.0" - }, - "dependencies": { - "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 - } - } - }, - "vitest-mock-extended": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/vitest-mock-extended/-/vitest-mock-extended-1.0.7.tgz", - "integrity": "sha512-AgNlZ3yxbrQNDaBuZgkSUASeTmIcACLWTmoBujjL4rGXiiGLhjlQ12ItIZCvSjkdQ9hl+6KSdjztmLxPSIuvGA==", - "dev": true, - "requires": { - "ts-essentials": "^9.3.0" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "optional": true, - "peer": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "iconv-lite": "0.4.24" - }, - "dependencies": { - "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, - "optional": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true, - "optional": true, - "peer": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "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" - } - }, - "word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "optional": true, - "peer": true - }, - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - }, - "xml-formatter": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.6.1.tgz", - "integrity": "sha512-dOiGwoqm8y22QdTNI7A+N03tyVfBlQ0/oehAzxIZtwnFAHGeSlrfjF73YQvzSsa/Kt6+YZasKsrdu6OIpuBggw==", - "requires": { - "xml-parser-xo": "^3.2.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true, - "optional": true, - "peer": true - }, - "xml-parser-xo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.2.0.tgz", - "integrity": "sha512-8LRU6cq+d7mVsoDaMhnkkt3CTtAs4153p49fRo+HIB3I1FD1o5CeXRjRH29sQevIfVJIcPjKSsPU/+Ujhq09Rg==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, - "optional": true, - "peer": true - }, - "xslt3": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xslt3/-/xslt3-2.5.0.tgz", - "integrity": "sha512-ZtdcA7di6dATmN21t3yX9tAbpuXPda2gjBCwCBSdTr5BFVbDFtIeaOhi50onwz785Wowr04m0qdb7wCL80y0fQ==", - "dev": true, - "requires": { - "axios": "^0.24.0", - "saxon-js": "^2.5.0" - }, - "dependencies": { - "saxon-js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/saxon-js/-/saxon-js-2.5.0.tgz", - "integrity": "sha512-bdUmnW//mNha5OFYGDA/rqh+4ZuHPtYUQor8yqnOIhFb0JxD+mauFuZbp2GpEwHnTEpFTQ8OcoVFLcDxu7SXAg==", - "dev": true, - "requires": { - "axios": "^0.24.0" - } - } - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==" - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "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.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "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 - }, - "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/src/web/package.json b/src/web/package.json deleted file mode 100644 index 5168f1715..000000000 --- a/src/web/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "type": "module", - "scripts": { - "build": "mkdirp public/rules && run-s build:cli build:schematron build:schematron:summary:* build:json build:typecheck build:vite", - "build:cli": "tsup --format cjs --out-dir ./bin ./src/cli/index.ts", - "build:json": "run-p build:json:sef:* && run-p build:json:cli:*", - "build:json:cli:assertion-views": "node bin/index.cjs create-assertion-view", - "build:json:cli:schematron-summaries": "node bin/index.cjs generate-schematron-summaries", - "build:json:cli:xspec-summaries": "node bin/index.cjs create-xspec-summaries", - "build:json:sef:assertion-grouping": "xslt3 -xsl:../validations/rules/assertion-grouping.xsl -export:public/rules/assertion-grouping.sef.json -relocate:on -nogo", - "build:json:sef:ssp-json-to-xml": "xslt3 -xsl:../../vendor/oscal/xml/convert/oscal_ssp_json-to-xml-converter.xsl -export:public/rules/oscal_ssp_json-to-xml-converter.sef.json -relocate:on -nogo", - "build:json:sef:sap-json-to-xml": "xslt3 -xsl:../../vendor/oscal/xml/convert/oscal_assessment-plan_json-to-xml-converter.xsl -export:public/rules/oscal_assessment-plan_json-to-xml-converter.sef.json -relocate:on -nogo", - "build:json:sef:sar-json-to-xml": "xslt3 -xsl:../../vendor/oscal/xml/convert/oscal_assessment-results_json-to-xml-converter.xsl -export:public/rules/oscal_assessment-results_json-to-xml-converter.sef.json -relocate:on -nogo", - "build:json:sef:poam-json-to-xml": "xslt3 -xsl:../../vendor/oscal/xml/convert/oscal_poam_json-to-xml-converter.xsl -export:public/rules/oscal_poam_json-to-xml-converter.sef.json -relocate:on -nogo", - "build:schematron": "node bin/index.cjs compile-schematron", - "build:schematron:summary:rev4": "xslt3 -s:../validations/rules/rev4/rules.xsl -xsl:../validations/rules/rev4/rules.xsl -o:public/rules/rules-rev4.html", - "build:schematron:summary:rev5": "xslt3 -s:../validations/rules/rev5/rules.xsl -xsl:../validations/rules/rev5/rules.xsl -o:public/rules/rules-rev5.html", - "build:typecheck": "tsc --noEmit", - "build:vite": "vite build", - "cli": "node bin/index.cjs", - "clean": "rm -rf build coverage", - "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", - "lint": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\"", - "preview": "vite preview", - "start": "run-p start:*", - "start:typecheck": "tsc --noEmit --watch", - "start:vite": "vite", - "test": "vitest run", - "test:watch": "vitest watch", - "test:coverage": "vitest --coverage && open ./coverage/lcov-report/index.html" - }, - "dependencies": { - "classnames": "^2.3.2", - "commander": "^9.4.1", - "highlight.js": "^11.7.0", - "path-to-regexp": "^8.0.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-modal": "^3.16.1", - "reselect": "^4.1.7", - "saxon-js": "2.4.0", - "uswds": "^2.13.0", - "xml-formatter": "^2.6.1", - "yaml": "^2.3.4" - }, - "devDependencies": { - "@types/node": "^18.11.15", - "@types/react": "^17.0.52", - "@types/react-dom": "^17.0.18", - "@types/react-modal": "^3.13.1", - "@vitejs/plugin-react": "^2.2.0", - "autoprefixer": "^10.4.13", - "c8": "^7.12.0", - "concurrently": "^7.6.0", - "mkdirp": "^1.0.4", - "npm-run-all": "^4.1.5", - "prettier": "^2.8.1", - "sass": "^1.56.2", - "tsup": "^6.5.0", - "typescript": "^4.9.4", - "vite": "^3.2.11", - "vite-tsconfig-paths": "^4.0.3", - "vitest": "^0.25.8", - "vitest-mock-extended": "^1.0.7", - "xslt3": "^2.5.0" - } -} diff --git a/src/web/postcss.config.cjs b/src/web/postcss.config.cjs deleted file mode 100644 index f3902cb13..000000000 --- a/src/web/postcss.config.cjs +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - plugins: { - autoprefixer: {}, - ...(false //process.env.NODE_ENV === 'production' - ? { - '@fullhuman/postcss-purgecss': { - content: ['./src/browser/**/*.tsx'], - - // Include any special characters you're using in this regular expression - defaultExtractor: content => - content.match(/[\w-/.:]+(?>>0)+"_",B=0;return b}); -va("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),h=0;hh&&(h=Math.max(h+B,0));hB||56319b||57343B||1114111=B?h+=String.fromCharCode(B):(B-=65536,h+=String.fromCharCode(B>>>10&1023|55296),h+=String.fromCharCode(B&1023|56320))}return h}}); -va("String.prototype.repeat",function(a){return a?a:function(b){var h=Za(this,null,"repeat");if(0>b||1342177279>>=1)h+=h;return v}});function $a(a,b){a=void 0!==a?String(a):" ";return 0=n}});va("Number.isFinite",function(a){return a?a:function(b){return"number"!==typeof b?!1:!isNaN(b)&&Infinity!==b&&-Infinity!==b}});va("Number.isInteger",function(a){return a?a:function(b){return Number.isFinite(b)?b===Math.floor(b):!1}}); -va("Math.trunc",function(a){return a?a:function(b){b=Number(b);if(isNaN(b)||Infinity===b||-Infinity===b||0===b)return b;var h=Math.floor(Math.abs(b));return 0>b?-h:h}});va("Number.MAX_SAFE_INTEGER",function(){return 9007199254740991});function ab(a,b){a instanceof String&&(a+="");var h=0,v=!1,B={next:function(){if(!v&&h",2:"attribute @"+e.name,3:"text:"+(e.nodeValue?e.nodeValue.substring(0,8):"''"),7:"pi: "+ -e.target+"("+e.tagName+")",8:"comment ("+e.nodeValue+")",9:"document "+(e._saxonDocumentNumber?"#"+e._saxonDocumentNumber:"(No nr / #0)"),11:"docFrag"}[e.nodeType];if("9"===e.nodeType||"11"===e.nodeType){var p;for(p=0;p"+b(e.childNodes[p])}return k}if(e.code)return"AS"===e.code?'xdm:"'+e.toString()+'"':"ADI"===e.code?"xdm:"+e.toBig().toFixed():"AB"===e.code?"xdm:"+e.toString():"atomic:"+e.code+"('"+e.toString()+"')";if("object"===typeof e&&"length"in e){if(1===e.length)return b(e[0]); -k="(";for(p=0;pp;p++)0!==p&&(k+=","),k+=b(e[p]);4<=e.length&&(k+=",...("+e.length+")");return k+")"}return"function"===typeof e?e.toString():"("+typeof e+") "+e}function h(e){return"{'N':'"+e.N+"','C':["+(e.C||[]).map(function(k){return h(k)}).join(",")+"]}"}function v(e,k){for(;e;){if(e[k])return e[k];e=e.parentNode}return null}function B(e,k){(void 0===k?1:k)<=g&&gb.getPlatform().saxonPrint(e)}var n,g=1;Error.stackTraceLimit=100;return{assert:function(e,k){e||a(void 0===k?"assertion failed": -k)},na:a,location:function(e){return v(e,"module")+"#"+v(e,"line")},Rj:function(e){n=e},Sa:B,showValue:b,di:function(e){return e.showValue?e.showValue():n&&n.V(e)?b(e):e.code?"AS"===e.code?'xdm:"'+e.toString()+'"':"ADI"===e.code?"xdm:"+e.toBig().toFixed():"AB"===e.code?"xdm:"+e.toString():"atomic:"+e.code+"('"+e.toString()+"')":e.ej?e.toString():"("+typeof e+") "+e},$j:function(e){if(!e)return"null expr";var k=e.N||"?",p;for(p in e)e.hasOwnProperty(p)&&!["C","N","parentNode","ELAB","PUSH"].includes(p)&& -(k+=" "+p+"="+e[p]);e.C&&(k+=" ("+e.C.map(function(u){return u.N}).join(",")+")");return k+=" at "+this.location(e)},Kl:h,setLogLevel:function(e){"number"==typeof e&&(g=e)},yf:g}}(); -// Input 5 -var kb=function(){function a(){function g(e){if(!(this instanceof g))return void 0===e?a():new g(e);if(e instanceof g)this.oa=e.oa,this.e=e.e,this.c=e.c.slice();else{var k,p,u;0===e&&0>1/e?e="-0":n.test(e=""+e)||v(NaN);this.oa="-"==e.charAt(0)?(e=e.slice(1),-1):1;-1<(k=e.indexOf("."))&&(e=e.replace(".",""));0<(p=e.search(/e/i))?(0>k&&(k=p),k+=+e.slice(p+1),e=e.substring(0,p)):0>k&&(k=e.length);for(p=0;"0"==e.charAt(p);p++);if(p==(u=e.length))this.c=[this.e=0];else{for(;"0"==e.charAt(--u););this.e= -k-p-1;this.c=[];for(k=0;p<=u;this.c[k++]=+e.charAt(p++));}}this.constructor=g}g.prototype=B;g.he=20;g.Ve=1;g.ie=-7;g.Se=21;return g}function b(g,e,k){var p=g.constructor,u=e-(g=new p(g)).e,E=g.c;E.length>++e&&h(g,u,p.Ve);E[0]?k?u=e:(E=g.c,u=g.e+u+1):++u;for(;E.lengthg.oa&&E[0]?"-":"")+(1u?"e":"e+")+u:g.toString()}function h(g,e,k,p){p=void 0===p?!1:p;var u=g.c,E=g.e+e+1;1===k?p=5<=u[E]:2===k?p= -5E||void 0!==u[E+1]||u[E-1]&1):3===k?p=p||void 0!==u[E]||0>E:(p=!1,0!==k&&v("!Big.RM!"));if(1>E||!u[0])p?(g.e=-e,g.c=[1]):g.c=[g.e=0];else{u.length=E--;if(p)for(;9<++u[E];)u[E]=0,E--||(++g.e,u.unshift(1));for(E=u.length;!u[--E];u.pop());}return g}function v(g){g=Error(g);g.name="BigError";throw g;}var B={},n=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;B.abs=function(){var g=new this.constructor(this);g.oa=1;return g};B.cmp=function(g){var e=this.c,k=(g=new this.constructor(g)).c, -p=this.oa,u=g.oa,E=this.e,r=g.e;if(!e[0]||!k[0])return e[0]?p:k[0]?-u:0;if(p!=u)return p;g=0>p;if(E!=r)return E>r^g?1:-1;p=-1;for(u=(E=e.length)<(r=k.length)?E:r;++pk[p]^g?1:-1;return E==r?0:E>r^g?1:-1};B.Yb=function(g,e,k){var p=this.constructor,u=this.c,E=(g=new p(g)).c,r=this.oa===g.oa?1:-1;e="undefined"!==typeof e?e:p.he;k="undefined"!==typeof k?k:p.Ve;(e!==~~e||0>e||1E6X?0:X;for(H.unshift(0);t++f;f++){if(p!=(t=l.length))var ja=p>t?1:-1;else{var ra=-1;for(ja=0;++ral[ra]?1:-1;break}}if(0>ja){for(g=t==p?E:H;t;){if(l[--t]X&&h(q,e,k,void 0!==l[0]);return q};B.Oi=function(){var g=kb(0);return!this.cmp(g)};B.j=function(g){return 0this.cmp(g)};B.G=function(g){return 1>this.cmp(g)};B.sub=B.Ce=function(g){var e=this.constructor;var k=this.oa,p=(g=new e(g)).oa;if(k!=p)return g.oa=-p,this.He(g);var u=this.c.slice();var E=this.e;var r=g.c,f=g.e;if(!u[0]||!r[0])return r[0]?(g.oa=-p,g):new e(u[0]?this:0);if(k= -E-f){(e=0>k)?(k=-k,E=u):(f=E,E=r);E.reverse();for(p=k;p--;E.push(0));E.reverse()}else for(E=((e=u.lengthk;){if(u[--E]u.length-r.length&&(e=r,r=u,u=e);k=r.length;for(p=0;k;)p=(u[--k]=u[k]+r[k]+p)/10|0,u[k]%=10;p&& -(u.unshift(p),++E);for(k=u.length;0===u[--k];u.pop());g.c=u;g.e=E;return g};B.pow=function(g){var e=this,k=new e.constructor(1),p=k,u=0>g;(g!==~~g||-1E6>g||1E6>=1;if(!g)break;e=e.Jc(e)}return u?k.Yb(p):p};B.round=function(g,e){var k=this,p=k.constructor;null==g?g=0:(g!==~~g||0>g||1E6k&&v(NaN);k=Math.sqrt(this.toString());0===k||k===1/0?(k=e.join(""),k.length+p&1||(k+="0"),e=new g(Math.sqrt(k).toString()),e.e=((p+1)/2|0)-(0>p||p&1)):e=new g(k.toString());k=e.e+(g.he+=4);do p=e,e=u.Jc(p.He(this.Yb(p)));while(p.c.slice(0,k).join("")!==e.c.slice(0,k).join(""));h(e,g.he-=4,g.Ve);return e};B.K=B.Jc=function(g){var e=this.constructor;var k=this.c,p=(g=new e(g)).c,u=k.length,E=p.length,r=this.e,f=g.e;g.oa=this.oa==g.oa?1:-1;if(!k[0]||!p[0])return new e(0*g.oa);g.e=r+f;ur;)E=e[f]+p[r]*k[f-r-1]+E,e[f--]=E%10,E=E/10|0;e[f]=(e[f]+E)%10}E&&++g.e;e[0]||e.shift();for(r=e.length;!e[--r];e.pop());g.c=e;return g};B.toString=B.valueOf=B.toJSON=function(){var g=this.constructor,e=this.e,k=this.c.join(""),p=k.length;if(e<=g.ie||e>=g.Se)k=k.charAt(0)+(1e?"e":"e+")+e;else if(0>e){for(;++e;k="0"+k);k="0."+k}else if(0p)for(e-=p;e--;k+="0");else ethis.oa&&this.c[0]?"-"+k:k};B.g=function(g){null==g?g=this.c.length-1:(g!==~~g||0>g||1E6=g&&(u=b(this,this.e+g),0>this.oa&&this.c[0]&&0>u.indexOf("-")&&(u="-"+u));e.ie=k;e.Se=p;u||v("!toFix!");return u};B.toPrecision=function(g){if(null==g)return this.toString();(g!== -~~g||1>g||1E6a&&![9,10,13].includes(a)||55295a||65533a||1114111a?-1:0===a?0:1}return aL.length;)L="0"+L;return"\\u"+(v&&4=Y&&L.push([Y,da])}R=R[R.length-1][1];(v||65535>R)&&L.push([R+1,v?1114111:65535])}R="";for(w=0;wL[w][1])R+=U(L[w][0]),L[w][1]>L[w][0]&& -(R+="-"+U(L[w][1]));L=R;Q||(L="["+L+"]");return L}function V(L){return L.sort(function(Q,R){return Q[0]-R[0]})}function Z(L,Q,R,w){var Y=[];Array.isArray(L)||r("Ranges must be array");L.forEach(function(da){Y.push([parseInt(da[0],16),parseInt(da[1],16)])});R&&w&&V(Y);return M(Y,Q,R)}var ea=A.charAt(D+1);0>"nrt\\|.-^?*+{}()[]pPsSiIcCdDwW$".indexOf(ea)&&(0!==C||!/[0-9]/.test(ea))&&r("\\"+ea+" is not allowed in XPath regular expressions");switch(ea){case "p":case "P":var ma=A.indexOf("}",D);A=A.substring(D+ -3,ma);E("x")&&(A=A.replace(/[ \n\r\t]+/g,""));var na=a();(D=na[A])||r("Unknown category "+A);if(1===A.length){var ha=[];D.split("|").forEach(function(L){ha=ha.concat(na[L])})}else ha=D;H+=Z(ha,0=q&&/[0-9]/.test(A.charAt(D+2))&&(H+="(?:)"),D++):(H+="\\"+ea,D++)}return{Df:H,i:D}}function E(A){return 0<=e.indexOf(A)}function r(A){throw new I("Invalid XPath regular expression: "+A,"FORX0002");}k=void 0===k?null:k;p=void 0===p?null:p;var f=0;e=e?e.toString():"";if(!v&&k&&pb(k))throw new I("Cannot handle non-BMP characters with regular expressions in this browser", -"SXJS0002");k=(E("i")?"i":"")+(E("m")?"m":"")+(E("g")?"g":"")+(v?"u":"");if(E("j"))return new RegExp(g,e.replace("j",""));if(E("q"))return new RegExp(g.replace(/[\[\]\/\{\}\(\)\*\+\?\.\\^$|]/g,"\\$&"),k);for(var H="",d=[[58,58],[65,90],[95,95],[97,122],[192,214],[216,246],[248,767],[880,893],[895,8191],[8204,8205],[8304,8591],[11264,12271],[12289,55295],[63744,64975],[65008,65533],[65536,983039]],c=[[45,46],[48,58],[65,90],[95,95],[97,122],[183,183],[192,214],[216,246],[248,893],[895,8191],[8204, -8205],[8255,8256],[8304,8591],[11264,12271],[12289,55295],[63744,64975],[65008,65533],[65536,983039]],l=[],t=[],q=1,C=0,K=!1,X=!1,ja=0;jaX||!/^[0-9]+(,[0-9]*)?$/.test(g.substring(ja+1,X)))&&r("Invalid quantifier {"+g.substring(ja+1,X+1)),X=!1);H+=ra;break;case " ":case "\n":case "\r":case "\t":if(!E("x")||0=this.value.length)return this.value;var a=this.g,b=this.value.length;if(0===a&&0>18&63;n=e>>12&63;g=e>>6&63;e&=63;v[h++]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(B)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(n)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(g)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(e)}while(b< -a.length);b=v.join("");a=a.length%3;a=(a?b.slice(0,a-3):b)+"===".slice(a||3)}}return a};ba.compareTo=function(a){return a instanceof Db&&this.code===a.code?ob(Eb(this.value),Eb(a.value)):Bb(this.code,a.code)};ba.equals=function(a){if(a instanceof Db&&this.code===a.code){var b=a.value;return this.value.length===b.length&&this.value.every(function(h,v){return h===b[v]})}return Bb(this.code,a.code)};ba.hashCode=function(){return(new zb(Eb(this.value.slice(0,8)))).hashCode()}; -ba.matchKey=function(){return("AX"===this.code?"h":"i")+this.toString()};function yb(a,b){xb.call(this,void 0===b?"AO":b);this.value=a;"number"!==typeof a&&jb.na("type of value supplied to XdmDouble is not number: "+typeof a)}Ka(yb,xb);ba=yb.prototype;ba.kc=function(){return/^A[OF]$/}; -ba.toString=function(){if(0===this.value)return 0>1/this.value?"-0":"0";if(this.value===Number.POSITIVE_INFINITY)return"INF";if(this.value===Number.NEGATIVE_INFINITY)return"-INF";var a=this.value,b=Math.abs(a);if(1E6<=b||1E-6>b){b=a.toExponential();var h=b.indexOf("e");a=b.substring(0,h);b=b.substring(h+1);"AF"===this.code&&(a=parseFloat(a),a=(0>a?a-5E-8:a+5E-8).toString(),a=a.substring(0,a.indexOf(".")+8),a=a.replace(/\.?0+$/,""));a.includes(".")||(a+=".0");return a+"E"+b.replace("+","")}return"AF"=== -this.code&&0!==a%1?(b=(0>a?a-5E-8:a+5E-8).toString(),b=b.substring(0,b.indexOf(".")+6),b.replace(/0+$/,"")):a.toString()};ba.equals=function(a){return 0===this.compareTo(a)};ba.compareTo=function(a){return a.isNumeric()?(a=a.toNumber(),"AF"===this.code&&Math.fround&&(a=Math.fround(a)),this.valuethis.value?"-INF":"INF"};ba.matchKey=function(){return"n"+this.hashCode()};ba.toNumber=function(){return this.value};ba.toDouble=function(){return this};ba.abs=function(){return new yb(Math.abs(this.value),this.code)}; -ba.Bf=function(){return new yb(-this.value,this.code)};ba.gg=function(){return new yb(Math.ceil(this.value),this.code)};ba.floor=function(){return new yb(Math.floor(this.value),this.code)};ba.round=function(a){0===a?a=Math.round(this.value):(a=Math.pow(10,-a),a*=Math.round(this.value/a));return new yb(a,this.code)};ba.Hf=function(a){return isFinite(this.value)?(a=(new Gb(kb(this.value))).Hf(a),0===a.toNumber()&&0>this.value&&(a=wb.XS.double.fromString("-0")),wb.codes[this.code].R(a)):this}; -function Fb(a,b){xb.call(this,void 0===b?"ADI":b);"number"!==typeof a&&jb.na("type of value supplied to XdmInteger is not number: "+typeof a);this.value=a}Ka(Fb,xb);ba=Fb.prototype;ba.kc=function(){return/^ADI/};ba.toString=function(){return this.value.toString()};ba.equals=function(a){return 0===this.compareTo(a)};ba.compareTo=function(a){return a.isNumeric()?this.value-a.toNumber():Bb(this.code,a.code)};ba.hashCode=function(){return Cb(this.value)}; -ba.Hg=function(a){return a instanceof yb||a instanceof Fb?this.value===a.value:a instanceof Gb?wb.XS.vb.R(this).equals(a):!1};ba.matchKey=function(){return"n"+this.hashCode()};ba.toDouble=function(){return new yb(this.value)};ba.toNumber=function(){return this.value};ba.toBig=function(){return new kb(this.value)};ba.abs=function(){return new Fb(Math.abs(this.value))};ba.Bf=function(){return new Fb(-this.value)};ba.gg=function(){return this};ba.floor=function(){return this}; -ba.round=function(a){return 0>a?(a=Math.pow(10,-a),new Fb(Math.round(this.value/a)*a)):this};ba.Hf=function(a){return 0>a?(a=Math.pow(10,-a),new Fb(parseInt(kb(this.value).Yb(a,100,2).round(0,2).Jc(a),10))):this};function Gb(a,b){xb.call(this,void 0===b?"AD":b);this.value=new kb(a)}Ka(Gb,xb);ba=Gb.prototype;ba.kc=function(){return/^AD/};ba.toString=function(){return this.value.toFixed()};ba.equals=function(a){return 0===this.compareTo(a)}; -ba.compareTo=function(a){return a instanceof Gb?this.value.cmp(a.value):/^AD/.test(a.code)?this.value.cmp(a.toBig()):a.isNumeric()?this.value.cmp(new kb(a.toDouble())):Bb(this.code,a.code)};ba.hashCode=function(){var a=this.value;return a.Af(kb(1)).Oi()&&a.abs().Bj()?this.toNumber().toString(36):this.toString().substring(0,8)};ba.Hg=function(a){return a instanceof yb||a instanceof Fb?0===this.compareTo(wb.XS.vb.R(a)):a instanceof Gb?0===this.compareTo(a):!1};ba.matchKey=function(){return"n"+this.hashCode()}; -ba.toBig=function(){return this.value};ba.toDouble=function(){return new yb(parseFloat(this.value.toFixed()))};ba.toNumber=function(){return parseFloat(this.value.toFixed())};ba.abs=function(){return new Gb(this.value.abs(),this.code)};ba.Bf=function(){var a=kb(this.value);a.oa=-a.oa;return new Gb(a,"AD"===this.code?"AD":"ADI")};ba.gg=function(){return new Gb(this.value.round(0,0>this.value.oa?0:3),this.code)};ba.floor=function(){return new Gb(this.value.round(0,0>this.value.oa?3:0),this.code)}; -ba.round=function(a){function b(n,g){n=new kb(n);n.e+=g;return n}var h=this.value,v=0;0>a&&(v=a,a=0,h=b(h,v));var B=0a?(a=kb(10).pow(-a),a=this.value.Yb(a,100,2).round(0,2).Jc(a)):a=this.value.round(a,2);return new Gb(a,"AD"===this.code?"AD":"ADI")}; -function Hb(a){tb.call(this,"AB");"boolean"!==typeof a&&jb.na("type of value supplied to XdmBoolean is not boolean: "+typeof a);this.value=a}Ka(Hb,tb);ba=Hb.prototype;ba.kc=function(){return/^AB$/};ba.toString=function(){return this.value.toString()};ba.toBoolean=function(){return this.value};ba.compareTo=function(a){return a instanceof Hb?(this.value?1:0)-(a.value?1:0):Bb(this.code,a.code)};ba.equals=function(a){return 0===this.compareTo(a)};ba.hashCode=function(){return this.value.toString()}; -ba.matchKey=function(){return"b"+this.toString()};function Ib(a,b,h){tb.call(this,"AQ");this.prefix=a=a?a:"";this.uri=b?b:"";this.local=h;if(""!==a&&!sb.Nb(a))throw new I("Invalid prefix: '"+a+"'","FORG0001");if(!sb.Nb(h))throw new I("Invalid local name: '"+h+"' (prefix='"+a+"', uri='"+b+"')","FORG0001");}Ka(Ib,tb);ba=Ib.prototype;ba.kc=function(){return/^AQ$/};ba.aa=function(){return"Q{"+this.uri+"}"+this.local};ba.toString=function(){return(0n;b=(v+b-1)%12+1;for(0>=b&&(b+=12);!wb.zj([n,b,B,0,0,0]);)--B;return wb.codes[a.code].fromString((g?"-"+(1E4+-n).toString().substring(1):(1E4+n).toString().substring(1))+"-"+(100+b).toString().substring(1)+"-"+(100+B).toString().substring(1)+h.substring(10))} -function Nb(a){if(a=a.Ha){var b=Math.abs(a);return(0>a?"-":"+")+(100+Math.floor(b/60)).toString().substring(1)+":"+(100+b%60).toString().substring(1)}return 0===a?"Z":""}function Tb(a,b,h){tb.call(this,void 0===h?"AR":h);this.Wa=a;this.Ra=b;"number"===typeof a&&"number"===typeof b||jb.na("type of value supplied to XdmDuration is not number: "+typeof a+", "+typeof b);if(0b||0>a&&0a?-1:0a?"-P":"P",Ub(this).forEach(function(h,v){3===v&&(b+="T");0!==h&&(6===v?b+=h/1E3+"S":b+=h+"YMDHMS".split("")[v])}),b=b.replace(/T$/,"");return b}; -ba.compareTo=function(a){if(a instanceof Tb){if(wb.XS.yearMonthDuration.matches(this)&&wb.XS.yearMonthDuration.matches(a))return this.Wa-a.Wa;if(wb.XS.dayTimeDuration.matches(this)&&wb.XS.dayTimeDuration.matches(a))return this.Ra-a.Ra;throw new I("Cannot compare durations that mix months and seconds","XPTY0004");}return Bb(this.code,a.code)};ba.equals=function(a){a instanceof Tb||Bb(this.code,a.code);return a instanceof Tb&&this.Wa===a.Wa&&this.Ra===a.Ra}; -ba.hashCode=function(){return this.Wa.toString()+":"+this.Ra.toString()};ba.matchKey=function(){return"d"+this.hashCode()};function Cb(a){return Number.isInteger(a)&&Math.abs(a)=G&&x<=N}}for(var Fa in na){var m=na[Fa];ha[m.code]=m}u("gYear","AG");u("gYearMonth","AH");u("gMonth","AI");u("gMonthDay","AJ");u("gDay","AK");da("nonPositiveInteger","ADIN",function(G){return 0>=G.toNumber()});da("negativeInteger", -"ADINN",function(G){return 0>G.toNumber()});da("long","ADIL",function(G){G=G.toBig();return 0<=G.cmp(kb("-9223372036854775808"))&&0>=G.cmp(kb("9223372036854775807"))});da("int","ADILI",qa(-2147483648,2147483647));da("short","ADILIS",qa(-32768,32767));da("byte","ADILISB",qa(-128,127));da("nonNegativeInteger","ADIP",function(G){return 0<=G.toNumber()});da("positiveInteger","ADIPP",function(G){return 0=G.toBig().cmp(kb("18446744073709551615"))}); -da("unsignedInt","ADIPLI",function(G){return 0<=G.toNumber()&&0>=G.toBig().cmp(kb("4294967295"))});da("unsignedShort","ADIPLIS",qa(0,65535));da("unsignedByte","ADIPLISB",qa(0,255));oa("normalizedString","ASN",w,function(G){return G.replace(/[ \r\t\n]/g," ")});oa("token","ASNT",w,mb);oa("language","ASNTL",function(G){return/^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/.test(G)},mb);oa("NMTOKEN","ASNTK",sb.vj,mb);oa("Name","ASNTN",sb.wj,mb);oa("NCName","ASNTNC",sb.Nb,mb);oa("ID","ASNTNCI",sb.Nb,mb);oa("IDREF", -"ASNTNCR",sb.Nb,mb);oa("ENTITY","ASNTNCE",sb.Nb,mb);P("yearMonthDuration","ARY",function(G){return 0===G.Ra});P("dayTimeDuration","ARD",function(G){return 0===G.Wa});na.dayTimeDuration.yh=function(G){return new Tb(0,6E4*G,"ARD")};R.language=na.language;R.Rg=na.NCName;R.dayTimeDuration=na.dayTimeDuration;R.yearMonthDuration=na.yearMonthDuration;R.Eh=na.gYearMonth;R.Dh=na.gYear;R.Ch=na.gMonthDay;R.Bh=na.gMonth;R.Ah=na.gDay;a=function(){}}function b(w,Y){return Y?-w:w}function h(w,Y){return Y*(void 0=== -w?0:Math.round(1E3*parseFloat(w)))}function v(w,Y){return Y*(void 0===w?0:parseInt(w,10))}function B(w){return w.ob&&!["ADI","ARY","ARD"].includes(w.code)?B(w.ob):w}function n(w,Y){throw new I("Casting from "+l(w.code)+" to "+l(Y)+" is not allowed","XPTY0004");}function g(w,Y,da,oa){da=void 0===da?null:da;oa=void 0===oa?"FORG0001":oa;throw new I('Supplied value "'+w+'" is not a valid '+l(Y)+(da?" ("+da+")":""),oa);}function e(w,Y){w=sb.trim(w);/.\.$/.test(w)&&(w+="0");if(/^[-+]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([Ee][-+]?[0-9]+)?$/.test(w))return parseFloat(w); -if(/^NaN$/.test(w))return NaN;if(/^-INF$/.test(w))return-Infinity;if(/^(\+)?INF$/.test(w))return Infinity;Y&&g(w,"AO");return NaN}function k(w){w=w.replace(/\s/g,"");/^(....)*$/.test(w)||g(w,"A2","length must be a multiple of 4");/^[A-Za-z0-9+/]*=?=?$/.test(w)||g(w,"A2","only [A-Za-z0-9+/] allowed, or '=' at the end");/^([^=]*|.*[AQgw]==|.*[AEIMQUYcgkosw048]=)$/.test(w)||g(w,"A2","invalid characters before '='");var Y=0,da=[];if(0===w.length)return new Uint8Array(0);do{var oa="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(w.charAt(Y++)); -var P="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(w.charAt(Y++));var qa="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(w.charAt(Y++));var Fa="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(w.charAt(Y++));var m=oa<<18|P<<12|qa<<6|Fa;oa=m>>16&255;P=m>>8&255;m&=255;64===qa?da.push(oa):64===Fa?da.push(oa,P):da.push(oa,P,m)}while(YY.length;)Y+="0";w=w[0]+"."+Y}return w}function r(w){var Y=w[0],da=w[1],oa=w[2],P=w[3],qa=w[4];w=w[5];return!(1>da||12oa||oa>[31,0!==Y%4||0===Y%100&&0!==Y%400?28:29,31,30,31,30,31,31,30,31,30,31][da-1]||24<=P||60<=qa||60<=w)}function f(w,Y){w=w.split(/[\-T:]/).map(function(oa){return parseFloat(oa)});var da=w[0];if(1>da||9999w[0]&&qa.setUTCFullYear(P[0]);qa=""===oa?new Date(qa.getTime()+6E4*(new Date).getTimezoneOffset()):new Date(qa.getTime()-6E4*d(oa));return new Jb(qa,d(da[2]?da[2]:""),Y)}function d(w){if(""===w)return null;if("Z"===w)return 0;var Y=w.split(":"),da=/^-.*/.test(Y[0]),oa=Math.abs(parseInt(Y[0],10));Y=parseInt(Y[1],10);if(14 -Number.MAX_SAFE_INTEGER?new Gb(new kb(w),"ADI"):new Fb(w)},qb:function(w){return new Gb(w,"ADI")},valid:function(w){return 0===w.value.Af(1)},R:function(w){switch(w.code.substring(0,2)){case "AS":case "AZ":return R.integer.fromString(w.toString());case "AF":case "AO":return R.integer.fromNumber(w.toNumber());case "AD":return R.integer.qb(w.toBig().round(0,0));case "AB":return R.integer.fromNumber(w.toBoolean()?1:0);default:n(w,"AB")}},dl:function(w){return"number"===typeof w?R.integer.fromNumber(w): -"boolean"===typeof w?R.integer.fromNumber(w?1:0):"string"===typeof w?R.integer.fromString(w):R.integer.fromString(w.toString())}},ca={name:"numeric",code:"Anumeric",wl:["double","decimal","float"],matches:function(w){return w instanceof yb||w instanceof Fb||w instanceof Gb},R:function(w){if(R.string.matches(w)||R.untypedAtomic.matches(w))return R.double.fromString(w.toString());if(R.numeric.matches(w))return w;if(R.boolean.matches(w))return R.double.fromNumber(w.toBoolean()?1:0);n(w,"Anumeric")}, -De:function(w){var Y=R.double;if(null===w)return Y.fromNumber(Number.NaN);if(R.boolean.matches(w))return Y.fromNumber(w.toBoolean()?1:0);if(R.numeric.matches(w))return Y.R(w);if(R.string.matches(w)||R.untypedAtomic.matches(w))try{return Y.fromString(w.toString())}catch(da){return Y.fromNumber(Number.NaN)}else return Y.fromNumber(Number.NaN)}},z={name:"QName",code:"AQ",matches:function(w){return w instanceof Ib},fromParts:function(w,Y,da){return new Ib(w,Y,da)},fromString:function(w,Y){w=sb.trim(w); -if("Q{"===w.substring(0,2))return R.QName.fromEQName(w);sb.Lh(w)||g(w,"AQ");w=w.split(":");if(1===w.length)return R.QName.fromParts("",Y(""),w[0]);Y=Y(w[0]);if(null===Y)throw new I("Undeclared prefix: "+w[0],"FONS0004");return R.QName.fromParts(w[0],Y,w[1])},fromEQName:function(w){var Y=w.indexOf("{"),da=w.indexOf("}");if(!(-1===Y&&-1===da||-1=a.length?-1:a.charAt(v++);f!==r&&n("Expected '"+r+"', found '"+f+"'")}function e(){for(var r=0,f=v;va?this.current=this.g.next():0h)this.g.next(),a=this.g.xa();else if(0b)return this.current=this.g.next();0this.j)if(this.g instanceof sc)this.j=this.g.expand().length;else{for(var a=[],b;null!==(b=this.g.next());)a.push(b);this.j=this.position+a.length;this.g=sc(a)}return this.j}; -rc.prototype.showValue=function(){return"Tracker of "+this.g.showValue()};function tc(a){this.current=a;this.position=1}Ka(tc,cc);tc.prototype.next=function(){return null};tc.prototype.last=function(){return 1};function uc(a){this.g=a}Ka(uc,cc);uc.prototype.next=function(){var a=this.g.next();return a.done?null:a.value};function vc(a,b,h){this.g=a;this.j=h;for(this.B=1;!(this.B++>=b);)if(null==this.g.next()){this.j=Number.NEGATIVE_INFINITY;break}}Ka(vc,cc); -vc.prototype.next=function(){return this.B++<=this.j?this.g.next():null};var wc=new ic;function xc(a){return new hc(a)}function yc(a){return new lc(a)}function zc(a){return new tc(a)}function Ac(a){return new rc(a)}function sc(a){return new jc(a)}function Bc(a){return new hc(bc.string.fromString(a))}function Cc(a){return new hc(bc.integer.fromNumber(a))}function Dc(a){return new hc(bc.double.fromNumber(a))}function Ec(a){return new hc(bc.vb.qb(a))} -function Fc(a){return new hc(bc.boolean.fromBoolean(a))}var Gc={};Gc.jk=cc;Gc.qk=pc;Gc.rk=wc;Gc.sk=ic;Gc.uk=dc;Gc.vk=sc;Gc.wk=jc;Gc.xk=uc;Gc.Ak=oc;Gc.Bk=yc;Gc.Ck=lc;Gc.Dk=qc;Gc.Hk=gc;Gc.Ik=fc;Gc.Lk=xc;Gc.Mk=hc;Gc.Nk=zc;Gc.Ok=tc;Gc.Pk=kc;Gc.Qk=vc;Gc.Uk=Ac;Gc.Vk=rc;Gc.Yk=mc;Gc.Bl=Fc;Gc.Cl=Ec;Gc.Dl=Dc;Gc.El=function(a){return new hc(bc.float.fromNumber(a))};Gc.Fl=Cc;Gc.Gl=Bc; -// Input 13 -// Input 14 -var Ic={gd:"http://www.w3.org/1999/XSL/Transform",Pa:"http://www.w3.org/2005/xpath-functions",Ph:"http://www.w3.org/2005/xpath-functions/math",map:"http://www.w3.org/2005/xpath-functions/map",af:"http://www.w3.org/2005/xpath-functions/array",xml:"http://www.w3.org/XML/1998/namespace",sc:"http://www.w3.org/2001/XMLSchema",Rl:"http://www.w3.org/2001/XMLSchema-instance",Ri:"http://www.w3.org/2005/xqt-errors",Vd:"http://saxonica.com/ns/interactiveXSLT",Oh:"http://saxonica.com/ns/globalJS",zb:"http://saxon.sf.net/", -Ui:"http://ns.saxonica.com/xslt/export",Kc:{xsl:"http://www.w3.org/1999/XSL/Transform",fn:"http://www.w3.org/2005/xpath-functions",math:"http://www.w3.org/2005/xpath-functions/math",map:"http://www.w3.org/2005/xpath-functions/map",array:"http://www.w3.org/2005/xpath-functions/array",xml:"http://www.w3.org/XML/1998/namespace",xs:"http://www.w3.org/2001/XMLSchema",xsi:"http://www.w3.org/2001/XMLSchema-instance",err:"http://www.w3.org/2005/xqt-errors",ixsl:"http://saxonica.com/ns/interactiveXSLT",js:"http://saxonica.com/ns/globalJS", -saxon:"http://saxon.sf.net/",ex:"http://ns.saxonica.com/xslt/export"},Pg:"http://ns.saxonica.com/anonymous-type"}; -// Input 15 -var Kc=function(){function a(n){return n?9===n.nodeType?n:a(n.ownerDocument):null}var b=wb.XS,h=1,v={ld:function(n){switch(n.nodeType){case 9:case 11:return wc;case 2:return n.parent?new kc(n.parent,function(g){return g.parentNode}):wc;default:return(n=n.parentNode)?new kc(n,function(g){return g.parentNode}):wc}},$a:function(n){return yc([xc(n),v.ld(n)])},Ja:function(n){if(1===n.nodeType){for(var g=n.attributes,e=n.ownerDocument.documentElement&&gb.bc(n.ownerDocument.documentElement),k=[],p=0;pu?Kc.tb(e,g):Kc.tb(n,k)}},Za:function(n){return Kc.ye(n)?n.parent:n.parentNode},kf:function(n,g,e){n.setAttributeNS("http://www.w3.org/2000/xmlns/",""===g?"xmlns":"xmlns:"+g,e)},Wc:function(n,g){g=void 0===g?v.$a:g;var e=[{prefix:"xml",uri:Ic.xml}],k={xml:!0};for(n=g(n);null!==(g=n.next());)if(1===g.nodeType){var p=Kc.ea(g);""===p.prefix&&""=== -p.uri&&(k[""]=!0);g=g.attributes;for(p=0;pa||a>this.value.length)throw new I("Array index ("+a+") out of bounds (1 to "+this.value.length+")","FOAY0001");return this.value[a-1]};ba.evaluate=function(a){return sc(this.value[a[0][0]-1])};ba.size=function(){return this.value.length}; -ba.showValue=function(){for(var a="[",b=0;bb;b++)0!==b&&(a+=","),a+=jb.showValue(this.value[b]);4<=this.value.length&&(a+=",...("+this.value.length+")");return a+"]"};ba.flatten=function(a){for(var b=0;b"+k.ja(),u=g[p];if(u)return u;e=B(e,k);return g[p]=e}function b(e,k){jb.assert(e instanceof bd);jb.assert(k instanceof bd);switch(a(e,k)){case 0:case 1:return e;case 2:return k;case 3:case 4:return e=e.$(),k=k.$(),$c({p:ac(e.p,k.p),u:[e,k]})}}function h(e,k){jb.assert(e instanceof bd);jb.assert(k instanceof bd);switch(a(e,k)){case 0:case 1:return k;case 2:return e;case 3:return e=e.$(),k=k.$(), -$c({p:e.p.startsWith(k.p)?e.p:k.p.startsWith(e.p)?k.p:e.p.charAt(0)===k.p.charAt(0)?e.p.charAt(0):"",i:[e,k]});case 4:return sd}}function v(e,k){return 0===e&&0===k?0:0!==e&&1!==e||0!==k&&1!==k?0!==e&&2!==e||0!==k&&2!==k?4===e||4===k?4:3:2:1}function B(e,k){function p(c,l){return(c||"")===(l||"")?0:c&&!l?2:l&&!c?1:4}function u(c){return 1===c?2:2===c?1:c}function E(c){return c.n||c.e||c.u||c.i||c.d}var r=e.$(),f=k.$(),H=e.ja(),d=k.ja();if("F"===r.p){if(!(e instanceof be&&k instanceof be))return 3; -jb.assert(e.Pb);return e.Pb(k)}if(H===d)return 0;if(e instanceof Vc)return 2;if(k instanceof Vc)return 1;if(Vd(e))return Vd(k)?0:/^A[ODF]/.test(f.p)?1:"A"===f.p||""===f.p?2:4;if(Vd(k))return u(B(k,e));if(r.p===f.p){if(Ud(e))return r.u&&f.u?3:r.e&&f.e?p(r.e,f.e):r.n&&f.n?p(r.n,f.n):E(r)&&E(f)?4:E(r)&&!E(f)?2:E(f)&&!E(r)?1:0;if(e.sa())return 0;if("FA"===r.p)return e=e.zc?e.zc():Nc.da,k=k.zc?k.zc():Nc.da,n(e,k);if("FM"===r.p)return r=a(e.sd(),k.sd()),k=n(e.sf(),k.sf()),v(r,k);if(!(e instanceof be&&k instanceof -be))return 3;jb.assert(e.Pb);return e.Pb(k)}return r.p.startsWith(f.p)?r.u?3:2:f.p.startsWith(r.p)?r.u?3:1:4}function n(e,k){jb.assert(e instanceof Oc);jb.assert(k instanceof Oc);var p=e.ha;var u=k.ha;p=p===u?ce.Bb:(p|u)===p?ce.Ub:(p|u)===u?ce.uc:0===(p|u)?ce.fc:ce.Vg;e=a(e.U,k.U);return v(p,e)}var g={};return{Bb:0,Ub:1,uc:2,Vg:3,fc:4,Pb:a,yj:function(e,k){jb.assert(e instanceof bd);jb.assert(k instanceof bd);e=a(e,k);return 0===e||2===e},pk:b,Xd:function(e){jb.assert(0b};case "+":return function(b){return 0b};case 6:return function(b){return 0A;case ">":case "gt":return 0=":case "ge":return 0<=A;case "<=":case "le":return 0>=A;case "!=":case "ne":return 0!==A;default:throw new I("Unknown operator "+z,"SXJS0003");}}function l(z,A){return z.map(function(D){var U=A.fixed.ma;D=U.fa(D,"dataType");U=null===D?null:U.evaluate(D,A).next();return"number"===U?function(M){return null===M?null:ca.double.nf(M.toString())}:"text"===U?function(M){return null=== -M?null:ca.string.R(M)}:function(M){return M}})}function t(z,A){return z.substring(0,A.length)===A}function q(z,A){return z.substring(z.length-A.length)===A}function C(z,A){return A&&(A=A.next())?A.toString():z.collation||Nd.xg(z,"defaultCollation")}function K(z,A){A=z?t(z,"http://www.w3.org/2013/collation/UCA")&&36F.Yd?1:y.Yd===F.Yd?0:-1});return sc(V.map(function(y){return y.item}))}},Mf:c,ji:function(z, -A){switch(z){case "=":case "eq":return A;case "!=":case "ne":return!A;case "<":case "lt":case ">":case "gt":case ">=":case "ge":case "<=":case "le":throw new I("Operator "+z+" not allowed for unordered types","SXJS0003");default:throw new I("Unknown operator "+z,"SXJS0003");}},Nf:function(z,A){function D(ea){return ub(ea)?M(ea.matchKey()):ea.matchKey()}var U=new Mc,M=z.collationKey;if(!M)throw new I("Collation is unsuitable for keys and grouping","XTDE1110");var V={cd:function(ea,ma){return pe(sc(ea), -sc(ma),z.equals)},hash:function(ea){return ea.map(D).join()}},Z={cd:function(ea,ma){return D(ea)===D(ma)},hash:function(ea){return D(ea)}};U.options=A?V:Z;return U},dk:"http://www.w3.org/2013/collation/UCA",ri:"http://www.w3.org/xslts/collation/caseblind"}}(); -// Input 26 -var te=function(){var a={};return{register:function(b,h){a[b]=h},find:function(b){return a[b]},xl:a}}(); -// Input 27 -var ue=function(){function a(b){var h=Kc.Ka,v={"p.any":function(){return function(){return!0}},"p.never":function(){return function(){return!1}},"p.booleanExp":function(B){var n=Nd.Va(B);return function(g,e){e=e.ca();e.focus=zc(g);return Nd.Od(n(e))}},"p.genNode":function(B){var n=Nd.Va(B);if("slash"===B.C[0].N){B=Nd.Ki(B.C[0]);for(var g=B.C[0];["filter","subscript"].includes(g.N);)g=g.C[0];if("axis"===g.N&&"child"===g.name){g.name="self";var e=Nd.lb(B)}}return function(k,p){if(!Kc.V(k))return!1; -for(var u=Kc.Ka.$a(k),E,r;;){E=u.next();if(null==E)return!Kc.vf(r)&&e?(p=p.ca(!1),p.focus=zc(r),p.Ob=[],e(p).some(function(f){return Kc.isSameNode(f,k)})):!1;r=p.ca(!1);r.focus=zc(E);r.Ob=[];if(n(r).some(function(f){return Kc.isSameNode(f,k)}))return!0;r=E}}},"p.genPos":function(B){var n=Xc(B.test).ka(),g=Nd.Va(B);return function(e,k){if(!n(e))return!1;var p=k.fixed.ma;k=k.ca(!1);var u=h.La(Kc.Za(e)).filter(n);k.focus=Ac(u);for(k.Ob=[];null!=(u=k.focus.next());)if(u===e&&p.Od(g(k)))return!0;return!1}}, -"p.nodeSet":function(B){var n=Nd.Va(B);return function(g,e){return n(e).some(function(k){return k===g})}},"p.nodeTest":function(B){return Xc(B.test).ka()},"p.simPos":function(B){var n=Xc(B.test).ka(),g=parseInt(B.pos,10);return function(e){return n(e)&&h.ad(e).filter(n).count()===g-1}},"p.venn":function(B){var n=B.C,g=a(n[0]),e=a(n[1]);B=B.op;switch(B){case "union":return function(k,p){return g(k,p)||e(k,p)};case "intersect":return function(k,p){return g(k,p)&&e(k,p)};case "except":return function(k, -p){return g(k,p)&&!e(k,p)};default:throw new I("unknown op "+B,"SXJS0003");}},"p.withCurrent":function(B){var n=a(B.C[0]);return function(g,e){e=e.ca(!0);e.ra[0]=[g];return n(g,e)}},"p.withPredicate":function(B){B=B.C;var n=a(B[0]),g=Nd.lb(B[1]);return function(e,k){if(!n(e,k))return!1;k=k.ca(!1);k.focus=zc(e);k.Ob=[];return Nd.Od(g(k))}},"p.withUpper":function(B){var n=B.C,g=a(n[0]),e=a(n[1]),k=B.axis;return"parent"===k?"true"===B.upFirst?function(p,u){var E=Kc.Za(p);return E&&e(E,u)&&g(p,u)}:function(p, -u){var E=Kc.Za(p);return E&&g(p,u)&&e(E,u)}:function(p,u){if(!g(p,u))return!1;p=Kc.eh[k](p);for(var E;null!==(E=p.next());)if(e(E,u))return!0;return!1}}}[b.N];if(v)return v(b);throw new I("Unimplemented pattern "+b.N,"SXJS0002");}return{yd:a,matches:function(b,h,v){v.xb.push(null);b=b(h,v);v.xb.pop();return b}}}(); -// Input 28 -var ve=function(){function a(v,B,n,g){function e(q){for(var C=[],K=q.length-1;0<=K;K--)C.push({Zd:q[K],action:q[K].C[1],pattern:ue.yd(q[K].C[0])});return C}function k(q){q._saxonAccumulators||(q._saxonAccumulators={});q._saxonAccumulators[n]={};var C=p(d,q);C&&(t=E(C,q));q._saxonAccumulators[n].pre=t;h.La(q).forEachItem(k);(C=p(c,q))&&(t=E(C,q));q._saxonAccumulators[n].post=t}function p(q,C){for(var K=0,X=q.length;KH.indexOf(u[0].value))throw new I("Invalid value "+d+"="+u[0],"FOJS0005");return u[0].value}throw new I("Invalid option: "+E+": must be "+r,"XPTY0004");}return f} -function b(u,E){function r(K){throw new I(K,"FOJS0001");}function f(){return C=H()}function H(){for(C="";;){if(q>=u.length)return["eof"];var K=u.charAt(q++);if(!/[ \n\r\t]/.test(K))break}switch(K){case "[":case "{":case "]":case "}":case ":":case ",":return[K];case '"':for(K=!1;;){var X=u.charAt(q++);if('"'!==X||K)C+=X,K="\\"===X&&!K;else return["string",C];q>=u.length&&r("Unclosed quotes in string literal")}case "-":case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":for(C+= -K;q=K){if(C+=K,++q>=u.length)break}else break;if(["true","false","null"].includes(C))return[C];r("Unknown constant "+C);break;default:return r("Unexpected character '"+K+"' ("+qb(K)+") at position "+q),-1}}function d(K){C[0]!==K&&r("Expected "+K+", found "+ -C[0])}function c(K){return C[0]===K?(f(),!0):!1}function l(K){if(C[0]===K)return f(),!0;if(","===C[0])return f(),!1;r("Expected ',' or '"+K+"', found '"+C[0]+"'")}function t(){switch(C[0]){case "[":f();E.gi();if(!c("]")){do t();while(!l("]"))}E.sh();break;case "{":f();E.hi();if(!c("}")){do d("string"),E.oh(C[1]),f(),d(":"),f(),t();while(!l("}"))}E.th();break;case "string":E.rh(C[1]);f();break;case "number":E.qh(C[1]);f();break;case "true":case "false":E.nh(C[0]);f();break;case "null":E.ph();f();break; -default:r("Unexpected token "+C[0])}}u=u.replace(/^[\uFEFF]/,"");var q=0,C=f();t();d("eof");return E.result()}function h(u){try{return JSON.parse('"'+u+'"')}catch(E){throw new I(E.toString(),"FOJS0001");}}function v(u,E){var r=E.Cb,f=E.Kd;var H=f?function(d){return f.evaluate([[wb.XS.string.fromString(B(d))]],r).next().toString()}:function(){return"\ufffd"};u=u.replace(/[\x00-\x08\x0B\x0C\x0E-\x0F\x80-\x9F\uFFFF]/g,H);return u=u.replace(/[\uD800-\uDFFF]+/g,function(d){for(var c="",l=0;lt||l===d.length-1&&"\udc00">t?H(t):t}return c})}function B(u){for(u=u.charCodeAt(0).toString(16);4>u.length;)u="0"+u;return"\\u"+u.toUpperCase()}function n(u,E){this.g=[];this.G=[];this.Cb=E;a(u,"liberal","boolean",!1);this.Kd=a(u,"fallback","function",null);this.B=a(u,"escape","boolean",!1);this.K=a(u,"duplicates","string","use-first",["reject","use-first","use-last"]);if(this.B&&this.Kd)throw new I("parse-json: cannot use fallback with escape:true()","FOJS0005"); -}function g(u,E){this.g=[];this.K=[];this.G=[];this.Cb=E;a(u,"liberal","boolean",!1);if(a(u,"validate","boolean",!1))throw new I("json-to-xml: validate option not supported in a non-schema-aware processor","FOJS0004");this.Kd=a(u,"fallback","function",null);this.B=a(u,"escape","boolean",!1);this.X=a(u,"duplicates","string","use-first",["reject","use-first","retain"]);if(this.B&&this.Kd)throw new I("json-to-xml: cannot use fallback with escape:true()","FOJS0005");}var e=Ic.Pa,k=wb.XS,p=Kc.Ka;n.prototype= -{g:[],G:[],Cb:null,B:!1,Kd:null,K:"use-first",X:function(u){return this.B?JSON.stringify(u).replace(/^"|"$/g,"").replace(/\\"/g,'"').replace(/[\uD800-\uDFFF]/g,B):v(u,this)},xa:function(){return this.g[this.g.length-1]},j:function(u){if(0===this.g.length)this.g.push(u);else if(this.xa()instanceof Kd)this.xa().value.push(u);else{var E=this.xa(),r=k.string.fromString(this.G.pop());if(E.containsKey(r))switch(this.K){case "reject":throw new I("json-to-xml: duplicate key '"+r.toString()+"'","FOJS0003"); -case "use-first":return}E.inSituPut(r,u)}},ph:function(){this.j([])},nh:function(u){this.j([k.boolean.fromString(u)])},qh:function(u){this.j([k.double.fromNumber(parseFloat(u))])},rh:function(u){this.j([k.string.fromString(this.X(h(u)))])},oh:function(u){this.G.push(this.X(h(u)))},gi:function(){this.g.push(new Kd([]))},sh:function(){this.j([this.g.pop()])},hi:function(){this.g.push(new Mc)},th:function(){this.j([this.g.pop()])},result:function(){return void 0!==this.xa()[0]?this.xa()[0]:null}};g.prototype= -{g:[],K:[{}],G:[],Cb:null,Kd:null,B:!1,X:"use-first",ba:function(u){return this.B?JSON.stringify(u).replace(/^"|"$/g,"").replace(/\\"/g,'"').replace(/[\uD800-\uDFFF]/g,B):v(u,this)},xa:function(){return this.g[this.g.length-1]},j:function(u){if(0===this.g.length)u.setAttribute("xmlns",e),this.g.push(u);else{var E=this.xa();if("map"===E.tagName){var r=this.K.pop(),f=this.G[this.G.length-1];if(r in f)switch(this.X){case "reject":throw new I("parse-json: duplicate key '"+r.toString()+"'","FOJS0003"); -case "use-first":return}f[r]=u;u.setAttribute("key",r);this.B&&/\\/.test(r.toString())&&u.setAttribute("escaped-key","true")}E.appendChild(u)}},ph:function(){var u=this.Cb.la.createElementNS(e,"null");this.j(u)},nh:function(u){var E=this.Cb.la.createElementNS(e,"boolean");E.appendChild(this.Cb.la.createTextNode(u.toString()));this.j(E)},qh:function(u){var E=this.Cb.la.createElementNS(e,"number");E.appendChild(this.Cb.la.createTextNode(u.toString()));this.j(E)},rh:function(u){var E=this.Cb.la.createElementNS(e, -"string");if(""!==u){u=this.ba(h(u));var r=this.Cb.la.createTextNode(u);this.B&&/\\/.test(u)&&E.setAttribute("escaped","true");E.appendChild(r)}this.j(E)},oh:function(u){this.K.push(this.ba(h(u)))},gi:function(){var u=this.Cb.la.createElementNS(e,"array");this.g.push(u)},sh:function(){this.j(this.g.pop())},hi:function(){var u=this.Cb.la.createElementNS(e,"map");this.g.push(u);this.G.push({})},th:function(){this.G.pop();this.j(this.g.pop())},result:function(){return this.xa()}};return{Fe:function(u, -E,r){return b(u,new n(E,r))},Oj:function(u,E,r){return b(u,new g(E,r))},gk:function(u,E){function r(q){throw new I("Invalid input to xml-to-json(): "+q,"FOJS0006");}function f(q){0!==t.Qc(q).length&&r("node "+q.tagName+" must have no element children")}function H(q){p.La(q).filter(function(C){return(3===C.nodeType||4==C.nodeType)&&C.nodeValue&&""!==sb.trim(C.nodeValue)}).next()&&r("node "+q.tagName+" must have no text content")}function d(q){try{return k.boolean.fromString(q).toBoolean()}catch(C){r("invalid boolean: '"+ -q+"'")}}function c(q){try{JSON.parse('"'+q+'"')}catch(C){throw new I("invalid escape sequence: "+C.toString(),"FOJS0007");}}function l(q,C){C=void 0===C?!0:C;if(9===q.nodeType||11===q.nodeType){var K=t.Qc(q);1!==K.length&&r("document node has "+K.length+" element children");return l(K[0])}if(1===q.nodeType){var X=!1;if(q.namespaceURI===e)switch(p.Ja(q).forEachItem(function(z){if(0>z.name.indexOf(":")||z.namespaceURI===e)"key"===z.name||"escaped-key"===z.name?"escaped-key"===z.name?(C||"map"===t.Za(q).localName|| -r("@escaped-key is allowed only on children of map"),d(z.value)&&c(q.getAttribute("key"))):C||"map"===t.Za(q).localName||r("@key is allowed only on children of map"):"escaped"===z.name?("string"!==q.localName&&r("@escaped is allowed only on string"),X=d(z.value)):r("invalid attribute "+z.name)}),q.hasAttribute("escaped-key")&&!C&&"map"!==t.Za(q).localName&&r("escaped-key is allowed only on children of map"),q.localName){case "null":return p.La(q).filter(function(z){return 8!==z.nodeType&&7!==z.nodeType}).next()&& -r("null element must have no content"),"null";case "string":f(q);K=q.textContent;if(X)K=K.replace(/^"/g,'\\"').replace(/^[\b]/g,"\\b").replace(/^\f/g,"\\f").replace(/^\n/g,"\\n").replace(/^\r/g,"\\r").replace(/^\t/g,"\\t").replace(/^\//g,"\\/").replace(/([^\\])"/g,'$1\\"').replace(/([^\\])[\b]/g,"$1\\b").replace(/([^\\])\f/g,"$1\\f").replace(/([^\\])\n/g,"$1\\n").replace(/([^\\])\r/g,"$1\\r").replace(/([^\\])\t/g,"$1\\t").replace(/([^\\])\//g,"$1\\/").replace(/[\u0001-\u001F\u007F-\u009F]/g,B),c(K); -else return JSON.stringify(K).replace(/\//g,"\\/");return'"'+K+'"';case "number":f(q);try{K=k.double.fromString(q.textContent)}catch(z){r("invalid number")}isFinite(K.toNumber())||r("NaN and INF not allowed");return K.toString();case "boolean":return f(q),d(q.textContent),k.boolean.fromString(q.textContent).toString();case "array":H(q);var ja="[",ra="";t.Qc(q).forEach(function(z){ja+=ra+l(z,!1);ra=","});return ja+"]";case "map":H(q);var O="{",fa="",ca={};t.Qc(q).forEach(function(z){z.hasAttribute("key")|| -r("child element of map must have a key");var A=t.getAttribute(z,"key"),D=A,U=t.getAttribute(z,"escaped-key"),M=!1;U&&d(U)&&(M=!0,D=h(A));ca[D]&&r("duplicate key '"+A+"'");ca[D]=!0;O+=fa+(M?'"'+A+'"':JSON.stringify(A).replace(/\//g,"\\/"))+":"+l(z,!1);fa=","});return O+"}";default:r("unknown local name "+q.localName)}else r("wrong namespace "+q.namespaceURI)}else t.V(q)||r("not a node"),Error.g&&Error.g(),r("wrong node kind "+q.nodeType)}var t=Kc;a(E,"indent","boolean",!1);return l(u)}}}(); -// Input 30 -var xe=function(){function a(n,g,e,k,p){e="xml"===e?g.fixed.wb:g.fixed.rc;g=g.fixed.Fd;var u=e[n];if(!u||u instanceof I){u=g[n];if(!u){try{u=k()}catch(E){u=E}g[n]=u}u=p(u);e[n]=u}if(u instanceof I)throw u;return u}function b(n,g){g||(g="utf-8");n=void 0===n.responseText?n:n.responseText;if(g.startsWith("utf")&&0<=n.indexOf("\ufffd"))throw new I("External file contains non-Unicode characters","FOUT1190");return n}function h(n){if(0<=n.indexOf("\x00"))throw new I("External file contains non-XML characters", -"FOUT1190");return n}function v(n){"\ufeff"===n.charAt(0)&&(n=n.substring(1));return n}function B(n,g,e){if((n=n[0].next())&&Kc.xd(n.toString()))return n.toString();g=g.fixed.ma.Na(e,g);if(null===g||"#UNDEFINED"===g)throw new I("No base URI for relative resolution","FODC0002",e);return null===n?null:gb.Qb(n.toString(),g)}return{bh:B,$e:function(n,g,e){try{return B(n,g,e)}catch(k){if(k instanceof I&&"XPTY0004"===k.code)throw k;throw new I(k.message,"FOUT1170",e);}},hg:function(n){if(""===n)return null; -if(!["utf-8","utf-16","utf-16be","iso-8859-1"].includes(n.toLowerCase()))throw new I("Unrecognized encoding "+n,"FOUT1190");return n},hh:h,ih:v,Oc:function(n,g){if(0<=n.indexOf("#"))throw new I("Fragments not supported in external document URIs","FODC0002");return a(n,g,"xml",function(){try{var e=gb.readFile(n,!0)}catch(k){if(k instanceof I&&"FOUT1190"===k.code)throw new I(k.message,"FODC0002");throw k;}return e},function(e){if(e instanceof I)return e;e=void 0===e.responseText?e:e.responseText;e= -v(h(e));e=Kc.Fc(gb.parseXmlFromString(e));e._saxonBaseUri=n;e._saxonDocUri=n;return e})},Yi:function(n,g){if(0<=n.indexOf("#"))throw new I("Fragments not supported in text document URIs","FOUT1170");return a(n,g,"text",function(){try{var e=gb.readFile(n,!0)}catch(k){if(k instanceof I)throw new I(k.message,"FOUT1170");throw k;}return e},function(e){if(e instanceof I)return e;var k=void 0===e.responseText?e:e.responseText;k=v(k);e.responseText?e.responseText=k:e=k;return b(e,"utf-8")})},pg:function(n, -g,e,k){if(0<=n.indexOf("#"))throw new I("Fragments not supported in text document URIs","FOUT1170");return a(n,g,"text",function(){try{var p=gb.readFile(n,!0)}catch(u){if(u instanceof I&&"FOUT1190"===u.code)throw u;throw new I("Cannot retrieve unparsed-text "+n.toString()+" "+u.toString(),"FOUT1170",e);}return p},function(p){if(p instanceof I)return p;var u=void 0===p.responseText?p:p.responseText;u=v(h(u));p.responseText?p.responseText=u:p=u;return b(p,k)})},Zh:function(n){try{return n(),Fc(!0)}catch(g){if(g instanceof -I&&"XPTY0004"===g.code)throw g;return Fc(!1)}}}}(); -// Input 31 -function ye(){}ba=ye.prototype;ba.Ga=function(){};ba.Ca=function(){};ba.pa=function(){};ba.wa=function(){};ba.text=function(){};ba.Aa=function(){};ba.ya=function(){};ba.append=function(){};ba.close=function(){};function ze(){this.g=null}Ka(ze,ye);ba=ze.prototype;ba.Ga=function(a){a=void 0===a?{}:a;this.g.Ga(a)};ba.Ca=function(){this.g.Ca()};ba.pa=function(a,b,h,v){v=void 0===v?{}:v;this.g.pa(a,b,h,v)};ba.wa=function(){this.g.wa()};ba.text=function(a,b){b=void 0===b?{}:b;this.g.text(a,b)}; -ba.Aa=function(a,b){b=void 0===b?{}:b;this.g.Aa(a,b)};ba.ya=function(a,b,h){h=void 0===h?{}:h;this.g.ya(a,b,h)};ba.append=function(a,b){b=void 0===b?{}:b;this.g.append(a,b)};ba.close=function(){this.g.close()};function Ae(a,b){a.g=b;return a}function Be(a){this.rd=(this.qa=a)?Kc.Tc(a.la):gb.getPlatform().createDocument();this.Rb=[];this.wc=null;this.j=0;this.B=null}Ka(Be,ye);ba=Be.prototype; -ba.Ga=function(a){a=void 0===a?{}:a;if(0===this.j++){var b=this.wc=this.rd.createDocumentFragment();a.BASE_URI&&(b._saxonBaseUri=a.BASE_URI);this.Rb.push(b)}else throw new I("Builder.startDoc() not at top level");};ba.Ca=function(){0===--this.j&&(this.wc=null)};function Ce(a,b){0===a.j?a.Rb.push(b):a.wc.appendChild(b)} -ba.pa=function(a,b,h,v){v=void 0===v?{}:v;var B=this.rd.createElementNS(a.uri,a.toString());v.BASE_URI&&(B._saxonBaseUri=v.BASE_URI);v.ORIGINAL_NODE&&(B._saxonOriginal=v.ORIGINAL_NODE);v.CALLBACK&&v.CALLBACK(B);Ce(this,B);this.wc=B;this.j++;this.B=null;b.forEach(function(g,e){B.setAttributeNS(e.uri,e.toString(),g.value)});for(var n in h)h.hasOwnProperty(n)&&(a=h[n],""===n?B.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns",a):B.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+n,a))}; -ba.wa=function(){0===--this.j?this.wc=null:this.wc=this.wc.parentNode;this.B=null};ba.text=function(a){this.B?this.B.appendData(a):(a=this.rd.createTextNode(a),Ce(this,a),0a?void 0:this.j[a]};Ne.prototype.set=function(a,b){var h=Oe(this,a);0<=h?this.j[h]=b:(this.g.push(a),this.j.push(b))};Ne.prototype.forEach=function(a){for(var b=0;bq||d.index===q&&l)&&c.push({Zc:!1,string:t(f.substring(q,d.index))}),c.push({Zc:!0,groups:d,string:t(d[0])}),q=H.lastIndex,0===d[0].length&&H.lastIndex++,C++>10*f.length)throw new I("analyze-string looping???","SXJS0004");f.length>q&&c.push({Zc:!1, -string:t(f.substring(q,f.length))});return c}function E(f){var H="compAtt"===f.N,d=Nd.lb(Nd.fa(f,"name")),c=Nd.lb(Nd.fa(f,"namespace"));return function(l){function t(){throw new I((H?"Attribute":"Element")+" name '"+q+"' is not a lexical QName",H?"XTDE0850":"XTDE0820",f);}var q=sb.trim(d(l).next().toString());if(c){l=(l=c(l).next())?l.value:"";if(!Nd.fk(l))throw new I((H?"Attribute":"Element")+" namespace '"+l+"' is invalid",H?"XTDE0865":"XTDE0835",f);var C=wb.XS.QName;if(""===l&&q.includes(":"))C= -C.fromParts("","",q.replace(/^.*:/,""));else if(q.includes(":")){var K=q.split(":");""!==K[0]&&""!==K[1]||t();C=C.fromParts(K[0],l,K[1])}else C=""===l?C.fromParts("","",q):C.fromParts(H?"ns0":"",l,q)}else{if(H&&"xmlns"===q)throw new I("Attribute must not be named xmlns","XTDE0855",f);try{C=Nd.Jg(f,q,!H)}catch(X){if(X instanceof I){if("XTDE0290"===X.code)throw new I((H?"Attribute":"Element")+" name '"+q+"' has an unbound prefix",H?"XTDE0860":"XTDE0830",f);"FORG0001"===X.code&&t()}throw X;}}if("http://www.w3.org/2000/xmlns/"=== -C.uri)throw new I("Disallowed namespace "+C.uri,H?"XTDE0865":"XTDE0835",f);return C}}b.prototype.Ga=function(){};b.prototype.Ca=function(){};b.prototype.pa=function(){};b.prototype.Ja=function(){};b.prototype.rb=function(){};b.prototype.wa=function(){};b.prototype.text=function(){};b.prototype.Aa=function(){};b.prototype.ya=function(){};b.prototype.append=function(){};b.prototype.close=function(){};Ka(a,b);a.prototype.ua=function(f,H,d){var c=this.K[f];if(c&&c!==H)if("ns"===d){if(this.Da[f])throw new I("Two conflicting bindings for prefix '"+ -f+"'","XTDE0430");if(this.G.prefix===f){for(c=f+"_9";this.K[c];)c+="9";this.G=wb.XS.QName.fromParts(c,this.G.uri,this.G.local);this.K[c]=this.G.uri}this.K[f]=H}else return""===f&&(f="NULL"),this.ua(f+"0",H,d);"ns"===d&&(this.Da[f]=!0);if("elem"===d&&""===H)for(d=this.ba.length-1;0<=d;d--)if(""===this.ba[d][0]){this.K[""]="";break}if(""!==f||""!==H){d=!1;for(c=this.ba.length-1;0<=c;c--){var l=this.ba[c];if(l[0]===f){l[1]===H&&(d=!0);break}}d||(this.K[f]=H)}return f};a.prototype.Ga=function(){0===this.g&& -(this.j.Ga({BASE_URI:this.sb,ORIGINAL_NODE:this.$c}),this.ba=[]);this.X();this.g++;this.B=this.qa=!1};a.prototype.Ca=function(){this.g--;0===this.g&&this.j.Ca();this.B=!1};a.prototype.pa=function(f){this.X();this.g++;this.qa=!0;this.G=f;this.Ua=new Ne;this.K={};this.Da={};this.ua(f.prefix,f.uri,"elem");this.za=this.$c;this.B=!1};a.prototype.Ja=function(f,H){if(0===this.g)this.j.append(new Jc(f,H,null));else{if(!this.qa){if(this.G)throw new I("Cannot write attribute ("+f.aa()+"="+H+") after writing child nodes (level="+ -this.g+", start tag = "+this.G+")","XTDE0410");throw new I("Cannot attach an attribute ("+f.aa()+"="+H+") to a document node","XTDE0420");}if(""!==f.uri){["","xmlns"].includes(f.prefix)&&(f=f.Kc("ns_"));var d=this.ua(f.prefix,f.uri,"att");d!==f.prefix&&(f=f.Kc(d))}this.Ua.set(f,{value:H,nb:0})}};a.prototype.rb=function(f,H){if(0===this.g)this.j.append(new Lc(f,H));else{if(!this.qa)throw new I("Cannot write namespace after writing child nodes","XTDE0410");if(""===f&&""===this.G.uri)throw new I("Cannot add default namespace declaration to a no-namespace element", -"XTDE0440");this.ua(f,H,"ns")}};a.prototype.wa=function(){this.X();this.j.wa();this.g--;for(var f=this.hb.pop();0ea.findIndex(function(na){return na===Z})&&(M[Z].group.push(V),ea.push(Z))):(Z=M.length,M.push({group:[V],key:[ma]}),D.inSituPut(ma,Z),ea.push(Z))})})},by_c:function(){var A=Nd.fa(f,"collation");A=A?Nd.evaluate(A,c).next().toString():re.md;A=re.ug(A,c);var D=Nd.fa(f,"key"),U=re.Nf(A,!0);return t(function(M,V){var Z=Nd.evaluate(D,C).expand();if(U.containsKey(Z)){var ea=U.get(Z);M[ea].group.push(V)}else ea=M.length,M.push({group:[V], -key:Z}),U.inSituPut(Z,ea)})}};K.adjacent_c=K.adjacent;var X=f.algorithm+(Nd.Gb(f,"c")?"_c":"");try{var ja=K[X]()}catch(A){if(A instanceof I&&"FOCH0002"===A.code)throw new I("Unknown collation:"+A.message,"XTDE1110");throw A;}var ra=Nd.Db(f,"sortKey");if(0M)return-1;if(0/g,"? >").replace(/^\s+/,"");l.ya(t,c)}},sequence:B,sourceDoc:function(f){var H=Nd.lb(Nd.fa(f,"href")),d=h(f.C[1]);return function(c,l){var t=c.ca(!1),q=null===H?"":H(c).next().toString();q=gb.Qb(q,Nd.Na(f,c));q=xe.Oc(q,c);c=c.fixed.Ke;null!==c&&(q=c(q));t.focus=zc(q);t.cb=null;d(t,l)}},useAS:function(f){return function(H,d){var c=Nd.yg(f, -H,"attributeSet");H=H.ca(!0);H.ta="attribute set";H.va=c;c=c.actor;c.C&&B(c)(H,d)}},valueOf:function(f){var H=Nd.Va(f),d={};Nd.Gb(f,"d")&&(d.DISABLE_ESCAPING=!0);return function(c,l){c=k(H(c));l.text(c,d)}}};return{eg:u,Ni:h,Rc:function(f){return new a(f)},push:function(f,H,d){if("undefined"===typeof d)throw jb.Sa(Error().stack),new I("No output for "+v(f));if(r[f.N]){var c=h(f);try{c(H,d)}catch(q){throw q instanceof I&&!q.xsltLineNr&&ib(q,f),q;}}else{c=Nd.lb(f);try{for(var l=c(H),t;null!=(t=l.next());)d.append(t)}catch(q){throw q instanceof -I&&!q.xsltLineNr&&ib(q,f),q;}}},Xh:g,Ff:n,Ig:p}}(); -// Input 33 -var Qe=function(){function a(O,fa,ca,z,A){function D(F){return null===q.Za(F)}function U(F){return F.nodeType===V.nodeType&&(null===Z?!0:q.ea(F).equals(Z))}var M=A.fixed.ma;if(fa){var V=M.evaluate(fa,A).next();if(!V||!q.V(V))throw new I("xsl:number/@select must yield a single node","XTTE1000");}else Qd(A,"XTTE0990","xsl:number"),V=Od(A);var Z=q.ea(V),ea=U;if(null!==ca){var ma=ue.yd(ca);ea=function(F){return ue.matches(ma,F,A)}}if(null===z)fa=D;else{var na=ue.yd(z);fa=function(F){return D(F)||ue.matches(na, -F,A)}}switch(O){case "simple":return O=C.ad(V).filter(U),Cc(O.count()+1);case "single":O=C.$a(V).filter(ea).next();var ha=C.$a(V).filter(fa).next();O=null===O?null:null!==C.$a(O).filter(function(F){return q.isSameNode(F,ha)}).next()?O:null;if(null===O)return wc;O=C.ad(O).filter(ea);return Cc(O.count()+1);case "multi":O=sc(C.$a(V).filter(ea).expand().reverse());ha=C.$a(V).filter(fa).next();O=O.filter(function(F){return null!==C.$a(F).filter(function(L){return q.isSameNode(L,ha)}).next()});var y=K.integer.fromNumber; -return O.mapOneToOne(function(F){return y(C.ad(F).filter(ea).count()+1)});case "any":return ca=function(F,L){return q.tb(L,F)},O=new mc(C.Fg(V).filter(ea),C.$a(V).filter(ea),ca),ha=(new mc(C.Fg(V).filter(fa),C.$a(V).filter(fa),ca)).next(),null===ha&&jb.na("from pattern selected empty"),O=O.filter(function(F){return 0<=q.tb(F,ha)}),O=O.count(),0===O?wc:Cc(O);default:return jb.na("unknown xsl:number/@level "+O),wc}}function b(O,fa,ca,z,A,D,U){function M(Z){""===Z&&(Z="1");if(/^[\x01-\x7f]*$/.test(Z)){Z= -Z.split(/\b/);var ea=function(L){return/\w+/.test(L)}}else{if(Z.length!==qb(Z).length)throw new I("Cannot handle non-BMP characters in format-number picture","SXJS0002");var ma=Ke.eg(Z,"[\\p{Nd}\\p{Nl}\\p{No}\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}]+","",!0,!1);ea=function(L,Q){return ma[Q].Zc};Z=ma.map(function(L){return L.string.toString()})}for(var na={prefix:"",qd:[],de:""},ha=".",y=0;y=ma.qd.length?ma.qd[ma.qd.length-1]:ma.qd[y];0!==y&&(na+=F.ai);y=F.gh;A&&(y+=";o");ha=Qe.rg(ha.toNumber(),y);null!==ca&&null!==z&&(ha=Qe.cg(ha,ca,z));na+=ha});na+= -ma.de;return Bc(na)}(O.expand())}function h(O,fa,ca,z,A){var D=A.fixed.ma,U=[1];null!==ca&&(U=D.evaluate(ca,A).next().toString().split(/\s+/).map(function(M){if(!/^-?[0-9]+$/.test(M))throw new I("xsl:number/@start-at must be a sequence of integers. Offending value: "+M,"XTSE0020");return parseInt(M,10)}));if(fa&&z){O=O.next();if(null===O)return null;try{O=K.integer.R(O.round(0))}catch(M){return null}O=sc([O])}return O.mapOneToOne(function(M,V){M=M.isNumeric()?M.toDouble():K.double.nf(M.toString()); -if(0>M.toNumber())throw new I("xsl:number/@value is less than zero ("+M.toString()+")","XTDE0980");try{M=K.integer.R(M.round(0))}catch(Z){throw Z.code="XTDE0980",Z;}V=V>=U.length?U[U.length-1]:U[V];1!==V&&(M=K.integer.fromNumber(M.toNumber()+(V-1)));return M})}function v(O){if(1>O||4999=z[A];)fa+=ca[A],O-=z[A];return fa}function B(O,fa){function ca(A){return(A> -z?ca(Math.floor((A-1)/z)):"")+fa.charAt((A-1)%z)}if(1>O)return O.toString();var z=fa.length;return ca(O)}function n(O,fa){return Oca?ca.toString():kb(ca).toFixed();ca.lengthO&&(ca="-"+ca);return ca}function e(O,fa){fa=void 0===fa?"FODF1310":fa;var ca=qb(O),z={},A=!0,D=0,U=sb.Ie("\\p{Nd}",null),M=O.search(U);if(0>M)A=!1;else{D=sb.Mj().Nd;for(var V=0;Vca[M]||ca[M]>Z+10)throw new I("Picture string mixes digits from different digit families: "+O,fa);}else if(sb.Ie("\\p{N}\\p{L}",null).test(D))throw new I("Picture string is invalid: "+O,fa);var ea=[];D=Z-48;ca.forEach(function(ma){Z<=ma&&ma<=Z+10?ea.push(48):ea.push(ma)});O=rb(ea)}z.sj=A;z.format=O;z.ng=D;z.Rf=Z;return z}function k(O,fa){var ca=[];qb(O).forEach(function(z){48<=z&&57>=z?ca.push(z+ -fa):ca.push(z)});return rb(ca)}function p(O,fa,ca,z,A){z=void 0===z?"":z;A=void 0===A?!1:A;for(var D=0,U=0;Uca[0]&&(U=!1);if(U)for(D=1;DO?fa[O]:100>O?ca[Math.floor(O/10)]+(0===O%10?"":" "+fa[O%10]):1E3>O?E(Math.floor(O/100))+" Hundred"+(0===O%100?"":" and "+E(O%100)):1E6>O?E(Math.floor(O/1E3))+" Thousand"+(0===O%1E3?"":(100>O%1E3?" and ":" ")+E(O%1E3)):1E9>O?E(Math.floor(O/1E6))+" Million"+(0===O%1E3?"":(100>O%1E3?" and ":" ")+E(O%1E6)):O.toString()}function r(O){var fa="Zeroth First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh Twelfth Thirteenth Fourteenth Fifteenth Sixteenth Seventeenth Eighteenth Nineteenth".split(" "), -ca=" Twent Thirt Fort Fift Sixt Sevent Eight Ninet".split(" ");return 20>O?fa[O]:100>O?ca[Math.floor(O/10)]+(0===O%10?"ieth":"y "+fa[O%10]):1E3>O?E(Math.floor(O/100))+" Hundred"+(0===O%100?"th":" and "+r(O%100)):1E6>O?E(Math.floor(O/1E3))+" Thousand"+(0===O%1E3?"th":(100>O%1E3?" and ":" ")+r(O%1E3)):1E9>O?E(Math.floor(O/1E6))+" Million"+(0===O%1E3?"th":(100>O%1E3?" and ":" ")+r(O%1E6)):O.toString()}function f(O){return 1===O%10&&11!==O%100?"st":2===O%10&&12!==O%100?"nd":3===O%10&&13!==O%100?"rd": -"th"}function H(O,fa,ca){function z(U,M){var V="";U=U.charCodeAt(0);for(var Z=0;ZO?"-":"";if("o"===D)switch(fa.toString()){case "a":case "A":case "i":case "I":break; -case "Ww":return A+r(Math.abs(O));case "W":return A+r(Math.abs(O)).toUpperCase();case "w":return A+r(Math.abs(O)).toLowerCase();default:return u(O,fa,ca)+f(Math.abs(O))}switch(fa.toString()){case "a":return B(O,z("a",26));case "A":return B(O,z("A",26));case "\u03b1":return B(O,z("\u03b1",25));case "\u0391":return B(O,z("\u0391",25));case "i":return v(O);case "I":return v(O).toUpperCase();case "Ww":return A+E(Math.abs(O));case "W":return A+E(Math.abs(O)).toUpperCase();case "w":return A+E(Math.abs(O)).toLowerCase(); -case "\u2460":return n(O,"\u24ea"+z("\u2460",20)+z("\u3251",15)+z("\u32b1",15));case "\u2474":return n(O,"0"+z("\u2474",20));case "\u2488":return 0===O?"\ud83c\udd00":n(O,"0"+z("\u2488",20));case "\u2776":return n(O,"\u24ff"+z("\u2776",10)+z("\u24eb",10));case "\u2780":return 0===O?"\ud83c\udd0b":n(O,"0"+z("\u2780",10));case "\u278a":return 0===O?"\ud83c\udd0c":n(O,"0"+z("\u278a",10));case "\u24f5":return n(O,"0"+z("\u24f5",10));case "\u3220":return n(O,"0"+z("\u3220",10));case "\u3280":return n(O, -"0"+z("\u3280",10));default:return u(O,fa,ca)}}function d(O,fa){return String.fromCharCode(parseInt(O[fa]?O[fa]:X[fa],10))}function c(O,fa){function ca(qa){[["$gs","grouping separator"],["$es","exponent separator"],["$ds","decimal separator"],["$pc","non-prefix passive character"],["$pp","percent|permille"],["$od","optional digit"],["$md","mandatory digit"],["$ip","integer part"],["$fp","fractional part"]].forEach(function(Fa){qa=qa.replace(Fa[0],Fa[1])});throw new I("Invalid picture: "+qa,"FODF1310"); -}for(var z={},A=O.indexOf(fa.jf),D=0<=A,U=fa.Rf.charCodeAt(0),M=0,V=0,Z=[],ea=[],ma=[],na=-1,ha=-1,y=!1,F=!1,L=-1,Q=0,R=D?A:O.length,w=0;w=U&&YM&&0>na&&(na=w),M++,V++)):Y===fa.lh.charCodeAt(0)?(0na&&(na=w,F=!0),V++):Y===fa.we.charCodeAt(0)?(0na&&ca("$pp before any digit"),0ha&&(ha=w),Y===fa.Cd.charCodeAt(0)?z.Cd=!0:z.Ge=!0):!D&&0<=na&&Y===fa.Nc.charCodeAt(0)&&0>ha?y?(ma.push(Y),0ha&&(ha=w):(ma.push(Y),y=!1,L=-1,0>ha&&(ha=w-1))):(y=!0,L=w):0<=na&&D?ca("$pc before $ds"):y&&0===Q?(y=!1,L=-1,ma.push(fa.Nc.charCodeAt(0)),ma.push(Y),0>ha&&(ha=w-1)):0<=na?(ma.push(Y),0>ha&&(ha=w)):ea.push(Y)}if(0=U&&Pha?Q++:0<=D||0<=ha?ca("$md follows $od or $pc in $fp"):(R++,w++):P===fa.lh.charCodeAt(0)?((0<=ha||y)&&ca("$od follows $pc or $es"),0>D&&(D=oa),w++):P===fa.we.charCodeAt(0)?((0<=ha||y)&&ca("$gs follows $pc or $es"), -Y.push(oa-A+1)):P===fa.jf.charCodeAt(0)?ca("more than one $ds"):P===fa.Cd.charCodeAt(0)||P===fa.Ge.charCodeAt(0)?((0<=ha||y)&&ca("$pp follows $pc or $es"),ma.push(P),ha=oa,P===fa.Cd.charCodeAt(0)?z.Cd=!0:z.Ge=!0):P===fa.Nc.charCodeAt(0)&&0>ha?y?(ma.push(P),0ha&&(ha=oa):(ma.push(P),y=!1,L=-1,0>ha&&(ha=oa-1))):(y=!0,L=oa):y&&0===Q?(y=!1,L=-1,ma.push(fa.Nc.charCodeAt(0)),ma.push(P),0>ha&&(ha=oa-1)):(ma.push(P),0>ha&&(ha=oa))}}0>na&&0===w&&ca("mantissa contains no digits");if(0!==Y.length)for(0=== -Y[0]&&ca("$gs at beginning of $fp"),A=0;A=z+ca?t(new Date(O.getTime()-864E5),fa):Math.floor((ca+z-2)/7)+(5>z?1:0)}var q=Kc,C=q.Ka,K=wb.XS,X={"decimal-separator":"46","grouping-separator":"44",digit:"35","minus-sign":"45",percent:"37","per-mille":"8240","zero-digit":"48","exponent-separator":"101","pattern-separator":"59",infinity:"Infinity",NaN:"NaN"},ja={Y:"getUTCFullYear",M:"getUTCMonth",D:"getUTCDate",F:"getUTCDay",H:"getUTCHours",m:"getUTCMinutes",s:"getUTCSeconds",f:"getUTCMilliseconds"},ra= -{d:l,W:function(O){return t(O,!0)},w:function(O){return t(O,!1)},h:function(O){return 13>O.getUTCHours()?0===O.getUTCHours()?12:O.getUTCHours():O.getUTCHours()-12},P:function(O){return 12>O.getUTCHours()?"Am":"Pm"},E:function(O){return 0>O.getUTCFullYear()?"BC":"AD"}};return{Kj:function(O,fa){var ca=fa.fixed.ma,z=O.level,A=ca.fa(O,"select"),D=ca.fa(O,"count");O=ca.fa(O,"from");return a(z,A,D,O,fa)},Lj:function(O,fa){var ca=fa.fixed.ma,z=ca.fa(O,"value"),A=ca.fa(O,"format"),D=ca.yc(ca.fa(O,"gpSep"), -fa).next(),U=ca.yc(ca.fa(O,"gpSize"),fa).next(),M=ca.yc(ca.fa(O,"ordinal"),fa).next(),V=ca.yc(ca.fa(O,"lang"),fa).next(),Z=O.flags||"";O=ca.fa(O,"startAt");Z=/1/.test(Z);ca=ca.evaluate(z,fa);ca=h(ca,Z,O,!0,fa);M=M?Nd.Aj(M.toString()):!1;return null===ca?Bc("NaN"):b(ca,A,D,U,M,V,fa)},rg:H,cg:function(O,fa,ca){for(var z="",A=0;AO?!0:0===O?0>1/O:!1;ca={jf:d(ca,"decimal-separator"), -we:d(ca,"grouping-separator"),lh:d(ca,"digit"),Hj:d(ca,"minus-sign"),Cd:d(ca,"percent"),Ge:d(ca,"per-mille"),Rf:d(ca,"zero-digit"),Nc:d(ca,"exponent-separator"),Vh:d(ca,"pattern-separator"),mj:ca.infinity||X.infinity,Ij:ca.NaN||X.NaN};if(isNaN(O))return ca.Ij;fa=fa.includes(ca.Vh)?fa.split(ca.Vh):[fa];if(2O?fa[1]:fa[0],ca);if(isFinite(O)){if(0na&&(O=kb(O.toPrecision(na)));(na=ha!==O.e)&&(D+=1);1D)||Z&&na||(U+="."+ma.join("").slice(D))}else throw new I("Empty mantissa","SXJS0004");D=U+V+g(O.e,ea)}else{M=Math.abs(O);A.Cd&&(M=Math.abs(100* -O));A.Ge&&(M=Math.abs(1E3*O));"Infinity"===M+""?D=M+"":D=999999>M?M.toString():kb(M).toFixed();M=D.indexOf(".");0>M&&(M=D.length,0D.indexOf(".")&&(D+=".0")):D=kb(D).round(0,1).toString());V=D.length-1-M;if(0V;V++)M+=String.fromCharCode(ca.Rf.charCodeAt(0)+ -V);M+=ca.jf;V="";for(Z=0;ZO?V+=ea:OV&&(V=M.length);D=M.substring(0,V);M=M.substring(V);if(0A.ac[0]&&(V=!1);D=V?Qe.cg(D,ca.we,A.ac[0]):p(D,A.ac,null,ca.we)}0ea||"*"!== -Z&&1>Z||"*"!==ea&&"*"!==Z&&ea>Z)throw new I("Invalid width modifier in date/time formatting picture","FOFD1340");}var ma=null;1Z||12V.length;)V="0"+V;ma=qb(V);V=parseInt(rb(ma.reverse()),10);if(!U&&!M&&/^[0-9]$/.test(na))for(;ma.length>na.length;)na+="#";if(U&&"*"!==U){ha=/^([0-9]*)(#*)$/.exec(na);na=ha[1]?ha[1]:"";for(ha=ha[2]?ha[2]:"";U>na.length;)na+="0",ha=ha.slice(0,-1);na+=ha}if(M)for("*"===M&&(M=ma.length);na.lengthna.length;)V=V.slice(0,-1);U&&"*"!==U||0!==parseInt(V, -10)||(V="0");Z||(V=k(V,ea));U=V}else{if(/[nN]/.test(M))ea="January February March April May June July August September October November December".split(" "),V="Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),ma="M"===U?ea[ha-1]:"F"===U?V[ha-1]:ha,"F"===U&&Z&&"*"!==Z&&6>Z&&(ma=ma.replace(/(ur)?day$/,""),ma=ma.replace(/nes$/,"s")),"n"===M?ma=ma.toLowerCase():"N"===M&&(ma=ma.toUpperCase()),Z&&"*"!==Z&&(ma=ma.substring(0,Z));else{na=/;/.test(M)?M+";":M;ma&&(na+=(";"===na.charAt(na.length- -1)?"":";")+ma);ma=H(ha,na,"FOFD1340");if("Y"===U&&/[^iIwWnN]/.test(M.charAt(M.length-1))&&(!ea&&2===M.length||2==Z))for(;2":">","&":"&",'"':""","\n":" ","\r":" ","\t":" "},P={"<":"<",">":">","&":"&"};return Y?w.replace(/&|<|>|"|\n|\r|\t/g,da(oa)):w.replace(/&|<|>/g,da(P))}if(L){L="";y=y.split("\x00");for(var R=0;R=y:"US-ASCII"===F.toUpperCase()?127>=y:!0}function C(y,F){return function(L){for(var Q=!0,R=0;R=y.min&&w<=y.max){Q=!1;break}}if(Q)return L;Q="";R=!1;for(w=0;w=da;oa&&(da=L.codePointAt(w));y.Ba[da]?(F&&!R&&(Q+="\x00",R=!0),Q+=y.Ba[da],oa&&w++):(F&&R&&(Q+="\x00",R=!1),Q+=Y)}return Q}}function K(y){return""=== -y.uri||"http://www.w3.org/1999/xhtml"===y.uri}function X(y){return["http://www.w3.org/1999/xhtml","http://www.w3.org/2000/svg","http://www.w3.org/1998/Math/MathML"].includes(y)}function ja(y,F){return(F={action:["form"],archive:["object"],background:["body"],cite:["blockquote","del","ins","q"],classid:["object"],codebase:["applet","object"],data:["object"],datasrc:"button div input object select span table textarea".split(" "),"for":["script"],formaction:["button","input"],href:["a","area","base", -"link"],icon:["command"],longdesc:["frame","iframe","img"],manifest:["html"],name:["a"],poster:["video"],profile:["head"],src:"audio embed frame iframe img input script source track video".split(" "),usemap:["img","input","object"]}[F.local])&&F.includes(y.local)}function ra(y,F,L){L=void 0===L?null:L;switch(y.method){case "xml":F=new c(y,F);if(y.version&&"1.0"!==y.version)throw new I("Serializer does not support the requested XML version: "+y.version,"SESU0013");ea(y);if(y["undeclare-prefixes"])throw new I("Cannot undeclare prefixes with XML 1.0 serializer", -"SEPM0010");y.indent&&(F=D(y,F));F=U(y,F);F=M(y,F);F=V(y,F);return A(y,F);case "html":return ma(y,F);case "text":return ea(y),F=new b(y,F),F=U(y,F),F=M(y,F),A(y,F);case "xhtml":return ma(y,F);case "json":return ea(y),y.indent?new B(y,F,L):new n(y,F,L);case "adaptive":return new v(y,F,L);default:return new h(y,F)}}function O(y,F,L){function Q(P,qa){qa=qa.trim();if(["yes","true","1"].includes(qa))return!0;if(["no","false","0"].includes(qa))return!1;throw new I("Value of "+P+" must be yes(=true, 1) or no(=false, 0)", -"SEPM0016");}function R(P){return function(qa,Fa){Fa=Fa.trim();return Fa.split(/\s+/).map(function(m){/^Q\{/.test(m)||/:/.test(m)||(m="Q{}"+m);return/^Q\{/.test(m)?m:ha.QName.fromString(m,P).aa()})}}function w(P){return function(qa,Fa){Fa=Fa.trim();if(P.includes(Fa))return Fa;throw new I("Value of "+qa+"("+Fa+"): must be one of "+P.join("|"),"SEPM0016");}}function Y(P){return function(qa,Fa){if(P.test(Fa))return Fa;throw new I("Invalid value for "+qa+": must match the pattern "+P,"SEPM0016");}}function da(P, -qa){return qa}function oa(P,qa){qa=qa.trim();if(/[0-9]+/.test(qa))return 1*qa;throw new I("Value of "+P+" must be an integer (Actual value is "+jb.showValue(qa)+")","SEPM0016");}L={"allow-duplicate-names":Q,"build-tree":Q,"byte-order-mark":Q,"cdata-section-elements":R(L),"doctype-public":Y(/[\sa-zA-Z0-9\-'()+,.:=?;!*#@$_%\/]*/),"doctype-system":Y(/[^']*|[^"]*/),encoding:Y(/[\x21-\x7e]+/),"escape-uri-attributes":Q,"html-version":function(P,qa){if(/[0-9]+(\.[0-9]+)?/.test(qa))return 1*qa;throw new I("Value of "+ -P+" must be a decimal number","SEPM0016");},"include-content-type":Q,indent:Q,"item-separator":da,"json-node-output-method":w(["xml","xhtml","html","text"]),"media-type":da,method:function(P,qa){return function(Fa,m){m=m.trim();!/^Q\{/.test(m)&&/:/.test(m)&&(m=ha.QName.fromString(m,qa).aa());if(P.includes(m))return m;throw new I("Value of "+Fa+"("+m+"): must be one of "+P.join("|"),"SEPM0016");}}("xml xhtml html text json adaptive Q{http://saxonica.com/ns/interactiveXSLT}append-content Q{http://saxonica.com/ns/interactiveXSLT}replace-content".split(" "), -L),"normalization-form":w("NFC NFD NFKC NFKD fully-normalized none".split(" ")),"omit-xml-declaration":Q,standalone:function(P,qa){return"omit"===qa.trim()?null:Q(P,qa)},"suppress-indentation":R(L),"undeclare-prefixes":Q,"use-character-maps":R(L),version:da,"Q{http://saxon.sf.net/}indent-spaces":oa,"Q{http://saxon.sf.net/}line-length":oa,"Q{http://saxon.sf.net/}stylesheet-version":oa};/^\{/.test(y)&&(y="Q"+y);if("string"!==typeof F)throw new I("Value of "+y+" must be supplied as a string","SEPM0016"); -if(L[y])return L[y](y,F);if(!/^Q\{/.test(y))throw new I("Unknown serialization parameter "+y,"SEPM0017");}function fa(y,F,L){function Q(da,oa,P){if(!Array.isArray(oa))throw new I("Value of "+da+" must be an array","SEPM0016");return(P||[]).concat(oa)}function R(da,oa){if("boolean"!==typeof oa)throw new I("Value of "+da+" must be boolean","SEPM0016");return oa}function w(da,oa){if("number"!==typeof oa)throw new I("Value of "+da+" must be an integer (actual value is "+jb.showValue(oa)+")","SEPM0016"); -return oa}var Y={"allow-duplicate-names":R,"build-tree":R,"byte-order-mark":R,"cdata-section-elements":Q,"escape-uri-attributes":R,"html-version":function(da,oa){if("number"!==typeof oa)throw new I("Value of "+da+" must be a decimal number","SEPM0016");return oa},"include-content-type":R,indent:R,"omit-xml-declaration":R,standalone:function(da,oa){return null===oa?null:R(da,oa)},"suppress-indentation":Q,"undeclare-prefixes":R,"use-character-maps":function(da,oa,P){P&&Array.isArray(P)&&jb.na("Problem with existing character map supplied to overrideParam"); -if("object"!==typeof oa)throw new I("Value of "+da+" must be an object","SEPM0016");if(void 0===oa.Ba)throw new I("Value of "+da+" must be a character map object","SEPM0016");(da=P)?ca(da,oa):da=oa;return da},"Q{http://saxon.sf.net/}indent-spaces":w,"Q{http://saxon.sf.net/}line-length":w,"Q{http://saxon.sf.net/}stylesheet-version":w};/^{/.test(y)&&(y="Q"+y);return Y[y]?Y[y](y,F,L):O(y,F.toString())}function ca(y,F){F.miny.max&&(y.max=F.max);for(var L in F.Ba)F.Ba.hasOwnProperty(L)&& -(y.Ba[L]=F.Ba[L])}function z(y,F){var L={};y.forEach(function(Q,R){var w=F.fh[Q];if(!w)throw new I("Unknown character map "+Q,"SEPM0016");0===R?L=w:ca(L,w)});return L}function A(y,F){return y["item-separator"]&&"#absent"!==y["item-separator"]?new Le(F,y["item-separator"]):new He(F)}function D(y,F){var L=y["Q{http://saxon.sf.net/}indent-spaces"],Q=y["suppress-indentation"];return Ae("xml"===y.method?new d(L,Q):new u(L,Q),F)}function U(y,F){y["normalization-form"]&&"none"!==y["normalization-form"]&& -(F=Ae(new H(y["normalization-form"]),F));return F}function M(y,F){y["use-character-maps"]&&(F=Ae(new f(y["use-character-maps"]),F));return F}function V(y,F){y["cdata-section-elements"]&&(F=Ae(new r(y["cdata-section-elements"],y.encoding||"UTF-8",y["normalization-form"]&&"none"!==y["normalization-form"]?y["normalization-form"]:null),F));return F}function Z(y,F){return void 0===y[F]||y[F]}function ea(y){if(y.encoding&&!["UTF-8","UTF-16","ISO-646","ISO-8859-1","US-ASCII"].includes(y.encoding.toUpperCase()))throw new I("Serializer does not support the requested encoding: "+ -y.encoding,"SESU0007");}function ma(y,F){var L="xhtml"===y.method;F=L?new k(y,F):new E(y,F);if(L&&y.version&&"1.0"!==y.version)throw new I("Serializer does not support the requested XML version: "+y.version,"SESU0013");if((L=L?y["html-version"]:y["html-version"]||y.version)&&5!==1*L)throw new I("Serializer does not support the requested HTML version: "+L,"SESU0013");ea(y);Z(y,"indent")&&(F=D(y,F));F=U(y,F);F=M(y,F);F=V(y,F);F=Ae(new p,F);Z(y,"escape-uri-attributes")&&(F=Ae(new e,F));Z(y,"include-content-type")&& -(F=Ae(new g(y),F));return A(y,F)}function na(y,F,L,Q){function R(oa,P){switch(oa.nodeType){case 9:case 11:P.Ga(da);oa=oa.childNodes;for(var qa=0;qa"),this.B=!1):this.g.write("")};c.prototype.text=function(y,F){F=void 0===F?{}:F;this.G||this.X();this.B&&this.ba();this.g.write(F.DISABLE_ESCAPING?this.j(y,!1):this.j(t(y,!1,!1),!0))};c.prototype.Aa=function(y){this.G||this.X();this.B&&this.ba();this.g.write("\x3c!--"+this.j(y,!1)+"--\x3e")};c.prototype.ya=function(y,F){this.G||this.X();this.B&&this.ba();this.g.write("")};c.prototype.append= -function(y,F){F=void 0===F?{}:F;this.text(y.toString(),F)};c.prototype.X=function(){this.hb||this.Xi()};c.prototype.ba=function(){this.g.write(">");this.B=!1};c.prototype.bj=function(y,F){var L=this,Q=[],R;for(R in y)if(F[R]!==y[R]){var w="";"xml"!==R&&(w=""===R?' xmlns="'+t(y[R],!0,!1)+'"':" xmlns:"+R+'="'+t(y[R],!0,!1)+'"');""!==w&&Q.push(w)}Q.sort();Q.forEach(function(Y){return L.g.write(Y)})};c.prototype.re=function(y,F){if(F){var L=this;F.forEach(function(Q,R){L.pe(R,Q)})}};c.prototype.pe=function(y, -F){var L=!0===F.nb.USE_NULL_MARKERS;F=F.nb.DISABLE_ESCAPING?this.j(F.value,!1):this.j(t(F.value,!0,L),!0);this.g.write(" "+this.j(y.toString(),!1)+'="'+F+'"')};c.prototype.Xi=function(){var y=this.encoding.toUpperCase();this.Qa["byte-order-mark"]&&"UTF-8"===y&&this.g.write("\ufeff");this.hb=!0;y=!0===this.Qa["omit-xml-declaration"]&&"UTF-8"===y;this.qa=!y;var F=this.Qa.standalone;if(y&&void 0!==F&&null!==F)throw new I("Serializer values of 'standalone' and 'omit-xml-declaration' conflict","SEPM0009"); -y||this.g.write('")};c.prototype.Da=function(y){var F=this.Qa["doctype-system"]||null,L=this.Qa["doctype-public"]||null;null!==F&&(this.qa&&this.g.write("\n"),this.g.write("\n"):this.g.write(' PUBLIC "'+this.j(L,!1)+'" '+this.j(y,!1)+">\n"),this.za=!0)};c.prototype.j= -function(y,F){function L(R){if(F)return"&#"+R+";";throw new I("Character "+String.fromCodePoint(R)+" (decimal "+R+") is not available in the chosen encoding","SERE0008");}var Q=this.encoding;return function(R){var w="",Y=0,da=R.length;if(0===da)return"";for(;YP)break;else if(127>P)oa++;else if(160>P||8232===P||55296<=P&&56320>=P||!q(P,Q))break;else oa++}if(oa>=da)return 0===Y?R:w+R.substring(Y,oa);oa>Y&&(w+=R.substring(Y, -oa));P=R.charCodeAt(oa);Y=R.charAt(oa);if(0===P)throw new I("Null marker","ZZZZ9999");160>P||8232===P?w+=F?L(P):Y:55296<=P&&56320>=P?(P=R.codePointAt(oa++),w+=q(P,Q)?Y+R.charAt(oa):L(P)):q(P,Q)||(w+=L(P));Y=++oa;if(Y>=da)return w}}(y)};Ka(d,ze);d.prototype.pa=function(y,F,L,Q){Q=void 0===Q?{}:Q;this.K||this.B?this.qa():this.X();if(0>this.j){var R=F.get(ha.QName.fromParts("","http://www.w3.org/XML/1998/namespace","space"));R&&"preserve"===R.value&&(this.j=this.G)}this.G++;this.Ua&&-1===this.j&&0<= -this.Ua.indexOf(y.aa())&&(this.j=this.G);this.g.pa(y,F,L,Q);this.K=this.ba=!0;this.B=!1};d.prototype.wa=function(){this.G--;this.B&&!this.ba?this.qa():this.K&&!this.B?this.za=null:this.X();this.g.wa();this.ba=!1;this.B=!0;this.K=!1;this.G===this.j-1&&(this.j=-1)};d.prototype.text=function(y,F){F=void 0===F?{}:F;0>this.j&&""===sb.trim(y)?(this.za=y,this.hb=F):(this.X(),0<=y.indexOf("\n")&&(this.ba=!1),this.g.text(y,F),this.B=this.K=!1)};d.prototype.Aa=function(y,F){F=void 0===F?{}:F;this.B?this.qa(): -this.X();this.g.Aa(y,F);this.B=this.K=!1};d.prototype.ya=function(y,F,L){L=void 0===L?{}:L;this.B?this.qa():this.X();this.g.ya(y,F,L);this.B=this.K=!1};d.prototype.qa=function(){0<=this.j?this.X():this.df()};d.prototype.df=function(){this.za=null;var y=this.G*this.pe;if(y+1>this.Da.length){var F=5*this.pe;y+1>this.Da.length+F&&(F+=y+1);for(var L=0;L=L.min&&da<=L.max){w=!1;break}}if(w)Q=y;else for(w=0;w=da;oa&&(da=y.codePointAt(w));L.Ba[da]?(R||(""!==Q&&(this.g.text(Q,F),Q=""),R=!0),Q+=L.Ba[da],oa&&w++):(R&&(R=Object.assign({},F),R.DISABLE_ESCAPING=!0,R.NO_NORMALIZATION=!0,this.g.text(Q,R),Q="",R=!1),Q+=Y)}R?(y=Object.assign({},F),y.DISABLE_ESCAPING=!0,y.NO_NORMALIZATION=!0,this.g.text(Q,y)):this.g.text(Q,F)}};Ka(r,ze);r.prototype.pa=function(y,F,L,Q){Q=void 0===Q? -{}:Q;this.flush();this.B.push(y.aa());this.g.pa(y,F,L,Q)};r.prototype.wa=function(){this.flush();this.B.pop();this.g.wa()};r.prototype.text=function(y,F){F=void 0===F?{}:F;0<=this.ba.indexOf(0===this.B.length?null:this.B[this.B.length-1])?F.DISABLE_ESCAPING?(this.flush(),this.g.text(y,F)):(this.j+=y,this.G=F):this.g.text(y,F)};r.prototype.Aa=function(y,F){F=void 0===F?{}:F;this.flush();this.g.Aa(y,F)};r.prototype.ya=function(y,F,L){L=void 0===L?{}:L;this.flush();this.g.ya(y,F,L)};r.prototype.flush= -function(){if(""!==this.j){for(var y=this.K?this.j.normalize(this.K):this.j,F=y.length,L=0;LL&&this.X(y.substring(L,Q));Q"),this.B=!1);this.df.includes(y.local.toLowerCase())&& -K(y)||this.g.write("")};E.prototype.text=function(y,F){F=void 0===F?{}:F;0"))throw new I("A processing instruction in HTML must not contain a > character","SERE0015");this.g.write("")};E.prototype.X=function(){this.hb||(this.Qa["byte-order-mark"]&& -"UTF-8"===this.Qa.encoding&&this.g.write("\ufeff"),this.hb=!0)};E.prototype.re=function(y,F){var L=this;if(F){var Q=this;F.forEach(function(R,w){y.ud("")&&L.Mi(y,w,R.value)?Q.g.write(" "+w.toString()):Q.pe(w,R)})}};E.prototype.Da=function(y){var F=this.Qa["doctype-system"]||null,L=this.Qa["doctype-public"]||null;null===F&&null===L?K(y)&&"html"===y.local.toLowerCase()&&(this.qa&&this.g.write("\n"),this.g.write("\n"),this.za=!0):null===F?(y=K(y)&&"html"===y.local.toLowerCase()? -y.toString():"html",this.qa&&this.g.write("\n"),this.g.write("\n'),this.za=!0):c.prototype.Da.call(this,"html"===y.local.toLowerCase()?y:ha.QName.fromParts("","","html"))};E.prototype.Mi=function(y,F,L){F=F.local.toLowerCase();y=y.local.toLowerCase();return F===L.toLowerCase()&&(this.Vb[y]&&this.Vb[y].includes(F)||this.Vb["*"].includes(F))};Ka(u,d);u.prototype.pa=function(y,F,L,Q){Q=void 0===Q?{}:Q;this.Vb=this.re.includes(y.local.toLowerCase())&& -K(y);this.K||this.B?this.qa():this.X();this.G++;0>this.j&&this.lg.includes(y.local.toLowerCase())&&K(y)&&(this.j=this.G);this.Ua&&-1===this.j&&0<=this.Ua.indexOf(y.aa())&&(this.j=this.G);this.g.pa(y,F,L,Q);this.K=this.ba=!0;this.Vb=this.ua=this.B=!1;this.hd.push(y)};u.prototype.wa=function(){var y=this.hd.pop();this.G--;this.B&&!this.ba?this.qa():this.X();this.g.wa();this.ba=!1;this.B=!0;this.K=!1;this.ua=this.re.includes(y.local.toLowerCase())&&K(y);this.G===this.j-1&&(this.j=-1)};u.prototype.text= -function(y,F){F=void 0===F?{}:F;d.prototype.text.call(this,y,F);0>this.j&&""===sb.trim(y)||(this.ua=!1)};u.prototype.Aa=function(y,F){F=void 0===F?{}:F;d.prototype.Aa.call(this,y,F);this.ua=!1};u.prototype.ya=function(y,F,L){L=void 0===L?{}:L;d.prototype.ya.call(this,y,F,L);this.ua=!1};u.prototype.qa=function(){0<=this.j||this.Vb||this.ua?this.X():this.df()};Ka(p,ze);p.prototype.pa=function(y,F,L,Q){Q=void 0===Q?{}:Q;for(var R in L)X(L[R])&&delete L[R];X(y.uri)&&(""!==y.prefix&&(y=ha.QName.fromParts("", -y.uri,y.local)),L[""]=y.uri);F.forEach(function(w,Y){X(Y.uri)&&(L[Y.prefix]=Y.uri)});ze.prototype.pa.call(this,y,F,L,Q)};Ka(k,c);k.prototype.wa=function(){this.K.pop();var y=this.Ua.pop();this.B&&this.ua.includes(y.local)&&K(y)?(this.g.write(" />"),this.B=!1):(this.B&&c.prototype.ba.call(this),this.g.write(""))};k.prototype.text=function(y,F){F=void 0===F?{}:F;(this.G||""!==sb.trim(y))&&c.prototype.text.call(this,y,F)};k.prototype.Da=function(y){var F=this.Qa["doctype-system"]|| -null;null===F&&K(y)&&"html"===y.local.toLowerCase()?(this.qa&&this.g.write("\n"),this.g.write("\n"),this.za=!0):null!==F&&c.prototype.Da.call(this,y)};Ka(e,ze);e.prototype.pa=function(y,F,L,Q){var R=!1;F.forEach(function(Y,da){return R=R||ja(y,da)});if(R){var w=new Ne;F.forEach(function(Y,da){if(ja(y,da)){var oa=Nd.escape(Y.value.normalize("NFC"),function(P){return 32>P||126=R||127<=R&&159>=R||!q(R,F)?L+("\\u"+("0000"+R.toString(16).toUpperCase()).slice(-4)):L+w}}return L};n.prototype.ua=function(y){var F='"';if(this.Ba){for(var L=this.Ba,Q="",R=!1,w=!0, -Y=0;Y=L.min&&da<=L.max){w=!1;break}}if(w)Q=y;else for(w=0;w=da;oa&&(da=y.codePointAt(w));L.Ba[da]?(R||(""!==Q&&(F+=this.Da(Q),Q=""),R=!0),Q+=L.Ba[da],oa&&w++):(R&&(F+=Q,Q="",R=!1),Q+=Y)}F=R?F+Q:F+this.Da(Q)}else F+=this.Da(y);return F+'"'};n.prototype.Vb=function(y){function F(R){switch(R.length){case 0:Q.g.write("null");break;case 1:L(R[0]);break;default:throw new I("Cannot output a sequence of length "+ -R.length+" as JSON","SERE0023");}}function L(R){var w=wb.XS;if(wb.sa(R))if(w.boolean.matches(R))Q.g.write(R.toString());else if(w.numeric.matches(R)){R=R.toString();if(["NaN","INF","-INF"].includes(R))throw new I("Cannot output INF or NaN as JSON","SERE0020");Q.g.write(R)}else Q.g.write(Q.ua(R.toString()));else if(Kc.V(R)){w=Object.assign({},Q.G);w.method=w["json-node-output-method"]||"xml";w["item-separator"]=null;w["omit-xml-declaration"]=!0;w.encoding="UTF-8";var Y=new a;na(R,w,Y,Q.qa);Q.g.write(Q.ua(Y.toString()))}else if(Nd.isArray(R))if(R= -R.value,0===R.length)Q.g.write("[]");else{Q.ba("[");F(R[0]);for(w=1;wP.max&&(P.max=m))}else Q("invalid child of use-character-maps: "+Kc.ea(qa).toString())}); -55296Q&&(Q=da);55296t};return function(t,q,C){var K=t[0];q.fixed.ma.Gb(C,"i")&&(K=K.filter(function(Z){return!re.Dc(Z)}));t=re.$b(C,t[1],"compare",q);var X=re.Hi(t),ja=f.untypedAtomic.matches,ra=f.numeric.matches,O=f.double.matches,fa=f.float.matches,ca=f.anyURI.matches,z=f.string.matches;t=f.duration.matches;var A=f.yearMonthDuration.matches, -D=f.dayTimeDuration.matches;q=f.QName.matches;var U=f.double.R,M=f.float.R,V=f.string.R;K=K.mapOneToOne(function(Z){return ja(Z)?U(Z):Z});C=K.next();if(null===C)return wc;q(C)&&c(d+"() not defined over QName");!t(C)||A(C)||D(C)||c(d+"() not defined over mixed durations");return xc(n(K,C,function(Z,ea){(z(Z)&&ra(ea)||z(ea)&&ra(Z))&&c("Cannot compare string with numeric");(A(Z)&&!A(ea)||D(Z)&&!D(ea))&&c("Cannot compare mixed durations");if(re.Dc(ea))return O(Z)?U(ea):ea;if(re.Dc(Z))return O(ea)?U(Z): -Z;O(ea)&&!z(Z)?Z=U(Z):O(Z)&&!z(ea)?ea=U(ea):fa(ea)&&!z(Z)?Z=M(Z):fa(Z)&&!z(ea)&&(ea=M(ea));ca(ea)&&z(Z)?ea=V(ea):ca(Z)&&z(ea)&&(Z=V(Z));try{return l(X(Z,ea))?Z:ea}catch(ma){throw ma instanceof I&&"XPTY0004"===ma.code&&(ma.code="FORG0006"),ma;}}))}}function e(d,c){d=d[0].next();if(null===d)return wc;if("timezone"===c)return null===d.Ha?wc:xc(f.dayTimeDuration.yh(d.Ha));if("seconds"===c)return c=d.proxy(),Ec(c.getUTCSeconds()+c.getUTCMilliseconds()/1E3);d=d.proxy()[c]();"getUTCMonth"===c&&d++;return Cc(d)} -function k(d,c){d=d[0].next();return null===d?wc:5!==c?Cc(Ub(d)[c]*Vb(d)):Ec(Ub(d)[c]*Vb(d))}function p(d,c,l){function t(K,X){return xc(wb.codes[c].fromDate(K,X))}var q=d[0].next();if(!q)return wc;l=l.fixed.Lb.getTimezoneOffset();if(d[1]){var C=d[1].next();d=null!==C?C.Ra/6E4:null;if(null!==d&&(-840>d||840ja&&(ja=c.la.createTextNode(K[0].substring(ja,O)),X.appendChild(ja));ja=c.la.createElementNS(q,"group");ja.setAttribute("nr",ra);ja.appendChild(c.la.createTextNode(K[ra]));X.appendChild(ja);ja=O+K[ra].length}jac||126C?t=!0:(X=a(X.actor,"arg").length,C===X&&(t=!0)))});t||(d=f.QName.fromEQName(q),null==E&&(E=gb.Gf("functions")),t=(c=E[d.uri])&&c[d.local]?"concat"===d.local&&d.uri===Ic.Pa&&(-1===C||2<=C)?!0:0<=C?0<=c[d.local].indexOf(C):!0:!1);return Fc(t)},"function-lookup":function(d, -c,l){var t=d[0].next();d=d[1].next().toNumber();var q=te.find("SaxonJS").XPath,C=c.ca(!0);C.eb=!0;q=q.getFnSignature(t,d,C);if(!q)return wc;c=q.isUserFunction?new Ld.Wf(q,c):t.uri===Ic.sc?new Ld.Tf(q,t,l):new Ld.Qe(q,t,d,l,c);return xc(c)},"function-name":function(d){d=d[0].next();if(!(d instanceof Ld.XdmFunction))throw new I("Input to function-name() is not an XdmFunction ","XXXX9999");return d.oc()&&d.oc().uri!==Ic.Pg?xc(d.oc()):wc},"generate-id":function(d){d=d[0].next();return Bc(d?B(d):"")}, -"has-children":function(d){return Fc(null!==H.La(d[0].next()).next())},head:function(d){return xc(d[0].next())},"hours-from-dateTime":function(d){return e(d,"getUTCHours")},"hours-from-duration":function(d){return k(d,3)},"hours-from-time":function(d){return e(d,"getUTCHours")},id:function(d,c){var l="";d[0].forEachItem(function(K){l+=K.value.trim()+" "});c=d[1]?d[1].next():Kc.Ac(Od(c));if(!Kc.V(c))throw new I("Context item is not a node for fn:id()","XPTY0004");9!==c.nodeType&&(c=Kc.Ac(c));var t; -d=[];var q=l.trim().split(/\s+/);if(9===c.nodeType){q=Aa(q);for(var C=q.next();!C.done;C=q.next())(t=c.getElementById(C.value))&&d.push(t);return Kc.wd(sc(d))}if(11===c.nodeType){for(c=H.mf(c);null!==(t=c.next());)1===t.nodeType&&(q.includes(t.getAttributeNS(Ic.xml,"id"))||q.includes(t.getAttribute("id")))&&d.push(t);return Kc.wd(sc(d))}return wc},idref:function(){return wc},"implicit-timezone":function(d,c){return xc(f.dayTimeDuration.yh(-c.fixed.Lb.getTimezoneOffset()))},"index-of":function(d,c, -l){var t=Ac(d[0]),q=d[1].next();d=re.$b(l,d[2],"equals",c);var C=re.Qi(d);return t.mapOneToOne(function(K){try{return C(K,q)?f.integer.fromNumber(t.position):null}catch(X){return null}})},innermost:function(d,c,l){function t(){var C,K,X;return Ya(t,function(ja){1==ja.g&&(C=null);if(null==(K=q.next()))return C?ja=Qa(ja,C,0):(ja.g=0,ja=void 0),ja;if(C)if(H.ld(K).some(function(ra){return ra===C}))C=K,ja.g=2;else return X=C,C=K,Qa(ja,X,2);else C=K,ja.g=2})}var q=c.fixed.ma.Gb(l,"p")?d[0]:Kc.wd(d[0]); -jb.Sa("innermost of "+jb.showValue(q));return new uc(t())},"in-scope-prefixes":function(d){d=d[0].next();return sc(Kc.Wc(d).map(function(c){return f.string.fromString(c.prefix)}))},"insert-before":function(d){var c=d[1].next().value,l=d[2],t=Ac(d[0]);return 1>c?yc([l,t]):c>t.last()?yc([t,l]):t.mapOneToMany(function(q){return t.position===c?yc([d[2],xc(q)]):xc(q)})},"iri-to-uri":function(d){return Bc(Nd.escape(v(d[0]),function(c,l){return 32>=c||126"{}|\\^`]/.test(l)}))},"json-doc":function(d, -c,l){l=xe.$e(d,c,l);if(!l)return wc;l=xe.Yi(l,c);d=d[1]?d[1].next():null;return xc(we.Fe(l,d,c))},"json-to-xml":function(d,c,l){var t=c.fixed.ma,q=d[0].next();if(null===q)return wc;d=d[1]?d[1].next():null;q=we.Oj(q.toString(),d,c);d=c.la.createDocumentFragment();d.appendChild(q);d._saxonBaseUri=t.Na(l,c);return xc(d)},key:function(d,c,l){function t(Q){Q=D?f.string.R(Q):Q;return A.containsKey(Q)?(Q=sc(A.get(Q)),fa===ca?Q:Q.filter(function(R){return null!==H.$a(R).filter(function(w){return w===ca}).next()})): -wc}function q(Q){return{visibility:"PRIVATE",ab:Q,Uh:X,actor:Q,cf:Q.binds.split(" ").map(function(R){return parseInt(R,10)})}}var C=c.fixed.ma,K=b(d[0],c,l,"XTDE1260"),X=C.ue(l,c),ja=X.keys[K];if(!ja)throw new I("Unknown key "+K,"XTDE1260");var ra=ja.Mg,O=C.Gb(ja.Wd[0],"c"),fa;if(d[2]){var ca=d[2].next();Kc.V(ca)&&(fa=Kc.Ac(ca))}else{var z=Od(c);Kc.V(z)&&(fa=ca=Kc.Ac(z))}if(!fa||9!==fa.nodeType&&11!==fa.nodeType)throw new I("No containing document for key()","XTDE1270",l);"_saxonIndexes"in fa||(fa._saxonIndexes= -{},fa._saxonIndexesBC={});l=fa._saxonIndexes;var A=l[ra];if("under construction"===A)throw new I("Definition of key "+K+" is circular","XTDE0640");var D=!1;if(A)D=fa._saxonIndexesBC[ra];else{K=re.pf(ja.Wd[0],null,c);A=re.Nf(K,O);l[ra]="under construction";K=function(Q){return yc([H.self(Q),H.rb(Q),H.Ja(Q)])};z=function(Q){return yc([H.self(Q),H.Ja(Q)])};for(var U=function(Q){return yc([H.self(Q),H.rb(Q)])},M={},V=0;VA.get(Q).indexOf(R)&& -(A.get(Q).push(R),1d.length+1&&c.substring(0,d.length)===d&&"-"===c.charAt(d.length))},last:function(d,c){Qd(c,"XPDY0002","last()");return Cc(c.focus.last())},"load-xquery-module":function(){throw new I("No XQuery processor available","FOQM0006");},"local-name":function(d){d=Kc.ea(d[0].next());return Bc(d?d.local:"")},"local-name-from-QName":function(d){d=d[0].next();return null=== -d?wc:xc(wb.type.NCName.fromString(d.local))},"lower-case":function(d){return Bc(v(d[0]).toLowerCase())},matches:function(d){var c=v(d[0]),l=d[1].next().toString();d=sb.Og(d[2]?d[2].next().toString():"");l=sb.Ie(l,d,c);return Fc(0<=c.search(l))},max:g("max"),min:g("min"),"minutes-from-dateTime":function(d){return e(d,"getUTCMinutes")},"minutes-from-duration":function(d){return k(d,4)},"minutes-from-time":function(d){return e(d,"getUTCMinutes")},"month-from-date":function(d){return e(d,"getUTCMonth")}, -"month-from-dateTime":function(d){return e(d,"getUTCMonth")},"months-from-duration":function(d){return k(d,1)},name:function(d){d=Kc.ea(d[0].next());return Bc(d?d.toString():"")},"namespace-uri":function(d){d=Kc.ea(d[0].next());return xc(f.anyURI.fromString(d?d.uri:""))},"namespace-uri-for-prefix":function(d){var c=v(d[0]);d=d[1].next();c="xml"===c?Ic.xml:d.lookupNamespaceURI(""===c?null:c);return null!==c?xc(f.anyURI.fromString(c)):wc},"namespace-uri-from-QName":function(d){d=d[0].next();return null=== -d?wc:xc(f.anyURI.fromString(d.uri))},nilled:function(d){return(d=d[0].next())&&1===d.nodeType?Fc(!1):wc},"node-name":function(d){return xc(Kc.ea(d[0].next()))},"normalize-space":function(d){d=v(d[0]);return Bc(mb(d))},"normalize-unicode":function(d){if(String.prototype.normalize){var c=v(d[0]);d=d[1]?d[1].next().toString().toUpperCase().trim():"NFC";if(["NFC","NFD","NFKC","NFKD"].includes(d))return Bc(c.normalize(d));if(""===d)return Bc(c)}throw new I("normalize-unicode(): not supported on this Javascript platform", -"FOCH0003");},not:function(d,c){return Fc(!c.fixed.ma.Od(d[0]))},number:function(d){return xc(wb.XS.numeric.De(d[0].next()))},"one-or-more":function(d){d=nc(d[0]);if(null===d.xa())throw new I("Required length >= 1, actual length zero","FORG0004");return d},outermost:function(d,c,l){c=c.fixed.ma.Gb(l,"p");d=d[0];c||(d=Kc.wd(d));var t=null;return d.filter(function(q){if(null===t)return t=q,!0;if(H.ld(q).some(function(C){return C===t}))return!1;t=q;return!0})},"parse-ietf-date":function(d){return d[0].mapOneToOne(function(c){function l(fa){return 1=== -fa.length?"0"+fa:fa}function t(){throw new I("Invalid IETF date/time "+c.toString(),"FORG0010");}var q=c.toString().trim().toLowerCase();q=q.replace(/^(monday|tuesday|wednesday|thursday|friday|saturday|sunday|mon|tue|wed|thu|fri|sat|sun),?\s+/,"");if(/^[a-z]/.test(q)){var C=/^([a-z]{3})(?:\s*-\s*|\s+)(\d\d\d?\d?)\s+([\d:.]+)\s*([a-z]+|[+\-]\d\d?:?(?:\d\d)?(?:\s*\(\s*[a-z]+\s*\))?)?\s+(\d+)$/;q=C.exec(q);if(null!==q){var K=q[1];var X=q[2];var ja=q[3];var ra=q[4];var O=q[5]}else t()}else C=/^(\d+)(?:\s*-\s*|\s+)([a-z]{3})(?:\s*-\s*|\s+)(\d\d\d?\d?)\s+([\d:.]+)\s*([a-z]+|[+\-]\d\d?:?(?:\d\d)?(?:\s*\(\s*[a-z]+\s*\))?)?$/, -q=C.exec(q),null!==q?(X=q[1],K=q[2],O=q[3],ja=q[4],ra=q[5]):t();2===O.length&&(O="19"+O);K="jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec".indexOf(K||"*");0>K&&t();q={ut:"Z",utc:"Z",gmt:"Z",est:"-05:00",edt:"-04:00",cst:"-06:00",cdt:"-05:00",mst:"-07:00",mdt:"-06:00",pst:"-08:00",pdt:"-07:00"};/^[0-9]:/.test(ja)&&(ja="0"+ja);5===ja.length&&(ja+=":00");ra&&(ra=/([a-z]+)|([+\-]\d\d?:?(?:\d\d)?)(?:\s*\(\s*([a-z]+)\s*\))?$/.exec(ra),(!ra[3]||ra[3]in q)&&(!ra[1]||ra[1]in q)||t(),ra=ra[1]?ra[1]:ra[2], -/^[+\-][0-9]((:|$)|[0-9]{2}$)/.test(ra)&&(ra=ra.charAt(0)+"0"+ra.substring(1)),ra in q?ra=q[ra]:3===ra.length?ra+=":00":4===ra.length?ra+="00":5===ra.length&&(ra=ra.substring(0,3)+":"+ra.substring(3)));X=O+"-"+l((K/4+1).toString())+"-"+l(X)+"T"+ja+(ra||"Z");try{return f.dateTime.fromString(X)}catch(fa){throw new I("''"+c.toString()+"'' is not a valid IETF date","FORG0010");}})},"parse-json":function(d,c){var l=d[0].next();if(null===l)return wc;d=d[1]?d[1].next():null;return xc(we.Fe(l.toString(), -d,c))},"parse-xml":function(d,c,l){d=d[0].next();if(null===d)return wc;var t=c.fixed.ma;try{var q=gb.parseXmlFromString(d.toString());q._saxonBaseUri=t.Na(l,c);return xc(q)}catch(C){throw new I(C.message,"FODC0006");}},"parse-xml-fragment":function(d,c,l){var t=c.fixed.ma;return d[0].mapOneToOne(function(q){var C=/^<\?xml(?:\s+version\s*=\s*(['"])1.[0-9]+['"])?\s+encoding\s*=\s*(['"][A-Za-z](?:[A-Za-z0-9._\-])*)['"]\s*\?>/;q=q.toString();if(/^<\?xml/.test(q)&&!C.test(q))throw new I("Invalid XML header for a text declaration", -"FODC0006");q=q.replace(C,"");try{var K=gb.parseXmlFromString(""+q+"")}catch(ja){throw new I(ja.message,"FODC0006");}var X=c.la.createDocumentFragment();H.La(K.documentElement).forEachItem(function(ja){X.appendChild(ja)});X._saxonBaseUri=t.Na(l,c);return X})},path:function(d){return d[0].mapOneToOne(function(c){function l(t){return H.ad(t).filter(function(q){return t.nodeType===q.nodeType})}return f.string.fromString(function(t){if([9,11].includes(t.nodeType))return"/";var q="",C=t;for(t={};C;){var K= -Kc.Za(C);if(!K)return[9,11].includes(C.nodeType)?q:"Q{http://www.w3.org/2005/xpath-functions}root()"+q;switch(C.nodeType){case 9:case 11:return q;case 1:t.Oe=Kc.ea(C);q="/"+t.Oe.aa()+"["+(1+l(C).filter(function(X){return function(ja){return Kc.ea(ja).equals(X.Oe)}}(t)).count())+"]"+q;break;case 3:case 4:q="/text()["+(1+l(C).count())+"]";break;case 8:q="/comment()["+(1+l(C).count())+"]";break;case 7:q="/processing-instruction("+C.target+")["+(1+l(C).filter(function(X){return C.target===X.target}).count())+ -"]";break;case 2:q="/@"+(0>C.name.indexOf(":")?C.name:Kc.ea(C).aa());break;default:q="/namespace::"+(""!==C.prefix?C.prefix:"*[Q{"+Ic.Pa+'}local-name()=""]')}C=K;t={Oe:t.Oe}}}(c))})},"prefix-from-QName":function(d){return d[0].mapOneToOne(function(c){return""===c.prefix?null:f.Rg.fromString(c.prefix)})},position:function(d,c){Qd(c,"XPDY0002","position()");return Cc(c.focus.position)},QName:function(d){var c=d[1].next().value,l=c.split(":"),t=2===l.length?l[0]:"";d=v(d[0]);if(""!==t&&""===d)throw new I("Prefix but no URI for QName()", -"FOCA0002");if(2===l.length&&""===t||""!==t&&!sb.Nb(t))throw new I(c+" not valid for QName()","FOCA0002");c=2===l.length?l[1]:l[0];if(!sb.Nb(c))throw new I(c+" not valid local name for QName()","FOCA0002");return xc(f.QName.fromParts(t,d,c))},"random-number-generator":function(d,c){d=new Mc;d.inSituPut(f.string.fromString("number"),[f.double.fromNumber(Math.random())]);var l=f.QName.fromParts("fn",Ic.Pa,"random-number-generator"),t=te.find("SaxonJS").XPath,q=t.getFnSignature(l,0,c);l=new Ld.Qe(q, -l,0,{},c);d.inSituPut(f.string.fromString("next"),[l]);l=f.QName.fromParts("saxon",Ic.zb,"permute");q=c.ca();q.eb=!0;t=t.getFnSignature(l,1,q);c=new Ld.Qe(t,l,1,{},c);d.inSituPut(f.string.fromString("permute"),[c]);return xc(d)},"regex-group":function(d,c){d=d[0].next().toNumber();try{return Bc(c.Ob[d]||"")}catch(l){return Bc("")}},remove:function(d){var c=d[1].next().toNumber(),l=Ac(d[0]);return l.filter(function(){return l.position!==c})},replace:function(d){var c=v(d[0]),l=sb.Og(d[3]?d[3].next().toString(): -""),t=0,q=sb.Ie(d[1].next().toString(),l+"g",null,function(C){t=C});if(q.test(""))throw new I("Regular expression matches zero-length string","FORX0003");d=sb.Ji(d[2].next().toString(),l,t);return Bc(c.replace(q,d))},"resolve-QName":function(d){var c=d[1].next();return d[0].mapOneToOne(function(l){try{return Kc.Uj(c,l.toString(),!0)}catch(t){throw t instanceof I&&"FORG0001"===t.code&&(t.code=sb.Lh(l)?"FONS0004":"FOCA0002"),t;}})},"resolve-uri":function(d,c,l){var t=c.fixed.ma;if(d[1]){var q=d[1].next(); -c=q?q.toString():t.Na(l,c)}else c=t.Na(l,c);d=d[0].next();if(null===d)return wc;d=d.toString();l=Kc.xd(d);if(null!==c&&(c=c.replace(/^file:\/(?!\/)/,"file:///"),!gb.vd()&&/#/.test(c)))throw new I("Base URI "+c+" contains a fragment identifier","FORG0002");if(!l&&null!==c&&!Kc.xd(c))throw new I("resolve-uri: invalid URI (base="+c+", relative="+d+")","FORG0002");d=l?d:gb.Qb(d,c).toString();return xc(f.anyURI.fromString(d))},reverse:function(d){return sc(d[0].expand().slice().reverse())},root:function(d){return d[0].mapOneToMany(function(c){return H.$a(c)}).filter(function(c){return!Kc.Za(c)})}, -round:function(d){return d[0].mapOneToOne(function(c){return c.round(d[1]?Math.min(d[1].next().value,1E4):0)})},"round-half-to-even":function(d){return d[0].mapOneToOne(function(c){return c.Hf(d[1]?Math.min(d[1].next().value,1E4):0)})},"seconds-from-dateTime":function(d){return e(d,"seconds")},"seconds-from-duration":function(d){return k(d,5)},"seconds-from-time":function(d){return e(d,"seconds")},serialize:function(d,c){function l(X){X.method="xml";X.indent=!1;X["omit-xml-declaration"]=!0}var t= -new Re.StringWriter,q={};if(d[1]){var C=d[1].next();if(null===C)l(q);else if(Kc.V(C)){if(!Kc.Jh(C))throw new I("Second argument supplied to serialize() is wrong kind of node","XPTY0004");Re.parseParamDoc(C,q,"XPTY0004")}else{if(!(C instanceof Mc))throw new I("Second argument supplied to serialize() does not match required type","XPTY0004");var K=function(X,ja,ra,O,fa){fa=void 0===fa?!1:fa;var ca=wb.XS.string.fromString(X);if(C.containsKey(ca)){var z=C.get(ca);if(0ra.max&&(ra.max=O);ra.Ba[O]=ja[fa]}q[X]=ra}})("use-character-maps")}}else l(q);Re.serialize(d[0].expand(),q,t,c);return Bc(t.toString())},snapshot:function(d,c,l){return d[0].mapOneToOne(function(t){function q(z){if(0< -z.length){var A=z.pop();Ke.Ig(A,c,"cm",function(){H.Ja(A).forEachItem(function(D){return K.append(D)});0=n.length){for(;E=g.length){for(;u=e(n[u],g[E])?k(n[u++]):k(g[E++]);return p}function h(n,g){return g.fixed.ma.Db(n,"sortKey").map(function(e){return re.ak(e,g)})}function v(n){return function(g,e){for(var k=0;kk){u={items:[r.item],keys:r.keys,groups:{}};for(k=0;k 1");else return!0}var x=m.next();if(null===x)return!1;if(da.V(x))return!0;if(wb.sa(x)){if("AB"===x.code)return N()&&x.toBoolean();if(x.isNumeric())return x=x.toNumber(), -N()&&!isNaN(x)&&0!==x;if(ub(x))return N()&&0!==x.toString().length;G("type "+wb.zd(x.code))}else ma(x)?G("maps"):ea(x)?G("arrays"):na(x)?G("functions"):G("value "+jb.showValue(x))}function k(m,G){var N=Wb["i+i"],x=P.integer.fromNumber(1);return new kc(m,function(T){T=N(T,x);return 0=sa&&ya<=za});return Fc(T)}},is:function(m){var G=f(m,function(N,x){return P.boolean.fromBoolean(da.isSameNode(N,x))});return function(N){return xc(G(N))}},isLast:function(m){var G="1"===m.test;return function(N){return Fc(N.focus.position===N.focus.last()===G)}}, -iterate:M,javaCall:function(m){var G=P.QName.fromEQName(m.name),N=(m.C||[]).map(C);return function(x){var T=N.map(function(S){return S(x)});return qa(G.uri,G.local,T,x,m)}},lastOf:function(m){var G=t(m);return function(N){var x=nc(G(N));return x.filter(function(){return null===x.xa()})}},let:function(m){var G=t(m),N=q(m),x=parseInt(m.slot,10);return function(T){var S=T.ta;T.ta="variable";var aa=G(T).expand();T.ta=S;T.ra[x]=aa;return N(T)}},literal:b,lookup:function(m){var G=t(m),N=q(m);return function(x){function T(J){za= -za.concat(ya[J.toString()])}function S(J){za=za.concat(ya.get(J))}function aa(J){return function(W){if(!P.integer.matches(W))throw new I("Array lookup key must be of type xs:integer; supplied value is "+jb.showValue(W),"XPTY0004",m);W=W.toNumber();if(1>W||W>J.length)throw new I("Array index ("+W+") out of bounds (1 to "+J.length+")","FOAY0001",m);za=za.concat(J[W-1])}}var sa=G(x),za=[],ya;x=N(x).expand();var Pa=m.tuple;if(null!=Pa)for(var Ta=Pa.split(/\s+/),Va=Aa(x),fb=Va.next();!fb.done;fb=Va.next())if(fb= -fb.value,-1===Ta.indexOf(fb.toString()))throw new I("Tuple lookup key must be one of "+Pa+". Supplied key is "+fb.toString(),"XPTY0004",m);for(;null!==(ya=sa.next());)if(Nd.isArray(ya))Ta=aa(ya.value),x.forEach(Ta);else if(Nd.isMap(ya))x.forEach(S);else if(null!=Pa&&Nd.Mh(ya))x.forEach(T);else throw new I("The source for a lookup operator (?) must be of type array() or map(); supplied value is "+jb.showValue(ya),"XPTY0004",m);return sc(za)}},lookupAll:function(m){var G=t(m);return function(N){function x(sa){S= -S.concat(sa)}function T(sa){S=S.concat(aa.get(sa))}N=G(N);for(var S=[],aa;null!==(aa=N.next());)if(Nd.isArray(aa))aa.value.forEach(x);else if(Nd.isMap(aa))aa.keys().forEach(T);else throw new I("The source for a lookup operator ('?') must be of type array() or map(); supplied value is "+jb.showValue(aa),"XPTY0004",m);return sc(S)}},lookupTuple:function(m){var G=t(m),N=m.key;return function(x){x=G(x);for(var T=[],S;null!==(S=x.next());)if(null!=N&&Nd.Mh(S))T=T.concat(S[N]);else throw new I("The source for a lookupTuple operator (?) must be of type tuple(); supplied value is "+ -jb.showValue(S),"XPTY0004",m);return sc(T)}},map:function(m){var G=(m.C||[]).map(C);return function(N){var x=new Mc,T=null;G.forEach(function(S){if(null===T)T=S(N).next();else{if(x.containsKey(T))throw new I("Duplicate map constructor entries for key:"+jb.showValue(T),"XQDY0137",m);S=S(N).expand();x.inSituPut(T,S);T=null}});return xc(x)}},merge:function(m){return function(G){return Ve.Fj(m,G)}},mergeAdj:function(m){var G=t(m);return function(N){for(var x=[],T=G(N),S=!1,aa;null!==(aa=T.next());){var sa= -da.V(aa)&&(3===aa.nodeType||4===aa.nodeType);sa&&""===aa.nodeValue||(S&&sa?(sa=da.Tc(N.la),x.push(sa.createTextNode(x.pop().nodeValue+aa.nodeValue))):(S=sa,x.push(aa)))}return sc(x)}},message:function(m){var G=C(K(m,"terminate")),N=C(K(m,"error"));return function(x){var T=x.ta;x.ta="variable";var S=G(x).next(),aa=N(x).next().toString();try{aa=fa(m,aa,!0).aa()}catch(Pa){aa="Q{http://www.w3.org/2005/xqt-errors}XTMM9000"}try{var sa=v(S.toString())}catch(Pa){throw new I("The terminate attribute of xsl:message must be yes|no|true|false|1|0", -"XTDE0030",m);}S=Fe(x);var za=new He(S);try{var ya=Ke.Rc(za);ya.Ga();Ke.push(m.C[0],x,ya);ya.Ca()}catch(Pa){za.append(wb.XS.string.fromString("xsl:message evaluation at "+jb.location(m)+" failed: "+Pa))}ya=sc(S.Rb).next();x.fixed.options.mg||(x.fixed.options.mg=gb.Fh());try{S=aa,x.Ec[S]||(x.Ec[S]=0),x.Ec[S]++,x.fixed.options.mg(ya,aa)}catch(Pa){}if(sa)throw jb.Sa(x.getStackTrace()),x=new I("Terminated with "+ya,aa,m),x.errorObject=ya,x;x.ta=T;return wc}},minus:function(m){var G=t(m);return function(N){return G(N).mapOneToOne(function(x){return x.Bf()})}}, -namespace:function(m){var G=t(m),N=q(m);return function(x){var T=G(x).next().toString();x=N(x).next().toString();if(""!==T&&!sb.Nb(T))throw new I("Prefix "+T+" is not an NCName","XTDE0920",m);if(""===x)throw new I("Namespace is zero-length","XTDE0930",m);if("xmlns"===T)throw new I("Disallowed prefix xmlns","XTDE0920",m);if("http://www.w3.org/2000/xmlns/"===x)throw new I("Disallowed namespace "+x,"XTDE0905",m);if(!E(x))throw new I("Invalid namespace "+x,"XTDE0905",m);if("xml"===T!==(x===Ic.xml))throw new I("The xml namespace prefix and uri can only be used together", -"XTDE0925",m);return xc(new Lc(T,x))}},nextIteration:M,nextMatch:M,nodeNum:function(m){return function(G){return Qe.Kj(m,G)}},"null":function(m){return function(){return xc(m)}},numSeqFmt:function(m){return function(G){return Qe.Lj(m,G)}},onEmpty:b,onNonEmpty:b,or:function(m){var G=t(m),N=q(m);return function(x){return Fc(e(G(x))||e(N(x)))}},origFC:function(m){m.C||(m.C=[]);var G=m.C.map(C);return function(N){if(!m._target){var x=m.pack,T=fa(m,m.name,!1).aa(),S=m.C.length,aa=N.fixed.Ma;Object.keys(aa).forEach(function(ya){ya= -aa[ya];ya.Uh.name===x&&ya.name===T&&ya.actor&&"function"===ya.actor.N&&p(ya.actor,"arg").length===S&&(m._target=ya.id)})}var sa=N.fixed.Ma[m._target],za=G.map(function(ya){return ya(N).expand()});return A(m,sa,za,N)}},param:function(m){var G=m.name,N=parseInt(m.slot,10),x=X(m,"t"),T=C(K(m,"select")),S=C(K(m,"conversion"));return function(aa){var sa=x?aa.Tb:aa.Yc,za=wb.XS.QName.fromEQName(G);if(sa.containsKey(za))sa=sa.get(za),""!==Wc(m.as||"*").$().p&&(sa=R(sa));else if(T&&!X(m,"r"))za=aa.ta,aa.ta= -"xsl:param",sa=T(aa).expand(),aa.ta=za;else throw new I("Required parameter $"+G+" not supplied","XTDE0700",m);jb.assert(Array.isArray(sa));aa.ra[N]=sa;if(S)try{aa.ra[N]=S(aa).expand()}catch(ya){throw new I("Supplied value for parameter $"+G+" could not be converted to required type","XTTE0590",m);}return wc}},partialApply:function(m){for(var G=t(m),N=[],x=[],T=0,S=m.C.length-1,aa=1;aada.tb(N,x))});return function(N){return xc(G(N))}},procInst:M,qName:function(m){var G=P.QName.fromParts(m.pre,m.uri,m.loc);return function(){return xc(G)}},range:function(m){var G=P.integer.fromString(m.from),N=P.integer.fromString(m.to);return function(){return k(G, -N)}},resultDoc:function(m){return function(G){try{if(G.ta)throw new I("Cannot call xsl:result-document while evaluating "+G.ta,"XTDE1480",m);var N=D(m,G),x={},T=function(){},S=K(m,"format");if(S){var aa=U(S,G).next().toString();aa=fa(m,aa,!0).aa();var sa=N.Dg[aa];if(!sa)throw new I("Unknown xsl:output format "+aa,"XTDE1460");for(var za,ya,Pa=Aa(sa.C),Ta=Pa.next();!Ta.done;Ta=Pa.next()){var Va=Ta.value,fb=Va.name;"parameter-document"===fb?za=Va.value:"Q{http://saxon.sf.net/}parameter-document-base-uri"=== -fb?ya=Va.value:x[fb]="use-character-maps"===fb?Re.Of(fb,Va.value,N):Re.Qf(fb,Va.value)}if(za){var J=gb.Qb(za,ya),W=xe.Oc(J,G);Re.parseParamDoc(W.documentElement,x)}}r(m.global,x,N);r(m.local,x,N);var ia=Aa(m.C);for(Ta=ia.next();!Ta.done;Ta=ia.next()){var ka=Ta.value,wa=ka.role.replace(/^Q{\}/,"");if(!["href","format","content","parameter-document"].includes(wa)){"output-version"===wa&&(wa="version");var Ea=U(ka,G).next().toString();Ea="use-character-maps"===wa?Re.Of(wa,Ea,N):Re.Qf(wa,Ea,O(m,!0)); -"undefined"!==typeof Ea&&(x[wa]=Re.Ef(wa,Ea,x[wa]))}}var Ma=K(m,"Q{}parameter-document");if(null!==Ma){var bb=U(Ma,G).next().toString(),hb=gb.Qb(bb,Nd.Na(m,G)),Kb=xe.Oc(hb,G);Re.parseParamDoc(Kb.documentElement,x)}var Hc=G.fixed.mc,Lb=K(m,"href"),vb=null===Lb?"":U(Lb,G).next().toString();var Ab=Hc?gb.newURL(vb,Hc):da.xd(vb)?gb.newURL(vb):vb;var Pb=Ab.toString();if(G.fixed.mc&&Pb===G.fixed.mc.toString()&&1=T--})}},tailCallLoop:b,to:function(m){var G=t(m),N=q(m);return function(x){var T=G(x).next();x=N(x).next();return null===T||null===x||0B?Math.ceil(B):Math.floor(B)};Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(B,n){if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.findIndex called on null or undefined");if("function"!==typeof B)throw new TypeError("predicate must be a function");for(var g=Object(this),e=g.length>>>0,k,p=0;pthis.length?!1:-1!==this.indexOf(B,n)})}var b=Resources,h,v={name:"Browser",init:function(){a()}, -inBrowser:function(){return!0},expose:function(B,n){window[n]=B;try{module.exports=B}catch(g){}},getPromise:function(B,n,g,e){return new Promise(function(k,p){var u=new XMLHttpRequest;if(g||e)g?("text"===g?g="text/plain":"json"===g?g="application/json":"xml"===g&&(g="application/xml"),e&&(g=g+";charset="+e),u.overrideMimeType(g)):console.log("Error: cannot specify encoding without a resource type");u.open("GET",B);for(var E in n)n.hasOwnProperty(E)&&u.setRequestHeader(E,n[E]);u.onload=function(){200<= -this.status&&300>this.status?k({responseText:u.responseText,contentType:u.getResponseHeader("Content-Type")}):p(new I(u.statusText+": "+B,"SXJS0006"))};u.onerror=function(){p(new I("Document fetch failed: "+B,"SXJS0006"))};u.send(null)})},asyncGet:function(B,n,g){var e=new XMLHttpRequest;e.open("GET",B,!0);e.setRequestHeader("Accept","application/xml, text/xml;q=0.9, application/xhtml+xml;q=0.8, */*;q=0.7");0!==g&&(e.timeout=g);e.onload=function(){4===e.readyState&&(200===e.status?n({responseText:e.responseText, -contentType:e.getResponseHeader("Content-Type")}):n(new I(e.statusText+": "+B,"SXJS0006")))};e.ontimeout=function(){n(new I("Document fetch timeout: "+B,"SXJS0008"))};e.onabort=function(){n(new I("Document fetch aborted: "+B,"SXJS0008"))};e.onerror=function(){n(new I("Document fetch failed: "+B,"SXJS0006"))};e.send(null);return e},addDoc:function(B,n,g,e){function k(p){jb.Sa("Add to response pool "+B,2);g[B]=p;n(g)}if(!g[B]||g[B]instanceof I)return v.asyncGet(B,k,e);jb.Sa("Doc already in pool "+B, -2);n(g);return null},addMultipleDocs:function(B,n,g,e){function k(r){0>=--p&&g(r)}for(var p=B.length,u={},E=0;E";Ye[1]="|";Ye[2]="/";Ye[3]="@";Ye[48]="~";Ye[4]="[";Ye[5]="(";Ye[6]="=";Ye[7]=",";Ye[8]="//";Ye[9]="or";Ye[10]="and";Ye[11]=">";Ye[12]="<";Ye[13]=">=";Ye[14]="<=";Ye[15]="+";Ye[16]="-";Ye[299]="-";Ye[17]="*";Ye[18]="div";Ye[19]="mod";Ye[20]="is";Ye[21]="$";Ye[22]="!=";Ye[40]="!";Ye[30]="||";Ye[23]="intersect";Ye[24]="except";Ye[25]="return";Ye[26]="then";Ye[27]="else";Ye[29]="to";Ye[31]="in";Ye[32]="some";Ye[33]="every";Ye[34]="satisfies";Ye[35]="(";Ye[36]=""; -Ye[37]="if(";Ye[38]="<<";Ye[39]=">>";Ye[41]="::";Ye[42]=":*";Ye[44]="#";Ye[45]="instance of";Ye[46]="cast as";Ye[47]="treat as";Ye[50]="eq";Ye[51]="ne";Ye[52]="gt";Ye[54]="ge";Ye[53]="lt";Ye[55]="le";Ye[56]="idiv";Ye[57]="castable as";Ye[58]=":=";Ye[71]="as";Ye[75]=":";Ye[76]="=>";Ye[79]="otherwise";Ye[80]="andAlso";Ye[81]="orElse";Ye[201]="";Ye[202]="";Ye[203]="]";Ye[204]=")";Ye[205]=".";Ye[206]="..";Ye[207]="*";Ye[208]="";Ye[209]="";Ye[69]="()"; -Ye[211]="for";Ye[70]="<*:local-name>";Ye[213]="?";Ye[59]="{";Ye[60]=" {";Ye[215]="}";Ye[216]="let";Ye[299]="-";function $e(a,b){Ze[a]=b;Ye[b]=a}$e("instance of",45);$e("cast as",46);$e("treat as",47);$e("castable as",57); -// Input 45 -var af={gl:function(){return null}},bf;for(bf in Ic)af[bf.toUpperCase()]=Ic[bf];af.Kk=Ic.sc;af.vi=Ic.gd;function cf(a){a=a.charCodeAt(0);return 65<=a&&90>=a||97<=a&&122>=a}var df=sb.Nb;function ef(a){var b=a.charCodeAt(0);return cf(a)||48<=b&&57>=b}function ff(a,b){return new I(a,void 0===b?"XPST0003":b)}function gf(a){return new I(void 0===a?"Illegal Argument":a,"XPST0003")}; -// Input 46 -function hf(){this.J=this.za=0;this.T=null;this.j=this.te=0;this.K=null;this.X=0;this.B=null;this.G=this.g=0;this.Da=this.lineNumber=1;this.qa=null;this.ba=-1;this.ua=""}function jf(a,b){a.za=b;0===b?(a.ba=-1,a.ua="",a.J=-1):b===kf&&(a.ba=204,a.ua=")",a.J=204)}function lf(a,b){a.za=0;a.j=0;a.K=null;a.X=0;a.g=0;a.B=b;a.lineNumber=0;a.Da=0;a.G=b.length;of(a);a.next()} -hf.prototype.next=function(){this.ba=this.J;this.ua=this.T;this.J=this.j;this.T=this.K;null===this.T&&(this.T="");this.te=this.X;this.lineNumber=this.Da;switch(this.J){case 201:var a=pf(this.T);-1===a||150>=this.ba||213===this.ba||(this.J=a);break;case 207:150>=this.ba||213===this.ba||(this.J=17)}if(215!==this.J&&(a=this.ba,of(this),201===this.J&&this.za!==qf&&21!==a))switch(this.j){case 5:var b=pf(this.T);-1===b||150>=a?(this.J=this.wg(this.T),of(this)):this.J=b;break;case 59:this.za!==rf&&(this.J= -60,of(this));break;case 41:of(this);this.J=36;break;case 44:of(this);this.J=43;break;case 42:of(this);this.J=208;break;case 21:"for"===this.T?this.J=211:"some"===this.T?this.J=32:"every"===this.T?this.J=33:"let"===this.T&&(this.J=216);break;case 201:a=this.T+" "+this.K,b=Ze[a],null!=b&&(this.J=b,this.T=a,of(this))}}; -function of(a){a.ba=a.j;a.ua=a.K;a.K=null;for(a.X=a.g;;){if(a.g>=a.G){a.j=0;break}var b=a.B.charAt(a.g++);switch(b){case "/":if(a.g"===a.B.charAt(a.g)){a.g++;a.j=76;return}a.j=6;return;case "!":if(a.g":if(a.g"===a.B.charAt(a.g)){a.g++;a.j=39;return}a.j=11;return;case ".":if(a.ga.B.charAt(a.g)||"9"=b||127>16:a.lineNumber,h=void 0===h?null:h,new ff("Separator needed after numeric literal at line:"+(v+" col:"+(tf(a,h?h:a.te)&32767)+" near '"+a.B.slice(5>b?0:b-5,b+5)+"'"));a.g--;break a}if(a.g>=a.G)break;b=a.B.charAt(a.g++)}a.K=a.B.substring(a.X, -a.g);a.j=209;return;case '"':case "'":for(a.K="";;){a.g=a.B.indexOf(b,a.g);if(0>a.g)throw a.g=a.X+1,new ff("Unmatched quote in expression");a.K+=a.B.substring(a.X+1,a.g++);if(a.gb.charCodeAt(0)&&!cf(b))throw new ff("Invalid character '"+b+"' in expression");case "_":h=!1;a:for(;a.gb.charCodeAt(0)&&!ef(b))break a}a.K= -a.B.substring(a.X,a.g);a.j=201;return}}}function pf(a){a={or:9,is:20,to:29,"in":31,eq:50,ne:51,le:55,lt:53,gt:52,ge:54,as:71,and:10,div:18,mod:19,idiv:56,then:26,"else":27,"case":67,where:28,union:1,except:24,"return":25,otherwise:79,orElse:81,"default":212,andAlso:80,intersect:23,satisfies:34}[a];return[81,80].includes(a)?-1:a||-1} -hf.prototype.wg=function(a){var b={"if":37,array:69,attribute:69,comment:69,"document-node":69,element:69,"empty-sequence":69,"function":69,map:69,item:69,"namespace-node":69,node:69,"processing-instruction":69,"schema-attribute":69,"schema-element":69,"switch":69,otherwise:79,text:69,tuple:69,typeswitch:69,union:69}[a];return b?["tuple","union"].includes(a)?35:b:35};function sf(a,b){b=void 0===b?-1:b;a.lineNumber++;a.Da++;null===a.qa&&(a.qa=[]);a.qa.push(-1===b?a.g-1:b)} -function uf(a){a.g>a.G&&(a.g=a.G);return 34>a.g?a.B.substring(0,a.g):sb.collapse("..."+a.B.substring(a.g-30,a.g)).toString()}function tf(a,b){if(null===a.qa)return b;for(var h=a.qa.length-1;0<=h;h--){var v=a.qa[h];if(b>v)return h+1<<16|b-v}return b}var qf=1,rf=2,kf=3; -// Input 47 -var vf=[!1,!1,!0,!0,!0,!0,!0,!0,!0,!0,!1,!1,!0,!1];function wf(a){return"ancestor ancestor-or-self attribute child descendant descendant-or-self following following-sibling namespace parent preceding preceding-sibling self preceding-or-ancestor".split(" ")[a]}var xf=[1,1,2,1,1,1,1,1,13,1,1,1,1,1],yf=[4,5,9,9,0,1,10,11,9,3,6,7,12]; -function zf(a){switch(a){case "self":return 12;case "child":return 3;case "parent":return 9;case "ancestor":return 0;case "attribute":return 2;case "following":return 6;case "namespace":return 8;case "preceding":return 10;case "descendant":return 4;case "ancestor-or-self":return 1;case "following-sibling":return 7;case "preceding-sibling":return 11;case "descendant-or-self":return 5}throw new ff("Unknown axis name: "+a);}; -// Input 48 -function Af(a,b,h,v){this.kind=a;this.j=b;this.g=h;this.errorCode=void 0===v?"XPTY0004":v}Af.prototype={Sd:function(){return this.errorCode},save:function(){var a=this.kind+"|"+this.g+"|";a+=("XPTY0004"===this.errorCode?"":this.errorCode)+"|";return a+=this.j}}; -// Input 49 -function Bf(){this.l=Nc.da}ba=Bf.prototype;ba.start=function(a,b){b=void 0===b?{}:b;a.start(this.O,b);this.pc&&a.Ed("role",this.pc);this.qg&&a.Ed("sType",this.l.ja())};ba.cc=function(){return!Uc(this.l.ha)};ba.fb=function(a,b){b=void 0===b?{}:b;this.start(a,b);a.end()};ba.I=function(a){this.fb(a)};ba.O="Expression";ba.kind=null;ba.pc=null;ba.qg=null;ba.Fa=function(a,b){return new Af(this.kind,this.O,a,void 0===b?"XPTY0004":b)}; -ba.Ia=function(){throw new ff(jb.$j(this)+" is not a valid pattern","XTSE0340");};ba.Qd=function(){return this};function Cf(a,b,h){this.l=Nc.da;this.Xa=b;this.ga=a;this.ia=h;if(this.ga.Ya||this.ia.Ya)this.Ya=!0;this.ga.Mb&&this.ia.Mb&&(this.Mb=!0)}Ka(Cf,Bf);Cf.prototype.I=function(a){Bf.prototype.start.call(this,a,this.Xa?{op:Ye[this.Xa]}:{});this.ga.I(a);this.ia.I(a);a.end()};Cf.prototype.kind=1;function Df(a){this.l=Nc.da;this.g=a;this.g.Ya&&(this.Ya=!0);this.g.Mb&&(this.Mb=!0)}Ka(Df,Bf); -Df.prototype.I=function(a){Bf.prototype.start.call(this,a);this.g.I(a);a.end()};Df.prototype.kind=9; -// Input 50 -function Ef(){this.l=Nc.tc}Ka(Ef,Bf);Ef.prototype.Ia=function(){return this};Ef.prototype.I=function(a){Bf.prototype.fb.call(this,a)};function Ff(){Ef.apply(this,arguments)}Ka(Ff,Ef);Ff.prototype.O="p.any";function Gf(a,b){b=void 0===b?"match":b;Ef.call(this);this.message=a;this.pc=b;this.l=Nc.tc}Ka(Gf,Ef);Gf.prototype.I=function(a){Ef.prototype.fb.call(this,a,{message:this.message})};Gf.prototype.O="p.warning";function Hf(a){Ef.call(this);this.g=a;this.l=Nc.tc}Ka(Hf,Ef); -Hf.prototype.I=function(a){Ef.prototype.start.call(this,a);this.g.I(a);a.end()};Hf.prototype.O="p.booleanExp";function If(a,b){Ef.call(this);jb.assert(b instanceof bd);this.test=b;this.l=new Oc(b,2)}Ka(If,Ef);If.prototype.I=function(a){Ef.prototype.fb.call(this,a,{test:this.test.ja()})};If.prototype.O="p.nodeTest";function Jf(a,b){Ef.call(this);this.pattern=a;this.g=b;this.l=a.l;a.code&&(this.code=a.code)}Ka(Jf,Ef); -Jf.prototype.I=function(a){Ef.prototype.start.call(this,a);this.code&&a.Ed("code",this.code);this.pattern.I(a);this.g.I(a);a.end()};Jf.prototype.O="p.withPredicate";function Kf(a){Ef.call(this);this.g=a;this.l=Qc(a.l,2)}Ka(Kf,Ef);Kf.prototype.I=function(a){Ef.prototype.start.call(this,a);this.g.I(a);a.end()};Kf.prototype.O="p.nodeSet";function Lf(a){Ef.call(this);this.g=a;this.l=Qc(a.l,2)}Ka(Lf,Ef);Lf.prototype.I=function(a){Ef.prototype.start.call(this,a);this.g.I(a);a.end()};Lf.prototype.O="p.genNode"; -function Mf(a,b){Ef.call(this);this.g=b;this.code=a.l.ja();this.l=Qc(a.l,2)}Ka(Mf,Ef);Mf.prototype.I=function(a){Ef.prototype.start.call(this,a,{test:this.code});this.g.I(a);a.end()};Mf.prototype.O="p.genPos";function Nf(a,b){Ef.call(this);this.code=a.ja();this.Yd=b;this.l=Qc(a,2)}Ka(Nf,Ef);Nf.prototype.I=function(a){Ef.prototype.fb.call(this,a,{test:this.code,pos:this.Yd})};Nf.prototype.O="p.simPos";function Of(a,b,h){Ef.call(this);this.axis=yf[a];this.ob=b;this.g=h;this.l=b.l}Ka(Of,Ef); -Of.prototype.I=function(a){Ef.prototype.start.call(this,a,{axis:wf(this.axis)});this.ob.I(a);this.g.I(a);a.end()};Of.prototype.O="p.withUpper";function Pf(a,b,h,v){Ef.call(this);this.Xa=b;this.ga=a;this.ia=h;this.l=Qc(v,2)}Ka(Pf,Ef);Pf.prototype.I=function(a){Ef.prototype.start.call(this,a,{op:1===this.Xa?"union":Ye[this.Xa]});this.ga.I(a);this.ia.I(a);a.end()};Pf.prototype.O="p.venn";function Qf(a,b,h){Pf.call(this,a,1,b,h)}Ka(Qf,Pf); -function Rf(a){var b=[];a.ga instanceof Qf?b=Rf(a.ga):b.push(a.ga);a.ia instanceof Qf?b=b.concat(Rf(a.ia)):b.push(a.ia);return b}function Sf(a){Ef.call(this);this.g=a;a=Aa(this.g);for(var b=a.next();!b.done;b=a.next())b.value.qg=!0}Ka(Sf,Ef);Sf.prototype.I=function(a){Ef.prototype.start.call(this,a);for(var b=Aa(this.g),h=b.next();!h.done;h=b.next())h.value.I(a);a.end()};Sf.prototype.O="UnionExprP"; -// Input 51 -function Tf(a,b){this.l=Nc.da;Array.isArray(a)||jb.na("Literal value must be array");b instanceof Oc&&b.U.ja||jb.na("Literal type must be a SequenceType");a&&(this.value=a,b&&(this.l=b));this.pc=null}Ka(Tf,Bf);Tf.prototype.toString=function(){return this.value.toString()}; -Tf.prototype.I=function(a){function b(B,n){var g=B.code,e={};switch(g){case "AB":break;case "AQ":e.pre=B.prefix;e.uri=B.uri;e.loc=B.local;break;default:e.val=B.toString()}n&&(e.role=n);switch(g){case "AS":a.start("str",e);break;case "AO":a.start("dbl",e);break;case "AB":a.start(B.value?"true":"false",e);break;case "AD":a.start("dec",e);break;case "ADI":a.start("int",e);break;case "AQ":a.start("qName",e);break;default:e.type=g,a.start("atomic",e)}a.end()}if(0===this.value.length)a.start("empty",this.pc? -{role:this.pc}:{}),a.end();else if(1===this.value.length)b(this.value[0],this.pc);else{var h={count:this.value.length};this.pc&&(h.role=this.pc);a.start("atomic",h);h=Aa(this.value);for(var v=h.next();!v.done;v=h.next())b(v.value);a.end()}};function Uf(a){return a instanceof Tf&&1===a.value.length&&kd.ka()(a.value[0])}function Vf(a,b){return new Tf(a,b)}function Wf(){return new Tf([],Nc.Re)}Tf.prototype.O="literal";Tf.prototype.Mb=!0; -function Xf(a){Tf.call(this,[wb.XS.string.fromString(a)],Nc.ic);this.l=Nc.ic}Ka(Xf,Tf); -// Input 52 -function Yf(a){Df.call(this,a);this.O="cast";this.kind=2;this.Dd={}}Ka(Yf,Df);Yf.prototype.I=function(a){Df.prototype.start.call(this,a,this.Dd);this.g.I(a);a.end()}; -function Zf(a,b,h,v,B){var n=$f(a,Nc.hc,a.Fa(0,"XPTY0004"));n=new Yf(n);if(/[lu]/.test(b))n.Dd={flags:b+(B?"e":""),as:h.aa()};else{jb.assert("a"===b);try{if(a instanceof Tf&&1===a.value.length&&wb.sa(a.value[0])&&"AQ"!==v.$().p){var g=v.fd.R(a.value[0]);return new Tf([g],new Oc(v,2))}}catch(e){}n.Dd={flags:B?"ae":"a",as:v.ja()}}return n}function ag(a){Df.call(this,a);this.l=Nc.gb;this.O="castable";this.kind=2;this.Dd={}}Ka(ag,Df); -ag.prototype.I=function(a){Df.prototype.start.call(this,a,this.Dd);this.g.I(a);a.end()};function bg(a,b,h,v,B){var n=new ag(a);n=$f(n,Nc.hc,n.Fa(0,"XPTY0004"));if(/[lu]/.test(b))n.Dd={flags:b+(B?"e":""),as:h.aa()};else{jb.assert("a"===b);if(a instanceof Tf&&1===a.value.length&&wb.sa(a.value[0])&&"AQ"!==v.$().p)try{return v.fd.R(a.value[0]),new Tf([wb.XS.boolean.kd],Nc.gb)}catch(g){return new Tf([wb.XS.boolean.je],Nc.gb)}n.Dd={flags:B?"ae":"a",as:v.ja()}}return n} -function cg(a,b){Df.call(this,a);this.j=b;this.l=Ud(a.l.U)?Nc.$g:Nc.Id}Ka(cg,Df);cg.prototype.I=function(a){Df.prototype.start.call(this,a,{diag:this.j});this.g.I(a);a.end()};cg.prototype.O="data";function dg(a,b,h){cg.call(this,a,b);this.B=h;Ud(a.l.U)?this.l=h?Nc.Zf:Nc.Zg:this.l=h?Nc.hc:Nc.We}Ka(dg,cg);dg.prototype.I=function(a){cg.prototype.start.call(this,a,{diag:this.j});this.B&&a.Ed("card","?");this.g.I(a);a.end()};dg.prototype.O="atomSing"; -function eg(a){this.l=Nc.da;this.name=a.U.name.aa();this.l=Nc.Zf}Ka(eg,Bf);eg.prototype.I=function(a){Bf.prototype.fb.call(this,a,{name:this.name})};eg.prototype.O="attVal";function fg(a,b,h){Df.call(this,a);this.code=b;this.j=h;this.l=Nc.Id}Ka(fg,Df);fg.prototype.I=function(a){Df.prototype.start.call(this,a,{to:this.code,diag:this.j});this.g.I(a);a.end()};fg.prototype.O="cvUntyped";function gg(a,b){Df.call(this,a);this.type=b;this.flags="";this.l=new Oc(b.U,a.l.ha)}Ka(gg,Df); -gg.prototype.I=function(a){Df.prototype.start.call(this,a,{to:this.type.ja().replace(/^[01?*+]/,""),flags:this.flags});this.g.I(a);a.end()};gg.prototype.O="convert";function hg(a,b,h){Df.call(this,a);this.type=b;this.resultType=a.resultType;this.j=h;this.l=b}Ka(hg,Df);hg.prototype.I=function(a){Df.prototype.start.call(this,a,{to:this.type.ja().replace(/^[01?*+]/,""),diag:this.j});this.g.I(a);a.end()};hg.prototype.O="fnCoercer"; -// Input 53 -var ig="array attribute comment document-node element empty-sequence function if item map namespace-node node processing-instruction schema-attribute schema-element switch text typeswitch".split(" ");function lg(a,b){if(""===a.prefix&&ig.includes(a.local))throw new ff("The unprefixed function name '"+a.local+"' is reserved","XPST0003");this.name=a;this.arity=b}lg.prototype.aa=function(){return this.name.aa()};lg.prototype.toString=function(){return this.name.aa()+"#"+this.arity}; -// Input 54 -function mg(a,b,h){this.l=Nc.da;var v=a.name.local;if(a.name.uri===Ic.sc){if("NOTATION"===v)throw new I("No constructor function exists for xs:NOTATION","XPST0017");var B=b[0].l;if(2===B.ha&&B.U.sa()&&B.U.fd&&v===B.U.fd.name)a=b[0];else if(["NMTOKENS","ENTITIES","IDREFS"].includes(v))a=Zf(b[0],"l",a.name,null,!0);else{var n;"numeric"===v?n=Zf(b[0],"u",a.name,null,!0):n=Zf(b[0],"a",null,h.U,!0);a=n}return a}this.name=a;this.g=b;this.l=h;switch(v){case "exactly-one":this.l=Qc(b[0].l,2);break;case "head":this.l= -Qc(b[0].l,Tc(b[0].l.ha)?3:2);break;case "tail":case "subsequence":this.l=Qc(b[0].l,7);break;case "ceiling":case "floor":case "reverse":case "snapshot":this.l=b[0].l;break;case "last":case "position":this.Ya=!0;break;case "string-length":case "normalize-space":0===b.length&&this.g.push(ng("string",new og));break;case "fold-left":case "fold-right":this.l=b[2].resultType;break;case "for-each":this.l=Qc(b[1].l.U.rf(),7);break;case "filter":this.l=Qc(b[0].l,7);break;case "current":this.Mb=!0;break;case "boolean":if(b[0].l.equals(Nc.gb))return b[0]}} -Ka(mg,Bf);mg.prototype.Ia=function(){return new Kf(this)};mg.prototype.cc=function(){if(this.name.uri===Ic.Pa)return"doc document element-with-id id innermost key outermost".split(" ").includes(this.name.local)?!0:"filter one-or-more subsequence remove tail trace unordered zero-or-more".split(" ").includes(this.name.local)?this.g[0].cc():!1};mg.prototype.I=function(a){Bf.prototype.start.call(this,a,{name:this.name.name.local});for(var b=Aa(this.g),h=b.next();!h.done;h=b.next())h.value.I(a);a.end()}; -mg.prototype.O="fn";function pg(a,b,h){this.l=Nc.da;this.name=a;this.g=b;this.l=h}Ka(pg,Bf);pg.prototype.I=function(a){Bf.prototype.start.call(this,a,{name:this.name.aa()});for(var b=Aa(this.g),h=b.next();!h.done;h=b.next())h.value.I(a);a.end()};pg.prototype.O="ifCall";function qg(a,b,h){this.l=Nc.da;this.name=a;this.g=b;this.l=h;if(a="merge"===a.name.local)a=b[0],a=!(a instanceof Tf&&0===a.value.length);a&&(this.l=Qc(b[0].l,2))}Ka(qg,Bf); -qg.prototype.I=function(a){Bf.prototype.start.call(this,a,{name:this.name.aa()});for(var b=Aa(this.g),h=b.next();!h.done;h=b.next())h.value.I(a);a.end()};qg.prototype.O="ifCall";function rg(a,b,h){this.l=Nc.da;this.name=a;this.g=b;this.l=h}Ka(rg,Bf);rg.prototype.I=function(a){Bf.prototype.start.call(this,a,{name:this.name.aa()});for(var b=Aa(this.g),h=b.next();!h.done;h=b.next())h.value.I(a);a.end()};rg.prototype.O="ifCall";function sg(a,b,h){pg.call(this,a,b,h)}Ka(sg,pg); -function tg(a,b,h){this.l=Nc.da;this.name=a;this.g=b;this.l=h}Ka(tg,Bf);tg.prototype.I=function(a){Bf.prototype.start.call(this,a,{name:this.name.aa()});for(var b=Aa(this.g),h=b.next();!h.done;h=b.next())h.value.I(a);a.end()};tg.prototype.O="ifCall";function ug(a,b,h){this.l=Nc.da;this.name=a;this.g=b;this.l=h}Ka(ug,Bf);ug.prototype.I=function(a){Bf.prototype.start.call(this,a,{name:this.name.aa()});for(var b=Aa(this.g),h=b.next();!h.done;h=b.next())h.value.I(a);a.end()};ug.prototype.O="ifCall"; -function vg(a,b,h){ug.call(this,a,b,h);var v=new lg(wb.XS.QName.fromParts("ixsl",Ic.Vd,"call"),3),B=new lg(wb.XS.QName.fromParts("ixsl",Ic.Vd,"window"),0);this.name=v;this.g=[new ug(B,[],Nc.tc),new Xf(a.name.local),new wg(b)];this.l=h}Ka(vg,ug);function xg(a,b,h,v){this.l=Nc.da;this.name=a;this.g=b;this.l=h;this.j=v}Ka(xg,Bf);xg.prototype.I=function(a){Bf.prototype.start.call(this,a,{name:this.name.aa(),coId:this.j});for(var b=Aa(this.g),h=b.next();!h.done;h=b.next())h.value.I(a);a.end()}; -xg.prototype.O="ufCall";function yg(a){this.l=Nc.da;this.name=a.name.name;this.Ab=a.Ab;this.arity=a.name.arity;this.l=a.l;this.resultType=a.resultType}Ka(yg,Bf);yg.prototype.I=function(a){this.fb(a,{name:this.name.aa(),arity:this.arity,resultType:this.resultType.ja()})};yg.prototype.O="fnRef";function zg(a){yg.call(this,a);this.g=0}Ka(zg,yg);zg.prototype.I=function(a){this.fb(a,{name:this.name.aa(),arity:this.arity,resultType:this.resultType.ja(),bSlot:this.g})};zg.prototype.O="ufRef"; -function Ag(){this.l=Nc.da}Ka(Ag,Bf);Ag.prototype.I=function(a){this.fb(a,{asCode:"*"})};Ag.prototype.O="null";function Bg(){this.l=Nc.da}Ka(Bg,Bf);Bg.prototype.g={};Bg.prototype.B={};Bg.prototype.j={};function Cg(){this.l=Nc.da;this.slot=this.bb=this.name=this.ec=null}Ka(Cg,Bf);Cg.prototype.td=function(){return this.name};Cg.prototype.toString=function(){return"$"+this.name+" as "+this.l.toString()};Cg.prototype.I=function(a){this.fb(a,{name:this.name,asCode:this.l.ja(),slot:this.slot})}; -Cg.prototype.O="arg";function Dg(a,b,h,v){this.l=Nc.da;this.params=b;this.resultType=h;var B=[];b.forEach(function(n){B.push(n.l)});v=$f(v,h,this.Fa("body"));this.l=ad(new Pd(B,h));this.arity=b.length;this.body=v;v.pc="body"}Ka(Dg,Bf);ba=Dg.prototype;ba.I=function(a){Bf.prototype.start.call(this,a,{arity:this.arity,name:this.name,as:this.resultType.ja()});for(var b=Aa(this.params),h=b.next();!h.done;h=b.next())h.value.I(a);this.body.I(a);a.end()};ba.O="inlineFn";ba.kind=5; -ba.Fa=function(a,b){b=void 0===b?"XPTY0004":b;return new Af(this.kind,"("+this.params.map(function(h){return h.toString()}).join(",")+")"+(this.resultType?" as "+this.resultType.toString():""),a,b)};ba.name="inline";ba.qg=!0; -function Eg(a,b,h){this.l=Nc.da;var v=this;if(a.l&&a.l.U instanceof Pd&&a.l.$().a.length!==b.length)throw new I("Partially-applied function requires "+a.arity+" arguments, but "+(b.lengtha.value[0].value}function Zh(a,b,h){h=void 0===h?!1:h;Cf.call(this,a,null,b);h&&(a=Qg(a),b=Qg(b));this.ga=$f(a,Nc.Xf,this.Fa(0));this.ia=$f(b,Nc.Xf,this.Fa(1));this.l=Nc.Te}Ka(Zh,Cf);Zh.prototype.O="to";function $h(a,b){this.g=a;this.j=b;this.l=Nc.Te}Ka($h,Bf);$h.prototype.I=function(a){Bf.prototype.fb.call(this,a,{from:this.g.value,to:this.j.value})};$h.prototype.O="range"; -function ai(a,b){this.l=Nc.da;this.g=a;this.next=b;this.l=Rc(b.l,a.l.ha)}Ka(ai,Bf);ai.prototype.I=function(a){Bf.prototype.start.call(this,a);this.g.I(a);this.next.I(a);a.end()};ai.prototype.O="forEach"; -// Input 66 -// Input 67 -var bi={array:"http://www.w3.org/2005/xpath-functions/array",fn:"http://www.w3.org/2005/xpath-functions",map:"http://www.w3.org/2005/xpath-functions/map",math:"http://www.w3.org/2005/xpath-functions/math",saxon:"http://saxon.sf.net/",xml:"http://www.w3.org/XML/1998/namespace",xs:"http://www.w3.org/2001/XMLSchema",xsl:"http://www.w3.org/1999/XSL/Transform"},ci={},di;for(di in bi)ci[bi[di]]=di; -// Input 68 -function ei(a,b,h,v){this.l=Nc.da;this.name=wb.XS.QName.fromParts(ci[h],h,a);this.arity=b;this.uri=h;this.l=Nc.Xe;this.resultType=v}Ka(ei,Bf); -function fi(a,b){var h=new lg(a.name,a.arity),v=Nc.da;switch(a.uri){case Ic.map:v=Nc.$f;switch(a.name.local){case "get":v=b[0].l.valueType;break;case "merge":v=Nc.$f;break;case "entry":v=ad(new de(b[0].l,b[1].l))}return new qg(h,b,v);case Ic.af:switch(a.name.local){case "_from-sequence":v=ad(new ee(b[0].l))}return new rg(h,b,v);case Ic.zb:switch(a.name.local){case "apply":a=b[0].l,a=a.U?a.U:a,v=a.resultType?a.resultType:Nc.da}return new tg(h,b,v)}}ei.prototype.O="function";function gi(){} -gi.prototype.uri=Ic.Pa;function hi(a,b,h){return new ei(b,h,a.uri,Nc.da)}function ii(){}Ka(ii,gi);ii.prototype.uri=Ic.map;var ji=new ii;function ki(){}Ka(ki,gi);ki.prototype.uri=Ic.af;var li=new ki;function mi(){}Ka(mi,gi);mi.prototype.uri=Ic.zb;function ni(){}Ka(ni,mi);var xi=new ni; -// Input 69 -var yi={FUNCTION:0,kk:1,Tk:2,Zk:3,zk:4,tk:5,Gk:6,Rk:7,Jk:8,Wk:9,Xk:10,yk:11,EVALUATE_RESULT:12,mk:13,ik:14,Fk:15,lk:16,nk:17},zi=["doc","id","element-with-id","key","root"];function Ai(a,b,h,v){return yi[a]+"|"+b+"|"+h+"|"+v}function Bi(a,b,h,v){return{getMessage:function(){return b},kg:v,Sd:function(){return a},save:function(){return h}}}function Ch(a,b){var h=Nd.Wj(b).required;return Bi(a,h,b,function(v,B){return"Required type of "+h+" is "+v.toString()+": actual type is "+B.toString()})} -function Fg(a,b){var h=null;this.name=a;this.arity=a.arity;if(b){this.Ab=b;h=b.alphaTree;var v=[],B;b.variadic&&(B=Zc(h.a[0]));for(b=0;b=W;){var ia=x.J,ka=u();switch(ia){case 45:case 47:g();var wa=K();a:switch(ia){case 45:J=new ih(J,wa);break a;case 47:J=Bh(J,wa);break a;default:throw new gf(Ye[ia]);}u()>=ka&&B("Left operand of '"+Ye[x.J]+"' needs parentheses");break;case 46:case 57:g();var Ea=void 0;if(69===x.J&&"union"=== -x.T)throw new I("Saxon union types not supported");e(201);if(x.T)a:{try{var Ma=h(x.T,S.yb,S.nc);break a}catch(Kb){B(Kb.message,Kb.code)}Ma=void 0}else Ma=B("Parser tokenization error NAME");wa=Ma;wa.uri!==Ic.sc&&B("Unknown simple type "+x.T+" in cast (SaxonJS is not schema-aware)");g();var bb=213===x.J;bb&&(x.J=204,g());var hb={numeric:"u",ENTITIES:"l",NMTOKENS:"l",IDREFS:"l"}[wa.local]||"a";if("a"===hb){["anyType","anyAtomicType","NOTATION"].includes(wa.local)&&B("Casting to xs:"+wa.local+" is not possible (it's an abstract type)", -"XPST0080");Ea=wb.type[wa.local];if(!Ea)throw new I("Cannot find type "+wa.aa());Ea=new dd(Ea)}J=(57===ia?bg:Zf)(J,hb,wa,Ea,bb);u()>=ka&&B("Left operand of '"+Ye[x.J]+"' needs parentheses");break;case 76:J=O(J);break;default:bb=40===ia;g();bb&&sa.push(Qc(J.l,2));wa=H();for(bb&&sa.pop();u()>ka;)wa=r(wa,u());if(!(ka=u()!==ka))a:switch(x.J){case 50:case 51:case 55:case 53:case 54:case 52:case 6:case 22:case 14:case 12:case 13:case 11:case 20:case 38:case 39:case 29:ka=!1;break a;default:ka=!0}ka||B("Left operand of '"+ -Ye[x.J]+"' needs parentheses");J=f(J,ia,wa)}}return J}function f(J,W,ia){switch(W){case 9:return new Xh(J,ia);case 10:return new Wh(J,ia);case 50:case 51:case 55:case 53:case 54:case 52:return new Zg(J,W,ia,S);case 6:case 22:case 14:case 12:case 13:case 11:if(S.ze())W=new Yg(J,W,ia,S);else{var ka=S;ia=new Xg(J,W,ia,ka);if(J=2===ia.ga.l.ha&&2===ia.ia.l.ha&&Sg[W]){J=ia.ga.l.U;var wa=ia.ia.l.U,Ea=J.$().p,Ma=wa.$().p;J=Ug(Ea)||Ug(Ma)?Ea===Ma:J.isNumeric()&&wa.isNumeric()?!0:/^A[SZU]/.test(Ea)&&/^A[SZU]/.test(Ma)}W= -J?new Zg(ia.ga,Sg[W],ia.ia,ka):ia}return W;case 20:case 38:case 39:return new ch(J,W,ia,S);case 29:return ia=new Zh(J,ia,S.ze()),Yh(ia.ga)&&Yh(ia.ia)?(W=ia.ga.value[0],ia=ia.ia.value[0],W=W.value>ia.value?Wf():W.value===ia.value?new Tf([W],Nc.Te):new $h(W,ia)):W=ia,W;case 30:W=[];if(J instanceof mg&&"concat"===J.name.name.local&&J.name.name.uri===Ic.Pa)for(ka=Aa(J.g),J=ka.next();!J.done;J=ka.next())W.push(J.value);else ka=Ai("BINARY_OP",0,"","concat"),wa=Ch("FOTY0013",ka),J=xh(J,Nc.hc,wa,ka,S),W.push(J); -ka=Ai("BINARY_OP",1,"","concat");wa=Ch("FOTY0013",ka);ia=xh(ia,Nc.hc,wa,ka,S);W.push(ia);W=ng("concat",W);W.l=Nc.ic;return W;case 15:case 16:case 17:case 18:case 56:case 19:return new Pg(J,W,ia,S);case 79:return ka=J,W=ia,J=wb.XS.QName.fromParts("vv",Ic.Pg,"otherwise"),ia=new Uh,ia.bb=J,ia.j(ka),oa(ia),ka=Ih(ia),J=[ng("exists",[ka]),Vf([wb.XS.boolean.kd],Nc.gb)],ia.g(new Qh(J,[ka,W])),ia;case 1:case 23:case 24:return new Kg(J,W,ia,1===za);case 81:return ia=ng("boolean",ia),Rh(J,Vf([wb.XS.boolean.kd], -Nc.gb),ia);case 80:return ia=ng("boolean",ia),Rh(J,ia,Vf([wb.XS.boolean.je],Nc.gb));default:throw new gf(Ye[W]);}}function H(){switch(x.J){case 16:g();var J=H();J=d(299,J);break;case 15:g();J=H();J=d(15,J);break;default:for(J=l();40===x.J;){g();sa.push(Qc(J.l,2));var W=l();sa.pop();J=new ai(J,W)}}return J}function d(J,W){if(Uf(W)){var ia=W.value[0];return 299===J?Vf([ia.Bf()],W.l):W}return new Pg(Vf([wb.XS.integer.fromNumber(0)],Nc.Jd),J,W,S)}function c(){switch(x.J){case 36:case 3:case 201:case 208:case 70:case 207:case 69:case 205:case 206:case 35:case 202:case 209:case 5:case 21:case 43:return!0; -case 60:return["ordered","unordered"].includes(x.T);default:return!1}}function l(){var J=x.te;switch(x.J){case 2:return g(),J=new Lg,c()?t(J):J;case 8:g();J=new Lg;var W=new Ig(5,null);J=kh(J,W);return t(J);default:201===x.J&&["true","false"].includes(x.T)&&n("The expression is looking for a child element named '"+x.T+"' - perhaps "+x.T+"() was intended? To avoid this warning, use child::"+x.T+" or ./"+x.T+".");201===x.J&&-1!==pf(x.T)&&1!==za&&(0'");return null}function fa(J){function W(Ea){return Ea instanceof -og||Ea instanceof fh&&W(Ea.g)}switch(x.J){case 21:return U();case 5:var ia=ca();J&&W(ia)&&B("Predicate pattern cannot be parenthesized","XTSE0340");return ia;case 4:return F();case 202:return D(!0);case 209:return z(!0);case 35:return ia=x.T,0===Pa&&1===za&&(S.Eg=!0,J?zi.includes(ia)||ia.includes(":")||B("Function "+ia+"() is not permitted at first position in pattern","XTSE0340"):B("Function call not at first position in pattern","XTSE0340")),ia=Q(null),S.Eg=!1,ia;case 213:return V(new og);case 205:return g(), -new og(sa[sa.length-1]);case 206:return g(),new Ig(9,null);case 69:if("function"===x.T)return ea();case 201:case 208:case 70:case 207:return ia=3,69===x.J&&["attribute","schema-attribute"].includes(x.T)?ia=2:69===x.J&&"namespace-node"===x.T?ia=8:J&&69===x.J&&"document-node"===x.T&&(ia=12),J=na(1),new Ig(ia,J);case 3:g();switch(x.J){case 201:case 208:case 70:case 207:case 69:return ia=na(2),new Ig(2,ia);default:B("@ must be followed by a NodeTest")}break;case 36:try{ia=zf(x.T)}catch(Ea){B(Ea.message), -ia=3}J=xf[ia];g();switch(x.J){case 201:case 208:case 70:case 207:case 69:J=na(J);var ka=null;if(2===ia){var wa=ce.Pb(J,new ud(2));wa===ce.fc?ka="attribute axis can never yield nodes of type "+J:wa===ce.Ub&&(J=new ud(2))}3===ia&&9===J.kind&&(ka=J.name+" nodes can never be children");2!==J.kind||[2,12].includes(ia)||(ka="axis "+wf(ia)+" can never yield attribute nodes");if(ka){if(1===za)return new Gf(ka);n(ka);return Wf()}return new Ig(ia,J);default:B("Unexpected token "+v()+" after axis name")}break; -case 60:switch(x.T){case "map":return y();case "array":return L();case ".":return ma();case "_":B("Underscore functions not yet implemented")}break;case 43:return da();default:B("Unexpected token "+v()+" at start of expression")}}function ca(){g();if(204===x.J)return g(),Wf();var J=k();e(204);g();return J}function z(){var J=x.T?A(x.T):B("Parser tokenization error NUMBER");isNaN(J)&&B("Invalid numeric literal ("+x.T+")");g();return Vf([J],"AO"===J.code?Nc.oe:"AD"===J.code?Nc.Wg:Nc.Jd)}function A(J){try{return 0<= -J.indexOf("e")||0<=J.indexOf("E")?wb.XS.double.fromString(J):0<=J.indexOf(".")?wb.XS.vb.fromString(J):wb.XS.integer.fromString(J)}catch(W){return NaN}}function D(){var J=new Xf(x.T);g();return J}function U(){g();e(201);var J=x.T;g();var W=Fa(J,"");J=P(W);if(null!=J)var ia=Ih(J);else if(W.uri===Ic.Ri&&0J.value||J.value>Number.MAX_SAFE_INTEGER)&&B("Number following '#' is out of range","FOAR0002");J=J.value;g();var wa=null;try{wa=h(W,ka.yb,ka.Gh)}catch(Ma){B(Ma.message,Ma.code)}W=ka.qf();var Ea=new lg(wa,J);ka=W.vg(Ea,ka);null==ka&&B("Function "+wa.aa()+"#"+J+" not found","XPST0017",ia);return ka.Ab.Nh&&!wa.ud(af.vi)? -new zg(ka):new yg(ka)}function oa(J){J.slot=aa.length;aa.push(J)}function P(J){for(var W=aa.length-1;0<=W;W--){var ia=aa[W];if(ia&&ia.td().equals(J))return ia}}function qa(J,W){return h(J,S.yb,function(){return W})}function Fa(J,W){try{return qa(J,W)}catch(ia){B(ia.message,ia.code)}}function m(J,W){if(W.startsWith("Q{"))return new $d(J,W.substring(2,W.length-2));try{var ia=h(W+":dummy",S.yb,function(){return""});return new $d(J,ia.uri)}catch(ka){return B(ka.message,ka.code),null}}function G(J,W){df(W)|| -B("Local name ["+W+"] contains invalid characters");return new Zd(J,W)}function N(J,W,ia,ka){this.global=void 0===ka?!1:ka;this.bb=this.name=J;this.ec=W;this.slot=ia}var x,T,S={},aa=[],sa=[],za=0,ya=0,Pa=0,Ta=[],Va={vg:function(J,W){W=W.getContext();return(W=Ci.getFnSignature(J.name,J.arity,W))?new Fg(J,W):null},bind:function(J,W,ia){var ka=ia.getContext(),wa=Ci.getFnSignature(J.name,J.arity,ka);if(wa){if(J.name.uri===Ic.Pa)switch(J.name.local){case "false":return Vf([wb.XS.boolean.je],Nc.gb);case "true":return Vf([wb.XS.boolean.kd], -Nc.gb);case "normalize-unicode":1===W.length&&W.push(new Xf("NFC"));break;case "copy-of":return new Ph(W[0]?W[0]:new og(sa[sa.length-1]));case "current-group":return new Nh;case "current-grouping-key":return new Oh;default:wa.defaultToDot&&0===J.arity&&wa.arity.includes(0)&&(W.push(new og(sa[sa.length-1])),J.arity++)}else if(wa.isIdempotent&&1===W.length)return W[0];ka=[];var Ea,Ma=wa.alphaTree;Ma&&"F"===Ma.p&&!Ma.r&&(Ma.r={p:"",o:"*"});Ma&&"F"===Ma.p&&Ma.a&&Ma.r||jb.na("Bad function signature for "+ -J.name.local);wa.variadic&&(Ea=Ma.a[0]);for(var bb=wa.collation||-1,hb=0;hbW.length-1&&ka.push(new Xf(ia.Xb));W=Zc(Ma.r);if(wa.isUserFunction)return new xg(J,ka,W,wa.componentBinding);switch(J.name.uri){case Ic.Pa:case Ic.sc:switch(J.name.local){case "current":sa[0]&& -(W=sa[0]);break;case "accumulator-before":case "accumulator-after":if(ka[0]instanceof Xf){wa=h(ka[0].value[0].value,ia.yb,function(){return""}).aa();ia=ia.Jb[wa];if(!ia)throw new I("Unknown accumulator "+wa,"XTDE3340");W=Wc(ia);ka[0]=new Xf(wa)}}return new mg(J,ka,W);case Ic.map:return new qg(J,ka,W);case Ic.af:return new rg(J,ka,W);case Ic.Ph:return new sg(J,ka,W);case Ic.zb:return new tg(J,ka,W);case Ic.Vd:return new ug(J,ka,W);case Ic.Oh:return new vg(J,ka,W);default:return wa.Nh?new xg(J,ka,W, -wa.cl):new tg(J,ka,W)}}else{if(wa=Ci.getFnSignature(J.name,null,ka))if(wa&&!wa.alphaTree&&(wa.alphaTree=Zb(wa.sig)),ka=W.length,Ea=wa.alphaTree.a.length,ka!==Ea&&(wa.variadic?W.lengthK?ra:K}q.Ad=K+1}q.Yj(c);if(c=l.slotTypes)for(X in c)q.Gd[X]=Zc(c[X]);for(ja in t)q.namespaces[ja]=t[ja];q.namespaces[""]="";if(t=l.staticTyping)q.Kf=t;if(t=l.xpathDefaultNamespace)q.xpathDefaultNamespace=t;if(t=l.defaultCollation)q.Xb= -t;if(t=l.staticBaseURI)q.staticBaseURI=t;(t=l.contextType)?q.type=new Oc($c(t),2):q.type=q.eb?null:Nc.tc;q.Ee=q.type;if(l=l.requiredType)q.Je=Wc(l);return q}function n(c){var l=new b;l.type=Nc.tc;l.X(c.params,c.inputConvert);["xs","map","array","math","saxon"].forEach(function(K){return l.namespaces[K]=bi[K]});for(var t in c.namespaceContext)l.namespaces[t]=c.namespaceContext[t];c.xpathDefaultNamespace&&(l.xpathDefaultNamespace=c.xpathDefaultNamespace);var q;if(c=c.slotMap){t=-1;for(q in c){var C= -c[q];l.dc[q]=C;t=C>t?C:t}l.Ad=t+1}return l}function g(c,l,t){c=Fi.process(c,"pattern"===l.type,l.splitPattern,t,"XSLT"===l.language,l.allowEmpty,l.freeVariables);return xc(c)}function e(c,l){l=void 0===l?!1:l;var t={"function":{},globalVariable:{},globalParam:{}},q;for(q in c)if("PRIVATE"!==c[q].visibility){var C=c[q].actor,K=Kc.V(C)?C.nodeName:C.N,X=Kc.V(C)?C.getAttribute("name"):C.name;switch(K){case "function":if(l&&"PUBLIC"!==c[q].visibility&&"FINAL"!==c[q].visibility)break;C=(Kc.V(C)?Kc.Qc(C, -"arg"):v(C)).length;t[K][X+"#"+C]=c[q];break;case "globalVariable":case "globalParam":t[K][X]=c[q]}}return t}function k(c,l){l=void 0===l?!0:l;var t={N:c.nodeName},q=c.attributes,C;for(C=0;Cc||c>l)throw new I("Array index ("+c+") out of bounds (1 to "+l+")","FOAY0001",u);}function r(c){return c[0].next().value} -function f(c){return xc(new Kd(c))}function H(c,l,t,q){var C=l.fixed.ma,K=c[1].expand(),X=c[2].expand()[0],ja=Object.keys(l.ra).length;if(X instanceof Ld.XdmFunction)c=r(c),q||(c=c.reverse()),c.forEach(function(O){K=X.evaluate(q?[K,O]:[O,K],l,t).expand()});else{var ra;"function"!==X.N&&(ra=X);c[0].forEachItem(function(O){var fa=l.ca(!0);ra&&(fa.va=ra);Rd(fa);fa.ta="function";fa.jb={};fa.cb=null;fa.focus=null;q?(fa.ra[ja]=K,fa.ra[ja+1]=[O]):(fa.ra[ja]=[O],fa.ra[ja+1]=K);K=C.evaluate(void 0,fa).expand()})}return sc(K)} -var d={append:function(c){return f(r(c).concat([c[1].expand()]))},filter:function(c,l,t){var q=c[1].expand()[0];Object.keys(l.ra);c=r(c);if(q.evaluate){var C=[];c.forEach(function(K){var X=q.evaluate([K],l,t).expand();if(Array.isArray(X)&&1!==X.length||!n.boolean.matches(X[0]))throw new I("Wrong type for function result in filter(). Expecting xs:boolean, supplied value is "+jb.showValue(X),"XPTY0004",t);X[0].toBoolean()&&C.push(K)});return f(C)}throw new I("Argument supplied to array:filter is not a function", -"XPTY0004",t);},flatten:function(c){return Nd.flatten(c[0])},"fold-left":function(c,l,t){return H(c,l,t,!0)},"fold-right":function(c,l,t){return H(c,l,t,!1)},"for-each":function(c,l,t){var q=c[1].expand()[0];c=r(c);Object.keys(l.ra);if(q.evaluate){var C=[];c.forEach(function(K){C.push(q.evaluate([K],l,t).expand())});return f(C)}},"for-each-pair":function(c,l,t){var q=c[2].expand();if(1!==q.length)throw new I("for-each-pair() must have exactly one function item as the third argument. Supplied length "+ -q.length,"XPTY0004",t);q=q[0];Object.keys(l.ra);var C=[],K=c[0].next().value[Symbol.iterator]();c=c[1].next().value[Symbol.iterator]();var X=K.next().value,ja=c.next().value;if(q instanceof Ld.XdmFunction)for(;X&&ja;)C.push(q.evaluate([X,ja],l,t).expand()),X=K.next().value,ja=c.next().value;return f(C)},"_from-sequence":function(c){var l=[];c[0].forEachItem(function(t){l.push([t])});return f(l)},get:function(c){var l=r(c);c=c[1].next().toNumber();E(c,l.length);return sc(l[c-1])},head:function(c){c= -r(c);E(1,c.length);return sc(c[0])},"insert-before":function(c){var l=r(c),t=c[1].next().toNumber();E(t,l.length+1);c=c[2].expand();return f(l.slice(0,t-1).concat([c]).concat(l.slice(t-1)))},join:function(c){var l=[];c[0].forEachItem(function(t){t.value.forEach(function(q){l.push(q)})});return f(l)},put:function(c){var l=r(c),t=c[1].next().toNumber();E(t,l.length);c=c[2].expand();return f(l.slice(0,t-1).concat([c]).concat(l.slice(t)))},remove:function(c){var l=r(c),t=[];c[1].forEachItem(function(q){q= -q.toNumber();E(q,l.length);t.push(q-1)});return f(l.filter(function(q,C){return 0>t.indexOf(C)}))},reverse:function(c){return f(r(c).slice().reverse())},size:function(c){return Cc(c[0].next().size())},sort:function(c,l,t){var q=re.pf(t,c[1],l),C=Nd.lc;if(c[2]){var K=c[2].next();C=function(X){return K.evaluate([[X]],l,t)}}return f(r(c).slice().sort(function(X,ja){return c[1]?se(sc(X).mapOneToMany(C),sc(ja).mapOneToMany(C),q):se(sc(X).mapOneToMany(C),sc(ja).mapOneToMany(C))}))},subarray:function(c){var l= -r(c),t=c[1].next().toNumber();E(t,l.length+1);c=c[2]?c[2].next().toNumber():l.length-t+1;if(0>c)throw new I("Length is negative","FOAY0002");E(t+c,l.length+1);return f(l.slice(t-1,t+c-1))},tail:function(c){c=r(c);E(1,c.length);return f(c.slice(1))},"_to-sequence":function(c){var l=[];r(c).forEach(function(t){t.forEach(function(q){l.push(q)})});return sc(l)}};if(!d[e])throw new I("Unknown array function: "+e,"SXJS0003",u);return d[e](k,p,u)}function v(e,k,p,u){var E={contains:function(r){var f=r[0].next(); -r=r[1].next();return Fc(f.containsKey(r))},create:function(r){var f=new Mc;r[0].forEachItem(function(H){H.forAllPairs(function(d){f.inSituPut(d.k,d.v)})});return xc(f)},entry:function(r){var f=new Mc;f.inSituPut(r[0].next(),r[1].expand());return xc(f)},find:function(r){function f(l){Nd.isArray(l)?l.value.forEach(H):Nd.isMap(l)&&(l.containsKey(c)&&d.push(l.get(c)),l.keys().forEach(function(t){H(l.get(t))}))}function H(l){l.forEach(f)}var d=[],c=r[1].next();H(r[0].expand());return xc(new Kd(d))},"for-each":function(r, -f,H){var d=r[0].next(),c=d.keys(),l=r[1].expand()[0];if(l.evaluate){var t=[];c.forEach(function(q){t=t.concat(l.evaluate([[q],d.get(q)],f,H).expand())});return sc(t)}throw new I("Argument to map:for-each is not a function","XPTY0004",H);},get:function(r){var f=r[0].next();r=r[1].next();return sc(f.get(r))},keys:function(r){r=r[0].next();return sc(r.keys())},merge:function(r){var f=new Mc,H=r[1]?r[1].next():null;r[0].forEachItem(function(d){d.forAllPairs(function(c){var l=n.string.fromString("duplicates"); -l=H&&H.containsKey(l)?H.get(l).toString():"use-first";if(!f.containsKey(c.k)||["use-last","unspecified","use-any"].includes(l))f.inSituPut(c.k,c.v);else{if("reject"===l)throw l=n.string.fromString("duplicates-error-code"),l=H.containsKey(l)?H.get(l).toString():"FOJS0003",new I("Duplicate key value '"+c.k.toString()+"'",l,u);if("combine"===l){var t=f.get(c.k);c.v.forEach(function(q){t.push(q)});f.inSituPut(c.k,t)}}})});return xc(f)},_new:function(r){var f=new Mc;r[0]&&r[0].forEachItem(function(H){H.forAllPairs(function(d){if(f.containsKey(d.k))throw new I("Duplicate key value '"+ -d.k.toString()+"'","XSLT"===p.fixed.options.language?"XTDE3365":"XQDY0137",u);f.inSituPut(d.k,d.v)})});return xc(f)},put:function(r){var f=r[0].next(),H=r[1].next();r=r[2].expand();return xc(f.put(H,r))},remove:function(r){var f=r[0].next();r[1].forEachItem(function(H){f=f.remove(H)});return xc(f)},size:function(r){var f=0;r[0].next().forAllPairs(function(){f++});return Cc(f)},"untyped-contains":function(r){var f=r[0].next();r=r[1].next();return Fc(f.containsKey(r))}};if(!E[e])throw new I("Unknown map function: "+ -e,"SXJS0003",u);return E[e](k,p,u)}function B(e,k,p,u){function E(c){return null===c?(H=!0,Number.NaN):c.toNumber()}function r(){var c=k[0].next();return E(c?c:Nd.Va(u)(p).next())}function f(){var c=k[1].next();return E(c?c:Nd.mh(u)(p).next())}var H=!1,d=function(){switch(e){case "pi":return Math.PI;case "exp":return Math.exp(r());case "exp10":return Math.pow(10,r());case "log":return Math.log(r());case "log10":return Math.log(r())/Math.LN10;case "pow":var c=r(),l=f();return-1===c&&(Infinity===l|| --Infinity===l)||1===c?1:Math.pow(c,l);case "sqrt":return Math.sqrt(r());case "sin":return Math.sin(r());case "cos":return Math.cos(r());case "tan":return Math.tan(r());case "asin":return Math.asin(r());case "acos":return Math.acos(r());case "atan":return Math.atan(r());case "atan2":return Math.atan2(r(),f());default:throw new I("Unknown math function "+u.name,"XPST0017",u);}}();return H?wc:Dc(d)}var n=wb.XS,g={};g[Ic.zb]={apply:Ue.apply,"compile-XPath":function(e,k,p){var u=e[0].next().toString(), -E;if(1=p.Gj&&u.Hba(u,p)})},Zi:function(e, -k,p){var u=null,E=null,r=this.og,f=[];if(Kc.V(e)){var H=g[e.nodeType],d=Kc.ea(e);if(d=d?d.local:null)d=H+" "+d,this.jc[d]&&f.push(this.jc[d]);this.jc[H]&&f.push(this.jc[H]);this.jc.N&&f.push(this.jc.N)}this.jc["."]&&f.push(this.jc["."]);(function(c){c.forEach(function(l){l.forEach(function(t){if(!p||p(t))if(!u||0parseInt(ha[y].Hb,10)&&(ha[y]=F):ha[y]=F};(z.C||[]).forEach(function(ha){var y=Xc(ha.test);y instanceof Yd?(ha.PREC=parseInt(ha.prec,10),ha.PRIO=2,ma(U,y.name.aa(),ha)):y instanceof $d?(ha.PREC=parseInt(ha.prec,10),ha.PRIO=1,ma(M,y.uri,ha)):y instanceof Zd?(ha.PREC=parseInt(ha.prec,10),ha.PRIO=1,ma(V,y.localName, -ha)):y instanceof ud?(ha.PREC=parseInt(ha.prec,10),ha.PRIO=0,ma(Z,"*",ha)):jb.na("Unrecognised strip-space "+ha.test)});var na=function(ha,y){var F=[],L=U["Q{"+ha+"}"+y];L&&F.push(L);(ha=M[ha])&&F.push(ha);(y=V[y])&&F.push(y);Z["*"]&&F.push(Z["*"]);F.sort(function(Q,R){var w=Q.PREC,Y=R.PREC;return w===Y?R.PRIO-Q.PRIO:Y-w});return 0Q.indexOf("Q{")&&(Q="Q{}"+Q);Z=t(na,Q);if(!Z)throw new I("Unknown initial mode "+Q,"XTDE0045");Y="Q{"+Ic.gd+"}initial-template";A||R||w||q(na,Y)&&(w=Y);var N=D.nj;if(N){A=D.zh?D.zh:[];R=A.length;w=C(na,N.toString(),R);if(!w)throw new I("Unknown initial function "+N+"#"+R,"XTDE0041");if("PUBLIC"!==w.ab.vis&&"FINAL"!==w.ab.vis)throw new I("Uninvocable initial function "+ -N+"#"+R+" with visibility "+w.ab.vis,"XTDE0041");var x=w.ab.C[0];na.focus={};na.va=w;Rd(na);na.ta="function";na.jb=Z;na.cb=null;var T=0;na.ra=A.map(function(aa){var sa=x.C[T++].as;sa=Wc(sa||"*");return Nd.jg(Nd.Ta(aa),sa,function(){return"function parameter for "+N})});A=M();Ke.push(Nd.fa(x,"body"),na,A);A.close()}else if(w){R=q(na,w);if(!R)throw new I("Unknown initial template "+w,"XTDE0040");w=R.actor;na.fixed.Uc?na.focus=zc(A):(na.focus=Ac(wc),na.focus.next());Nd.ig(w,na);na.va=R;na.jb=Z;v(D,na); -A=M();Ke.push(w.C[0],na,A);A.close()}else{Array.isArray(R)&&ea&&R.filter(Kc.V).map(function(aa){return Kc.vf(aa)?aa:aa.ownerDocument}).map(function(aa){return ea(aa)});if("PRIVATE"===Z.visibility&&Q!==z.defaultMode&&""!==Q)throw new I("Uninvokable initial mode "+Q+" with visibility "+Z.ab.vis,"XTDE0045");if(!A&&!R)throw new I("No source input supplied for apply-templates invocation","XTDE0044");w=Z.mode;na.va=Z;na.focus=Ac(R?sc(Array.isArray(R)?R:[R]):xc(A));A=w.Ye.useAcc;null!=A&&"#all"!==A&&(na.Ne= -A.split(/\s+/));v(D,na);A=M();w.Kb(na,A);A.close()}V();if(ma){var S=function(){var aa=na.fixed.fe;na.fixed.fe=[];return Promise.all(aa).then(function(){if(0ra.pd.fromString(z.expiry).compareTo(ra.pd.fromDate(new Date,0)))throw new I("Development license for supplied stylesheet has expired","SXJS0006"); -}}function E(z){function A(Z,ea){ea<<=8;for(var ma=0;maM?4294967295+M+1:M).toString(16);if(Z!==z){if("unspecified"===z)throw new I("No checksum found in SEF", -"SXJS0006");throw new I("Invalid checksum in SEF "+z+" != "+Z,"SXJS0006");}}function f(z,A){function D(M,V){function Z(ma){var na=ma.target,ha=z.ca(!0);ha.ta=!1;ha.se=ma;ha.focus=Ac(xc(Nd.Ta(na)[0]));ha.va=M;ma=Fe(z);ma=new Ke.Rc(ma);return(ha=ea.Kb(ha,ma))?ha.expand():[]}var ea=M.mode;-1==="httpabort afterprint beforeprint beforeunload hashchange languagechange message offline online pagehide pageshow popstate storage unhandledrejection unload resize".split(" ").indexOf(V)?A?A.addEventListener(V, -Z,!1):window.document.addEventListener(V,Z,!1):window.addEventListener(V,Z,!1)}A=void 0===A?null:A;var U=z.fixed.Ma;Object.keys(U).forEach(function(M){M=U[M];M.mode&&M.mode.Kh()&&D(M,M.name.split("}on")[1])})}function H(z,A){return z.C?z.C.filter(function(D){return D.N===A}):[]}function d(z,A,D){function U(y,F){M(z,y,F)}function M(y,F,L){y.N===F&&L(y);y.C&&y.C.forEach(function(Q){M(Q,F,L)})}function V(y){return(y=y.name)?/^Q\{/.test(y)?y:"Q{}"+y:null}function Z(y,F){function L(Q){Q=H(Q,"co");for(var R= -0;Rda.Ib.max&&(da.Ib.max=P);da.Ib.Ba[P]=oa.s}}(L)),55296D?4294967295+D+1:D).toString(16);return z},internals:{Codepoint:lb,Compare:re,Diag:jb,DomUtils:Kc,Expr:Nd,Iter:Gc,NsConst:Ic,Push:Ke,Regex:sb},transform:function(z,A){function D(L){L=X.resolveUri(L.toString(),Z);return ja?L:X.fileURL(L)}function U(L){throw L; -}function M(L,Q){L=new I(L,Q);if(U)U(L);else throw L;}A=!A||"sync"===A;jb.Sa("Transform with options: "+B(z),2);try{var V=p(z);V.Qa&&(V.outputProperties=k(V.Qa))}catch(L){if(A)throw L;return Promise.reject(L)}var Z=X.baseURL();if(V.Sb)var ea=V.Sb=D(V.Sb);else V.qc&&(ea=V.qc=D(V.qc));V.Lf=ea||V.Lf;if(V.ed)var ma=V.ed=D(V.ed);else V.dd&&(ma=V.dd=D(V.dd));V.be=ma||V.be;"function"===typeof X.deliverMessage&&X.deliverMessage(z);"number"===typeof V.yf&&jb.setLogLevel(V.yf);if(A)return n(V);V.async=!0;z= -[];var na=V.stylesheetInternal||null;if(!na)if(ea=V.Kg)try{na=JSON.parse(ea)}catch(L){throw new I("Error parsing supplied SEF","SXJS0006");}else if(V.qc)ea=X.resourcePromise({file:V.qc,encoding:"utf-8"}).then(function(L){na=JSON.parse(L)}).catch(function(L){return Promise.reject(new I("Failed to read JSON input "+V.qc+": "+L,"SXJS0006"))}),z.push(ea);else if(V.Sb)ea=X.resourcePromise({location:V.Sb,encoding:"utf-8",type:"json"}).then(function(L){na=JSON.parse(L)}).catch(function(L){return Promise.reject(new I("Failed to read JSON input "+ -V.Sb+": "+L,"SXJS0006"))}),z.push(ea);else{M("No stylesheet supplied","SXJS0006");return}var ha=V.If;var y=V.fi||"xml";ha&&(ea=V.If.baseURI||V.be)&&(ha._saxonBaseUri=ea);if(!ha){ea=function(L,Q){L=xe.ih(xe.hh(L));L=X.parseXmlFromString(L);Q&&(L._saxonBaseUri=L._saxonDocUri=Q);return L};ma=function(L){return we.Fe(L,null)};var F="xml"===y?ea:ma;V.Jf?ha=F(V.Jf,V.be):V.dd?(ea=X.resourcePromise({file:V.dd}).then(function(L){return ha=F(L,V.dd)}).catch(function(L){return Promise.reject(new I("Failed to read "+ -y.toUpperCase()+" source input ("+L.message+")","SXJS0006"))}),z.push(ea)):V.ed&&(ea=X.resourcePromise({location:V.ed}).then(function(L){ha=F(L,V.ed)}).catch(function(L){return Promise.reject(new I("Failed to read "+y.toUpperCase()+" source input ("+L.message+")","SXJS0006"))}),z.push(ea))}return Promise.all(z).then(function(){var L=na,Q=ha,R=V;if(!L)throw new I("No stylesheet supplied","SXJS0006");try{u(L);L.PRIMED||(r(L),g(L),L.PRIMED=!0);"true"===L.relocatable&&(R.Bg=!0);h(L,Q,R);var w=R.Vj}catch(Y){throw console.log("Transformation failure: "+ -(Y.getMessage?Y.getMessage():Y)),Y;}return w})},Serializer:Re,serialize:function(z,A){var D={"iso-8859-1":"latin1","iso-646":"ascii"};z=Re.serialize(z,A);return A&&A.encoding?(A=A.encoding,A=D[A]||A,gb.makeBuffer(z,A)):z},StringWriter:Re.StringWriter,getProcessorInfo:function(){return{version:3,vendor:"Saxonica",vendorURL:"https://www.saxonica.com/",productName:"SaxonJS",productVersion:"2.4",isSchemaAware:!1,supportsSerialization:!0,supportsBackwardsCompatibility:!0,supportsNamespaceAxis:!0, -supportsStreaming:!1,supportsDynamicEvaluation:!0,supportsHigherOrderFunctions:!0,xPathVersion:3.1,xsdVersion:1.1,releaseDate:"2022-05-12"}},getResource:function(z){var A=z.type||"text";if(z.file){var D=X.resourcePromise(z);var U=X.fileURL(z.file)}else if(z.location)if(D=z.location,D instanceof URL||(D=X.newURL(D,X.baseURL()),z.location=D.toString()),U=D.href,"file:"===D.protocol)D=X.resourcePromise(z);else if(["http:","https:"].includes(D.protocol))D=X.resourcePromise(z);else return Promise.reject(new I("Unsupported URL protocol "+ -D.protocol,"SXJS0006"));else if(z.text)D=Promise.resolve(z.text),z.baseURI&&(U=z.baseURI);else return Promise.reject(new I("No resource supplied","SXJS0006"));"xml"===A?D=D.then(function(M){try{var V=Kc.Fc(X.parseXmlFromString(M));V._saxonBaseUri=V._saxonDocUri=U;return Promise.resolve(V)}catch(Z){return Promise.reject(new I("Failed parsing XML in "+U+": "+Z.message,Z.code))}}):"json"===A&&(D=D.then(function(M){try{return Promise.resolve(we.Fe(M,new Mc,new Xe))}catch(V){return Promise.reject(new I("Failed parsing JSON in "+ -U+": "+V.message,V.code))}}));return D},setLogLevel:jb.setLogLevel,getLogLevel:function(){return jb.yf},setPlatform:a,getPlatform:function(){return X},getNavigator:function(){return window.navigator.userAgent},timeStamp:ja&&window.performance&&window.performance.now?window.performance.now:function(){return Date.now().valueOf()},internalTransform:h,checkOptions:p,convertResult:K,makeAtomicValue:function(z,A){return wb.type[z].fromString(A)},registerExtensionFunctions:function(z){Hi.dg(z);Ji.dg(z)}, -getItemDetails:function(z){if(wb.sa(z)){var A={variety:"atomic",type:z.type,value:z.toString()};"AQ"===z.code&&(A.prefix=z.prefix,A.uri=z.uri,A.local=z.local);return A}return Kc.V(z)?{variety:"node",type:z.nodeType()}:{variety:z instanceof Kd?"array":"map"}},getConfigurationProperties:function(){var z={};Object.keys(fa).forEach(function(A){z[A]=fa[A]});return z},getConfigurationProperty:function(z){if(z in fa)return fa[z]},setConfigurationProperties:function(z){var A={};Object.keys(fa).forEach(function(D){A[D]= -fa[D]});Object.keys(z).forEach(function(D){"autoResetIndexes"==D?fa[D]=!!z[D]:console.log("The configuration property "+D+" is unrecognized")});return A},setConfigurationProperty:function(z,A){if("autoResetIndexes"==z){var D=fa[z];fa[z]=!!A;return D}console.log("The configuration property "+z+" is unrecognized")},resetIndexes:function(z){ja&&!z&&(z=window.document);return z&&"_saxonIndexes"in z?(delete z._saxonIndexes,delete z._saxonIndexesBC,!0):!1},XdmArray:Kd,XdmAtomicValue:tb,XdmAttributeNode:Jc, -XdmFunction:Ld,XdmMap:Mc,XError:I,XPath:Ci,XS:ra};ja||"undefined"!==typeof HostPlatform?(HostPlatform.entryPoint=ca,a(HostPlatform),X.expose(ca,"SaxonJS")):console.log("Platform binding delayed");ca.Developer=Ki;wb.ag();sb.ag();cd();te.register("SaxonJS",ca);return ca})();}).call(this); - diff --git a/src/web/public/content b/src/web/public/content deleted file mode 120000 index f574e64e8..000000000 --- a/src/web/public/content +++ /dev/null @@ -1 +0,0 @@ -../../../dist/content \ No newline at end of file diff --git a/src/web/public/favicon.ico b/src/web/public/favicon.ico deleted file mode 100644 index 8d6e73ef3..000000000 Binary files a/src/web/public/favicon.ico and /dev/null differ diff --git a/src/web/public/robots.txt b/src/web/public/robots.txt deleted file mode 100644 index e9e57dc4d..000000000 --- a/src/web/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/src/web/screenshot.png b/src/web/screenshot.png deleted file mode 100644 index ee5b2fdae..000000000 Binary files a/src/web/screenshot.png and /dev/null differ diff --git a/src/web/src/browser/index.ts b/src/web/src/browser/index.ts deleted file mode 100644 index 3143c8b58..000000000 --- a/src/web/src/browser/index.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { highlightXML } from '@asap/shared/adapters/highlight-js'; -import { - SaxonJsJsonOscalToXmlProcessor, - SaxonJsSchematronProcessorGateway, -} from '@asap/shared/adapters/saxon-js-gateway'; -import * as github from '@asap/shared/domain/github'; -import { - SchematronProcessor, - SchematronRulesetKey, - SchematronRulesetKeys, -} from '@asap/shared/domain/schematron'; -import { AnnotateXMLUseCase } from '@asap/shared/use-cases/annotate-xml'; -import { OscalService } from '@asap/shared/use-cases/oscal'; - -import { getInitialState } from './presenter'; -import { createAppRenderer } from './views'; - -// The npm version of saxon-js is for node; currently, we load the browser -// version via a script tag in index.html. -const SaxonJS = (window as any).SaxonJS; - -type BrowserContext = { - element: HTMLElement; - baseUrl: `${string}/`; - githubRepository: github.GithubRepository; -}; - -export const runBrowserContext = ({ - element, - baseUrl, - githubRepository, -}: BrowserContext) => { - // Set SaxonJS log level. - SaxonJS.setLogLevel(2); - - const rulesUrl = `${baseUrl}rules/`; - - const renderApp = createAppRenderer( - element, - getInitialState({ - baseUrl, - sourceRepository: { - treeUrl: github.getBranchTreeUrl(githubRepository), - sampleDocuments: github.getSampleOscalDocuments(githubRepository), - developerExampleUrl: github.getDeveloperExampleUrl(githubRepository), - newIssueUrl: github.getNewIssueUrl(githubRepository), - }, - }), - { - location: { - getCurrent: () => window.location.hash, - listen: (listener: (url: string) => void) => { - window.addEventListener('hashchange', event => { - const hashchangeEvent = event as HashChangeEvent; - listener(`#${hashchangeEvent.newURL.split('#')[1]}`); - }); - }, - replace: (url: string) => window.history.replaceState(null, '', url), - }, - useCases: { - annotateXML: AnnotateXMLUseCase({ - xml: { - formatXML: highlightXML, - // skip indenting the XML for now. - indentXml: s => Promise.resolve(s), - }, - SaxonJS, - }), - getAssertionViews: async (rulesetKey: SchematronRulesetKey) => { - const responses = await Promise.all([ - fetch(`${rulesUrl}${rulesetKey}/assertion-views-poam.json`).then( - response => response.json(), - ), - fetch(`${rulesUrl}${rulesetKey}/assertion-views-sap.json`).then( - response => response.json(), - ), - fetch(`${rulesUrl}${rulesetKey}/assertion-views-sar.json`).then( - response => response.json(), - ), - fetch(`${rulesUrl}${rulesetKey}/assertion-views-ssp.json`).then( - response => response.json(), - ), - ]); - return { - poam: responses[0], - sap: responses[1], - sar: responses[2], - ssp: responses[3], - }; - }, - getSchematronAssertions: async (rulesetKey: SchematronRulesetKey) => { - const responses = await Promise.all([ - fetch(`${rulesUrl}${rulesetKey}/poam.json`).then(response => - response.json(), - ), - fetch(`${rulesUrl}${rulesetKey}/sap.json`).then(response => - response.json(), - ), - fetch(`${rulesUrl}${rulesetKey}/sar.json`).then(response => - response.json(), - ), - fetch(`${rulesUrl}${rulesetKey}/ssp.json`).then(response => - response.json(), - ), - ]); - return { - poam: responses[0], - sap: responses[1], - sar: responses[2], - ssp: responses[3], - }; - }, - getXSpecScenarioSummaries: async (rulesetKey: SchematronRulesetKey) => { - const responses = await Promise.all([ - fetch(`${rulesUrl}${rulesetKey}/xspec-summary-poam.json`).then( - response => response.json(), - ), - fetch(`${rulesUrl}${rulesetKey}/xspec-summary-sap.json`).then( - response => response.json(), - ), - fetch(`${rulesUrl}${rulesetKey}/xspec-summary-sar.json`).then( - response => response.json(), - ), - fetch(`${rulesUrl}${rulesetKey}/xspec-summary-ssp.json`).then( - response => response.json(), - ), - ]); - return { - poam: responses[0], - sap: responses[1], - sar: responses[2], - ssp: responses[3], - }; - }, - oscalService: new OscalService( - { - ssp: SaxonJsJsonOscalToXmlProcessor({ - console, - sefUrl: `${rulesUrl}oscal_ssp_json-to-xml-converter.sef.json`, - SaxonJS, - }), - sap: SaxonJsJsonOscalToXmlProcessor({ - console, - sefUrl: `${rulesUrl}oscal_assessment-plan_json-to-xml-converter.sef.json`, - SaxonJS, - }), - sar: SaxonJsJsonOscalToXmlProcessor({ - console, - sefUrl: `${rulesUrl}oscal_assessment-results_json-to-xml-converter.sef.json`, - SaxonJS, - }), - poam: SaxonJsJsonOscalToXmlProcessor({ - console, - sefUrl: `${rulesUrl}oscal_poam_json-to-xml-converter.sef.json`, - SaxonJS, - }), - }, - Object.fromEntries( - SchematronRulesetKeys.map(rulesetKey => [ - rulesetKey, - SaxonJsSchematronProcessorGateway({ - console, - sefUrls: { - poam: `${baseUrl}rules/${rulesetKey}/poam.sef.json`, - sap: `${baseUrl}rules/${rulesetKey}/sap.sef.json`, - sar: `${baseUrl}rules/${rulesetKey}/sar.sef.json`, - ssp: `${baseUrl}rules/${rulesetKey}/ssp.sef.json`, - }, - SaxonJS, - baselinesBaseUrl: `${baseUrl}content/${rulesetKey}/baselines/xml`, - registryBaseUrl: `${baseUrl}content/${rulesetKey}/resources/xml`, - }), - ]), - ) as Record, - window.fetch.bind(window), - console, - ), - }, - }, - ); - renderApp(); -}; diff --git a/src/web/src/browser/presenter/actions/assertion-documentation.ts b/src/web/src/browser/presenter/actions/assertion-documentation.ts deleted file mode 100644 index 02409b47c..000000000 --- a/src/web/src/browser/presenter/actions/assertion-documentation.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { OscalDocumentKey } from '@asap/shared/domain/oscal'; -import { SchematronRulesetKeys } from '@asap/shared/domain/schematron'; -import type { ActionContext } from '..'; - -export const initialize = ({ dispatch, effects }: ActionContext) => { - SchematronRulesetKeys.map(rulesetKey => { - effects.useCases - .getXSpecScenarioSummaries(rulesetKey) - .then(xspecScenarioSummaries => { - dispatch({ - machine: 'assertionDocumentation', - type: 'ASSERTION_DOCUMENTATION_SUMMARIES_LOADED', - data: { - xspecScenarioSummaries, - }, - }); - }); - }); -}; - -export const close = ({ dispatch }: ActionContext) => { - dispatch({ - machine: 'assertionDocumentation', - type: 'ASSERTION_DOCUMENTATION_CLOSE', - }); -}; - -export const show = - ({ - assertionId, - documentType, - }: { - assertionId: string; - documentType: OscalDocumentKey; - }) => - ({ dispatch }: ActionContext) => { - dispatch({ - machine: 'assertionDocumentation', - type: 'ASSERTION_DOCUMENTATION_SHOW', - data: { assertionId, documentType }, - }); - }; diff --git a/src/web/src/browser/presenter/actions/index.ts b/src/web/src/browser/presenter/actions/index.ts deleted file mode 100644 index 02a088c62..000000000 --- a/src/web/src/browser/presenter/actions/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -export * as assertionDocumentation from './assertion-documentation'; -import * as assertionDocumentation from './assertion-documentation'; -export * as schematron from './schematron'; -import * as schematron from './schematron'; -export * as validator from './validator'; - -import type { ActionContext } from '..'; -import * as router from '../state/router'; - -export const initializeApplication = (config: ActionContext) => { - setCurrentRoute(config.effects.location.getCurrent())(config); - config.effects.location.listen((url: string) => { - setCurrentRoute(url)(config); - }); - schematron.initialize(config); - assertionDocumentation.initialize(config); -}; - -export const setCurrentRoute = - (url: string) => - ({ dispatch, effects }: ActionContext) => { - const route = router.getRoute(url); - if (route.type !== 'NotFound') { - dispatch({ - machine: 'router', - type: 'ROUTE_CHANGED', - data: { route }, - }); - effects.location.replace(router.getUrl(route)); - } - }; diff --git a/src/web/src/browser/presenter/actions/schematron.ts b/src/web/src/browser/presenter/actions/schematron.ts deleted file mode 100644 index d38a56144..000000000 --- a/src/web/src/browser/presenter/actions/schematron.ts +++ /dev/null @@ -1,155 +0,0 @@ -import type { OscalDocumentKey } from '@asap/shared/domain/oscal'; -import { - SchematronRulesetKey, - SchematronRulesetKeys, - SCHEMATRON_RULESETS, -} from '@asap/shared/domain/schematron'; - -import type { ActionContext } from '..'; -import type { - FedRampSpecific, - PassStatus, - Role, -} from '../state/ruleset/schematron-machine'; - -export const initialize = (config: ActionContext) => { - SchematronRulesetKeys.map(rulesetKey => { - Promise.all([ - config.effects.useCases.getAssertionViews(rulesetKey), - config.effects.useCases.getSchematronAssertions(rulesetKey), - ]).then(([assertionViews, schematronAsserts]) => { - config.dispatch({ - machine: `${rulesetKey}.oscalDocuments.poam`, - type: 'CONFIG_LOADED', - data: { - config: { - assertionViews: assertionViews.poam, - schematronAsserts: schematronAsserts.poam, - }, - }, - }); - config.dispatch({ - machine: `${rulesetKey}.oscalDocuments.sap`, - type: 'CONFIG_LOADED', - data: { - config: { - assertionViews: assertionViews.sap, - schematronAsserts: schematronAsserts.sap, - }, - }, - }); - config.dispatch({ - machine: `${rulesetKey}.oscalDocuments.sar`, - type: 'CONFIG_LOADED', - data: { - config: { - assertionViews: assertionViews.sar, - schematronAsserts: schematronAsserts.sar, - }, - }, - }); - config.dispatch({ - machine: `${rulesetKey}.oscalDocuments.ssp`, - type: 'CONFIG_LOADED', - data: { - config: { - assertionViews: assertionViews.ssp, - schematronAsserts: schematronAsserts.ssp, - }, - }, - }); - }); - }); -}; - -export const setFilterFedrampOption = - ({ - documentType, - rulesetKey, - fedrampFilterOption, - }: { - documentType: OscalDocumentKey; - rulesetKey: SchematronRulesetKey; - fedrampFilterOption: FedRampSpecific; - }) => - (config: ActionContext) => { - config.dispatch({ - machine: `${rulesetKey}.oscalDocuments.${documentType}`, - type: 'FILTER_FEDRAMPSPECIFIC_CHANGED', - data: { fedrampSpecificOption: fedrampFilterOption }, - }); - }; - -export const setFilterRole = - ({ - documentType, - role, - rulesetKey, - }: { - documentType: OscalDocumentKey; - role: Role; - rulesetKey: SchematronRulesetKey; - }) => - (config: ActionContext) => { - config.dispatch({ - machine: `${rulesetKey}.oscalDocuments.${documentType}`, - type: 'FILTER_ROLE_CHANGED', - data: { role }, - }); - }; - -export const setFilterText = - ({ - documentType, - text, - rulesetKey, - }: { - documentType: OscalDocumentKey; - text: string; - rulesetKey: SchematronRulesetKey; - }) => - (config: ActionContext) => { - config.dispatch({ - machine: `${rulesetKey}.oscalDocuments.${documentType}`, - type: 'FILTER_TEXT_CHANGED', - data: { text }, - }); - }; - -export const setFilterAssertionView = - ({ - documentType, - assertionViewId, - rulesetKey, - }: { - documentType: OscalDocumentKey; - assertionViewId: number; - rulesetKey: SchematronRulesetKey; - }) => - ({ dispatch }: ActionContext) => { - dispatch({ - machine: `${rulesetKey}.oscalDocuments.${documentType}`, - type: 'FILTER_ASSERTION_VIEW_CHANGED', - data: { - assertionViewId, - }, - }); - }; - -export const setPassStatus = - ({ - documentType, - passStatus, - rulesetKey, - }: { - documentType: OscalDocumentKey; - passStatus: PassStatus; - rulesetKey: SchematronRulesetKey; - }) => - (config: ActionContext) => { - config.dispatch({ - machine: `${rulesetKey}.oscalDocuments.${documentType}`, - type: 'FILTER_PASS_STATUS_CHANGED', - data: { passStatus }, - }); - }; diff --git a/src/web/src/browser/presenter/actions/validator.ts b/src/web/src/browser/presenter/actions/validator.ts deleted file mode 100644 index 214f73b0f..000000000 --- a/src/web/src/browser/presenter/actions/validator.ts +++ /dev/null @@ -1,198 +0,0 @@ -import type { OscalDocumentKey } from '@asap/shared/domain/oscal'; -import type { - SchematronRulesetKey, - ValidationReport, -} from '@asap/shared/domain/schematron'; -import { setCurrentRoute } from '.'; - -import type { ActionContext } from '..'; -import { StateTransition } from '../state'; -import { getUrl, Routes } from '../state/router'; - -export const reset = ({ dispatch }: ActionContext) => { - dispatch({ - machine: 'validator', - type: 'VALIDATOR_RESET', - }); -}; - -export const validateOscalDocument = - (options: { - rulesetKey: SchematronRulesetKey; - fileName: string; - fileContents: string; - }) => - async (config: ActionContext) => { - reset(config); - config.dispatch({ - machine: 'validator', - type: 'VALIDATOR_PROCESSING_STRING', - data: { fileName: options.fileName }, - }); - const state = config.getState(); - if (state.validator.current === 'PROCESSING') { - config.effects.useCases.oscalService - .validateOscal(options.rulesetKey, options.fileContents) - .then(({ documentType, svrlString, validationReport, xmlString }) => { - setValidationReport({ - documentType, - rulesetKey: options.rulesetKey, - svrlString, - validationReport, - xmlString, - })(config); - }) - .catch((error: Error) => setProcessingError(error.message)(config)); - } - }; - -export const setXmlUrl = - (rulesetKey: SchematronRulesetKey, xmlFileUrl: string) => - async (config: ActionContext) => { - reset(config); - config.dispatch({ - machine: 'validator', - type: 'VALIDATOR_PROCESSING_URL', - data: { xmlFileUrl }, - }); - if (config.getState().validator.current === 'PROCESSING') { - config.effects.useCases.oscalService - .validateOscalByUrl(rulesetKey, xmlFileUrl) - .then(({ documentType, svrlString, validationReport, xmlString }) => { - setValidationReport({ - documentType, - rulesetKey, - svrlString, - validationReport, - xmlString, - })(config); - }) - .catch((error: Error) => setProcessingError(error.message)(config)); - } - }; - -export const setProcessingError = - (errorMessage: string) => - ({ dispatch, getState }: ActionContext) => { - if (getState().validator.current === 'PROCESSING') { - dispatch({ - machine: 'validator', - type: 'VALIDATOR_PROCESSING_ERROR', - data: { errorMessage }, - }); - } - }; - -export const setValidationReport = - ({ - documentType, - rulesetKey, - svrlString, - validationReport, - xmlString, - }: { - documentType: OscalDocumentKey; - rulesetKey: SchematronRulesetKey; - svrlString: string; - validationReport: ValidationReport; - xmlString: string; - }) => - (config: ActionContext) => { - if (config.getState().validator.current === 'PROCESSING') { - config.dispatch({ - machine: 'validator', - type: 'VALIDATOR_VALIDATED', - }); - } - config.effects.useCases - .annotateXML({ - xmlString, - annotations: validationReport.failedAsserts.map(assert => { - return { - uniqueId: assert.uniqueId, - xpath: assert.location, - }; - }), - }) - .then(annotatedXML => { - config.dispatch({ - machine: `${rulesetKey}.validationResults.${documentType}`, - type: 'SET_RESULTS', - data: { - annotatedXML, - svrlString, - validationReport, - }, - }); - }); - config.dispatch( - setCurrentRoute( - getUrl( - { - poam: Routes.documentPOAM(rulesetKey), - sap: Routes.documentSAP(rulesetKey), - sar: Routes.documentSAR(rulesetKey), - ssp: Routes.documentSSP(rulesetKey), - }[documentType], - ), - ), - ); - }; - -export const showAssertionContext = ({ - assertionId, - documentType, - rulesetKey, -}: { - assertionId: string; - documentType: OscalDocumentKey; - rulesetKey: SchematronRulesetKey; -}): StateTransition => ({ - machine: `${rulesetKey}.validationResults.${documentType}`, - type: 'SET_ASSERTION_CONTEXT', - data: { - assertionId, - }, -}); - -export const clearAssertionContext = ( - documentType: OscalDocumentKey, - rulesetKey: SchematronRulesetKey, -): StateTransition => ({ - machine: `${rulesetKey}.validationResults.${documentType}`, - type: 'CLEAR_ASSERTION_CONTEXT', -}); - -export const downloadSVRL = - (documentType: OscalDocumentKey, rulesetKey: SchematronRulesetKey) => - (config: ActionContext) => { - const state = config.getState(); - const validationResults = - state.rulesets[rulesetKey].validationResults[documentType]; - if (validationResults.current === 'HAS_RESULT') { - var element = document.createElement('a'); - element.setAttribute( - 'href', - 'data:text/xml;charset=utf-8,' + - encodeURIComponent(validationResults.svrlString), - ); - element.setAttribute( - 'download', - `${validationResults.summary.title}.svrl.xml`, - ); - element.style.display = 'none'; - document.body.appendChild(element); - element.click(); - document.body.removeChild(element); - } - }; - -export const setSchematronRuleset = - (rulesetKey: SchematronRulesetKey) => - ({ dispatch }: ActionContext) => { - dispatch({ - machine: 'validator', - type: 'VALIDATOR_SET_RULESET', - data: { rulesetKey }, - }); - }; diff --git a/src/web/src/browser/presenter/index.ts b/src/web/src/browser/presenter/index.ts deleted file mode 100644 index 4ae9e95a3..000000000 --- a/src/web/src/browser/presenter/index.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { GetSchematronAssertions } from '@asap/shared/domain/schematron'; -import type { AnnotateXMLUseCase } from '@asap/shared/use-cases/annotate-xml'; -import type { GetAssertionViews } from '@asap/shared/use-cases/assertion-views'; -import type { OscalService } from '@asap/shared/use-cases/oscal'; -import type { GetXSpecScenarioSummaries } from '@asap/shared/use-cases/xspec-summary'; - -import type { Location } from './state/router'; -import { State, StateTransition, initialState } from './state'; - -export type UseCases = { - annotateXML: AnnotateXMLUseCase; - getAssertionViews: GetAssertionViews; - getSchematronAssertions: GetSchematronAssertions; - getXSpecScenarioSummaries: GetXSpecScenarioSummaries; - oscalService: OscalService; -}; - -export type Effects = { - location: Location; - useCases: UseCases; -}; - -export const getInitialState = (config: State['config']) => { - return { - ...initialState, - config, - }; -}; - -export type ActionContext = { - effects: { - location: Location; - useCases: UseCases; - }; - getState: () => State; - dispatch: ActionDispatch; -}; - -export interface ActionDispatch { - < - ThunkAction extends ({ - dispatch, - getState, - effects, - }: { - dispatch: ActionDispatch; - getState: () => S; - effects: E; - }) => unknown, - >( - action: ThunkAction | StateTransition, - ): ReturnType; - (value: A): void; -} diff --git a/src/web/src/browser/presenter/state/assertion-documetation.ts b/src/web/src/browser/presenter/state/assertion-documetation.ts deleted file mode 100644 index 16ed0828c..000000000 --- a/src/web/src/browser/presenter/state/assertion-documetation.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { OscalDocumentKey } from '@asap/shared/domain/oscal'; -import type { XSpecScenarioSummaries } from '@asap/shared/use-cases/xspec-summary'; - -type LoadedState = { - xspecScenarioSummaries: XSpecScenarioSummaries; -}; - -export type State = - | { - current: 'UNINITIALIZED'; - } - | (LoadedState & { - current: 'INITIALIZED'; - }) - | (LoadedState & { - current: 'SHOWING'; - visibleAssertion: { - assertionId: string; - documentType: OscalDocumentKey; - } | null; - }); - -export type StateTransition = - | { - type: 'ASSERTION_DOCUMENTATION_SUMMARIES_LOADED'; - data: { - xspecScenarioSummaries: XSpecScenarioSummaries; - }; - } - | { - type: 'ASSERTION_DOCUMENTATION_CLOSE'; - } - | { - type: 'ASSERTION_DOCUMENTATION_SHOW'; - data: { - assertionId: string; - documentType: OscalDocumentKey; - }; - }; - -export const nextState = (state: State, event: StateTransition): State => { - if (state.current === 'UNINITIALIZED') { - if (event.type === 'ASSERTION_DOCUMENTATION_SUMMARIES_LOADED') { - return { - current: 'INITIALIZED', - xspecScenarioSummaries: event.data.xspecScenarioSummaries, - }; - } - } else if (state.current === 'INITIALIZED') { - if (event.type === 'ASSERTION_DOCUMENTATION_SHOW') { - return { - current: 'SHOWING', - xspecScenarioSummaries: state.xspecScenarioSummaries, - visibleAssertion: event.data, - }; - } - } else if (state.current === 'SHOWING') { - if (event.type === 'ASSERTION_DOCUMENTATION_CLOSE') { - return { - current: 'INITIALIZED', - xspecScenarioSummaries: state.xspecScenarioSummaries, - }; - } - } - return state; -}; - -export const initialState: State = { - current: 'UNINITIALIZED', -}; diff --git a/src/web/src/browser/presenter/state/helpers.test.ts b/src/web/src/browser/presenter/state/helpers.test.ts deleted file mode 100644 index 1b7626303..000000000 --- a/src/web/src/browser/presenter/state/helpers.test.ts +++ /dev/null @@ -1,295 +0,0 @@ -import { it, describe, expect } from 'vitest'; - -import { SchematronAssert } from '@asap/shared/domain/schematron'; -import type { - BaseState, - PassStatus, -} from '../state/ruleset/schematron-machine'; -import * as helpers from './helpers'; - -describe('presenter schematron library', () => { - describe('getSchematronReport', () => { - const testData = { - state: { - config: { - assertionViews: [ - { - title: 'Assertion view title', - groups: [ - { - title: 'Assertion group title', - assertionIds: ['unique-1', 'unique-2'], - groups: undefined, - }, - ], - }, - ], - schematronAsserts: [ - { - id: 'unique-1', - message: 'Assertion message', - role: 'error', - }, - { - id: 'unique-2', - message: 'Assertion message', - role: 'error', - }, - { - id: 'unique-3', - message: 'Assertion message', - role: 'error', - }, - ], - }, - filter: { - fedrampSpecificOption: 'all', - passStatus: 'all' as PassStatus, - role: 'error', - text: '', - assertionViewId: 0, - }, - } as unknown as BaseState, - filterOptions: { - assertionViews: [ - { - index: 0, - title: 'Assertion view title', - count: 5, - }, - ], - roles: [ - { name: 'error', subtitle: 'sub1', count: 5 }, - { name: 'warning', subtitle: 'sub2', count: 6 }, - ], - passStatuses: [ - { - id: 'all' as PassStatus, - count: 5, - title: 'All', - enabled: false, - }, - ], - }, - validator: { - title: 'Validator title', - failedAssertionMap: { - '1': [ - { - uniqueId: 'unique-1', - id: '1', - text: 'Assertion text', - location: '//xpath', - test: 'true/false', - diagnosticReferences: ['Diagnostic text 1'], - }, - ], - '3': [ - { - uniqueId: 'unique-3', - id: '3', - text: 'Assertion text', - location: '//xpath', - test: 'true/false', - diagnosticReferences: ['Diagnostic text 2'], - }, - ], - }, - }, - summariesByAssertionId: { - 'no-security-sensitivity-level': [ - { - assertionId: 'no-security-sensitivity-level', - assertionLabel: 'it is invalid.', - context: - '<system-security-plan xmlns="http://csrc.nist.gov/ns/oscal/1.0">\r\n <system-characteristics>\r\n <security-sensitivity-level/>\r\n </system-characteristics>\r\n</system-security-plan>', - label: - 'For an OSCAL FedRAMP SSP Section 2.1 when the security sensitivity level is not defined at all', - }, - ], - 'invalid-security-sensitivity-level': [ - { - assertionId: 'invalid-security-sensitivity-level', - assertionLabel: 'it is valid.', - context: - '<system-security-plan xmlns="http://csrc.nist.gov/ns/oscal/1.0">\r\n <system-characteristics>\r\n <security-sensitivity-level>\r\n fips-199-low\r\n </security-sensitivity-level>\r\n </system-characteristics>\r\n</system-security-plan>', - label: - 'For an OSCAL FedRAMP SSP Section 2.1 when the security sensitivity level is set to a value from the official FedRAMP list', - }, - ], - }, - }; - - it('works', () => { - const result = helpers.getReportGroups( - testData.state.config.assertionViews[0], - testData.state.config.schematronAsserts, - testData.validator.failedAssertionMap, - ); - expect(result).toEqual([ - { - checks: { - checks: [ - { - fired: [], - icon: { - color: 'green', - sprite: 'check_circle', - }, - id: 'unique-1', - message: 'Assertion message', - role: 'error', - }, - { - fired: [], - icon: { - color: 'green', - sprite: 'check_circle', - }, - id: 'unique-2', - message: 'Assertion message', - role: 'error', - }, - ], - summary: '0 / 2 flagged', - summaryColor: 'green', - }, - isValidated: true, - title: 'Assertion group title', - }, - ]); - }); - }); - - describe('filterAssertions', () => { - it('by role', () => { - expect( - helpers.filterAssertions( - MOCK_SCHEMATRON_ASSERTIONS, - { - fedrampSpecific: 'all', - passStatus: 'all', - role: 'error', - text: '', - assertionViewIds: ['incorrect-role-association'], - }, - ['error', 'info'], - null, - ), - ).toEqual([ - { - id: 'incorrect-role-association', - message: 'incorrect role assertion message', - role: 'error', - referenceUrl: '#TODO', - fedrampSpecific: true, - }, - ]); - }); - it('by text', () => { - expect( - helpers.filterAssertions( - MOCK_SCHEMATRON_ASSERTIONS, - { - fedrampSpecific: 'all', - passStatus: 'all', - role: 'all', - text: 'role assertion', - assertionViewIds: ['incorrect-role-association'], - }, - ['error', 'info'], - null, - ), - ).toEqual([ - { - id: 'incorrect-role-association', - message: 'incorrect role assertion message', - role: 'error', - referenceUrl: '#TODO', - fedrampSpecific: true, - }, - ]); - }); - it('by text exclusive of role', () => { - expect( - helpers.filterAssertions( - MOCK_SCHEMATRON_ASSERTIONS, - { - fedrampSpecific: 'all', - passStatus: 'all', - role: 'non-matching', - text: 'role assertion', - assertionViewIds: ['incorrect-role-association'], - }, - ['error', 'info'], - null, - ), - ).toEqual([]); - }); - it('by role exclusive of text', () => { - expect( - helpers.filterAssertions( - MOCK_SCHEMATRON_ASSERTIONS, - { - fedrampSpecific: 'all', - passStatus: 'all', - role: 'error', - text: 'non-matching', - assertionViewIds: ['incorrect-role-association'], - }, - ['error', 'info'], - null, - ), - ).toEqual([]); - }); - }); -}); - -const MOCK_SCHEMATRON_ASSERTIONS: SchematronAssert[] = [ - { - id: 'incorrect-role-association', - message: 'incorrect role assertion message', - role: 'error', - referenceUrl: '#TODO', - fedrampSpecific: true, - }, - { - id: 'incomplete-core-implemented-requirements', - message: 'incomplete core implemented requirements assertion message', - role: 'info', - referenceUrl: '#TODO', - fedrampSpecific: true, - }, - { - id: 'untriggered-requirement', - message: 'untriggered requirement assertion message', - role: 'warn', - referenceUrl: '#TODO', - fedrampSpecific: true, - }, -]; - -const MOCK_VALIDATION_REPORT = { - title: 'title', - failedAsserts: [ - { - text: 'ASSERT TEXT 1', - test: 'not(exists($extraneous-roles))', - id: 'incorrect-role-association', - uniqueId: 'incorrect-role-association-1', - location: - "/*:system-security-plan[namespace-uri()='http://csrc.nist.gov/ns/oscal/1.0'][1]/*:metadata[namespace-uri()='http://csrc.nist.gov/ns/oscal/1.0'][1]", - diagnosticReferences: [], - }, - { - text: 'ASSERT TEXT 2', - test: 'not(exists($core-missing))', - id: 'incomplete-core-implemented-requirements', - uniqueId: 'incomplete-core-implemented-requirements-1', - role: 'error', - location: - "/*:system-security-plan[namespace-uri()='http://csrc.nist.gov/ns/oscal/1.0'][1]/*:control-implementation[namespace-uri()='http://csrc.nist.gov/ns/oscal/1.0'][1]", - diagnosticReferences: [], - }, - ], -}; diff --git a/src/web/src/browser/presenter/state/helpers.ts b/src/web/src/browser/presenter/state/helpers.ts deleted file mode 100644 index 82f39aa00..000000000 --- a/src/web/src/browser/presenter/state/helpers.ts +++ /dev/null @@ -1,151 +0,0 @@ -import type { - SchematronAssert, - FailedAssert, -} from '@asap/shared/domain/schematron'; -import type { AssertionView } from '@asap/shared/use-cases/assertion-views'; - -import * as state from '../state/ruleset/schematron-machine'; -import { FailedAssertionMap } from '../state/ruleset/validation-results-machine'; - -type Icon = { - sprite: string; - color: string; -}; -const checkCircleIcon: Icon = { sprite: 'check_circle', color: 'green' }; -const removeIcon: Icon = { sprite: 'remove', color: 'black' }; -const cancelIcon: Icon = { - sprite: 'cancel', - color: 'red', -}; - -export type SchematronReportGroups = { - title: string; - isValidated: boolean; - checks: { - summary: string; - summaryColor: 'red' | 'green'; - checks: (SchematronAssert & { - icon: Icon; - fired: FailedAssert[]; - referenceUrl: string; - })[]; - }; -}[]; - -export const getReportGroups = ( - assertionView: AssertionView, - schematronAssertions: SchematronAssert[], - failedAssertionMap: FailedAssertionMap | null, -): SchematronReportGroups => { - const assertionsById = getAssertionsById(schematronAssertions); - return assertionView.groups - .map(assertionGroup => { - type UiAssert = SchematronAssert & { - message: string; - icon: Icon; - fired: FailedAssert[]; - referenceUrl: string; - }; - const isValidated = failedAssertionMap !== null; - - const checks = assertionGroup.assertionIds - .map(assertionGroupAssert => { - const assert = assertionsById[assertionGroupAssert]; - if (!assert) { - return null; - } - const fired = (failedAssertionMap || {})[assert.id] || []; - return { - ...assert, - icon: - failedAssertionMap === null - ? removeIcon - : fired.length - ? cancelIcon - : checkCircleIcon, - fired, - }; - }) - .filter( - (assert: UiAssert | null): assert is UiAssert => assert !== null, - ); - const firedCount = checks.filter( - assert => assert.fired.length > 0, - ).length; - - return { - title: assertionGroup.title, - isValidated, - checks: { - summary: (() => { - if (failedAssertionMap) { - return `${firedCount} / ${checks.length} flagged`; - } else { - return `${checks.length} checks`; - } - })(), - summaryColor: (firedCount === 0 ? 'green' : 'red') as 'red' | 'green', - checks, - }, - }; - }) - .filter(group => group.checks.checks.length > 0); -}; - -export const filterAssertions = ( - schematronAsserts: SchematronAssert[], - filter: { - passStatus: state.PassStatus; - role: state.Role; - text: string; - assertionViewIds: string[]; - fedrampSpecific: state.FedRampSpecific; - }, - roleOptions: state.Role[], - failedAssertionMap: FailedAssertionMap | null, -) => { - const filterRoles = - filter.role === 'all' ? roleOptions.map(role => role) : filter.role; - let assertions = schematronAsserts.filter((assertion: SchematronAssert) => { - return filterRoles.includes(assertion.role || ''); - }); - if (filter.text.length > 0) { - assertions = assertions.filter(assert => { - const searchText = assert.message.toLowerCase(); - return searchText.includes(filter.text.toLowerCase()); - }); - } - assertions = assertions.filter(assert => - filter.assertionViewIds.includes(assert.id), - ); - if (failedAssertionMap && filter.passStatus !== 'all') { - assertions = assertions.filter(assert => { - const failed = !!failedAssertionMap[assert.id]; - return ( - (filter.passStatus === 'fail' && failed) || - (filter.passStatus === 'pass' && !failed) - ); - }); - } - if (filter.fedrampSpecific !== 'all') { - assertions = assertions.filter(assert => { - return ( - (filter.fedrampSpecific === 'fedramp' && assert.fedrampSpecific) || - (filter.fedrampSpecific === 'non-fedramp' && !assert.fedrampSpecific) - ); - }); - } - - return assertions; -}; - -const getAssertionsById = (asserts: SchematronAssert[]) => { - type AssertionMap = { - [assertionId: string]: SchematronAssert; - }; - const assertions: AssertionMap = {}; - asserts.forEach(assert => { - assertions[assert.id] = assert; - }); - return assertions; -}; diff --git a/src/web/src/browser/presenter/state/index.ts b/src/web/src/browser/presenter/state/index.ts deleted file mode 100644 index cdc5e73c0..000000000 --- a/src/web/src/browser/presenter/state/index.ts +++ /dev/null @@ -1,89 +0,0 @@ -import * as assertionDocumentation from './assertion-documetation'; -import * as routerMachine from './router-machine'; -import { - getInitialRulesetsState, - rulesetsReducer, - RulesetsState, -} from './ruleset'; -import * as rulesets from './ruleset'; -import * as validator from './validator-machine'; - -export type State = { - config: { - baseUrl: `${string}/`; - sourceRepository: { - treeUrl?: string; - sampleDocuments: SampleDocument[]; - developerExampleUrl?: string; - newIssueUrl?: string; - }; - }; - assertionDocumentation: assertionDocumentation.State; - router: routerMachine.State; - rulesets: RulesetsState; - validator: validator.State; -}; - -type ScopedTransition = { - machine: 'assertionDocumentation' | 'router' | 'validator'; -}; - -export type StateTransition = - | (ScopedTransition & - ( - | assertionDocumentation.StateTransition - | routerMachine.StateTransition - | validator.StateTransition - )) - | rulesets.ScopedTransition; - -export const initialState: State = { - config: { - baseUrl: '/', - sourceRepository: { - sampleDocuments: [], - }, - }, - assertionDocumentation: assertionDocumentation.initialState, - rulesets: getInitialRulesetsState(), - router: routerMachine.initialState, - validator: validator.initialState, -}; - -export const reduceMachine = ( - machine: string, - nextState: (s: S, e: ST) => S, - state: S, - event: StateTransition, -) => { - if (event.machine === machine) { - return nextState(state, event as unknown as ST); - } - return state; -}; - -export const rootReducer = (state: State, event: StateTransition): State => ({ - config: state.config, - assertionDocumentation: reduceMachine( - 'assertionDocumentation', - assertionDocumentation.nextState, - state.assertionDocumentation, - event, - ), - rulesets: rulesetsReducer( - state.rulesets, - event as unknown as rulesets.ScopedTransition, - ), - router: reduceMachine('router', routerMachine.nextState, state.router, event), - validator: reduceMachine( - 'validator', - validator.nextState, - state.validator, - event, - ), -}); - -export type SampleDocument = { - url: string; - displayName: string; -}; diff --git a/src/web/src/browser/presenter/state/router-machine.ts b/src/web/src/browser/presenter/state/router-machine.ts deleted file mode 100644 index a37f69c89..000000000 --- a/src/web/src/browser/presenter/state/router-machine.ts +++ /dev/null @@ -1,33 +0,0 @@ -import * as router from './router'; - -type BaseState = { - currentRoute: router.Route; -}; - -export type State = BaseState & { - current: 'VALID_PAGE'; -}; - -export type StateTransition = { - type: 'ROUTE_CHANGED'; - data: { - route: router.Route; - }; -}; - -export const nextState = (state: State, event: StateTransition): State => { - if (state.current === 'VALID_PAGE') { - if (event.type === 'ROUTE_CHANGED') { - return { - current: 'VALID_PAGE', - currentRoute: event.data.route, - }; - } - } - return state; -}; - -export const initialState: State = { - current: 'VALID_PAGE', - currentRoute: router.Routes.home, -}; diff --git a/src/web/src/browser/presenter/state/router.test.ts b/src/web/src/browser/presenter/state/router.test.ts deleted file mode 100644 index 358a4724f..000000000 --- a/src/web/src/browser/presenter/state/router.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { it, describe, expect } from 'vitest'; - -import * as router from './router'; - -describe('router', () => { - describe('getRoute', () => { - it('parses /', () => { - expect(router.getRoute('#/')).toEqual({ type: 'Home' }); - }); - it('returns NotFound', () => { - expect(router.getRoute('')).toEqual(router.Routes.notFound); - expect(router.getRoute('#/does-not-exist')).toEqual( - router.Routes.notFound, - ); - }); - }); - describe('getUrl', () => { - it('returns HomeRoute', () => { - expect(router.getUrl(router.Routes.home)).toEqual('#/'); - }); - }); -}); diff --git a/src/web/src/browser/presenter/state/router.ts b/src/web/src/browser/presenter/state/router.ts deleted file mode 100644 index b18ef3816..000000000 --- a/src/web/src/browser/presenter/state/router.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { match } from 'path-to-regexp'; - -import { - SchematronRulesetKey, - SchematronRulesetKeys, -} from '@asap/shared/domain/schematron'; - -export type RouteTypes = { - Home: { type: 'Home' }; - DocumentSummary: { - type: 'DocumentSummary'; - ruleset: SchematronRulesetKey; - }; - DocumentPOAM: { type: 'DocumentPOAM'; ruleset: SchematronRulesetKey }; - DocumentSAP: { type: 'DocumentSAP'; ruleset: SchematronRulesetKey }; - DocumentSAR: { type: 'DocumentSAR'; ruleset: SchematronRulesetKey }; - DocumentSSP: { type: 'DocumentSSP'; ruleset: SchematronRulesetKey }; - Developers: { - type: 'Developers'; - }; -}; - -export type Route = RouteTypes[keyof RouteTypes]; -export type RouteType = Route['type']; -export namespace Routes { - export const home: RouteTypes['Home'] = { - type: 'Home', - }; - export const defaultDocumentSummary: RouteTypes['DocumentSummary'] = { - type: 'DocumentSummary', - ruleset: SchematronRulesetKeys[0], - }; - export const documentSummary = ( - ruleset: SchematronRulesetKey, - ): RouteTypes['DocumentSummary'] => ({ - type: 'DocumentSummary', - ruleset, - }); - export const documentPOAM = ( - ruleset: SchematronRulesetKey, - ): RouteTypes['DocumentPOAM'] => ({ - type: 'DocumentPOAM', - ruleset, - }); - export const documentSAP = ( - ruleset: SchematronRulesetKey, - ): RouteTypes['DocumentSAP'] => ({ - type: 'DocumentSAP', - ruleset, - }); - export const documentSAR = ( - ruleset: SchematronRulesetKey, - ): RouteTypes['DocumentSAR'] => ({ - type: 'DocumentSAR', - ruleset, - }); - export const documentSSP = ( - ruleset: SchematronRulesetKey, - ): RouteTypes['DocumentSSP'] => ({ - type: 'DocumentSSP', - ruleset, - }); - export const developers: RouteTypes['Developers'] = { - type: 'Developers', - }; - export type NotFound = { type: 'NotFound' }; - export const notFound: NotFound = { type: 'NotFound' }; -} - -const RouteUrl: Record string> = { - Home: () => '#/', - DocumentSummary: (route: RouteTypes['DocumentSummary']) => - `#/${route.ruleset}/documents`, - DocumentPOAM: (route: RouteTypes['DocumentPOAM']) => - `#/${route.ruleset}/documents/plan-of-action-and-milestones`, - DocumentSAP: (route: RouteTypes['DocumentSAP']) => - `#/${route.ruleset}/documents/security-assessment-plan`, - DocumentSAR: (route: RouteTypes['DocumentSAR']) => - `#/${route.ruleset}/documents/security-assessment-report`, - DocumentSSP: (route: RouteTypes['DocumentSSP']) => - `#/${route.ruleset}/documents/system-security-plan`, - Developers: () => '#/developers', -}; - -export const getUrl = (route: Route): string => { - return RouteUrl[route.type](route); -}; - -const matchRoute = ( - urlPattern: string, - createRoute: (params?: any) => L, -) => { - const matcher = match(urlPattern); - return (url: string) => { - const match = matcher(url); - if (match) { - return createRoute(match.params); - } - }; -}; - -const RouteMatch: Record Route | undefined> = { - Home: matchRoute('#/', () => Routes.home), - DocumentSummary: matchRoute('#/:ruleset/documents', ({ ruleset }) => - Routes.documentSummary(ruleset), - ), - DocumentPOAM: matchRoute( - '#/:ruleset/documents/plan-of-action-and-milestones', - ({ ruleset }) => Routes.documentPOAM(ruleset), - ), - DocumentSAP: matchRoute( - '#/:ruleset/documents/security-assessment-plan', - ({ ruleset }) => Routes.documentSAP(ruleset), - ), - DocumentSAR: matchRoute( - '#/:ruleset/documents/security-assessment-report', - ({ ruleset }) => Routes.documentSAR(ruleset), - ), - DocumentSSP: matchRoute( - '#/:ruleset/documents/system-security-plan', - ({ ruleset }) => Routes.documentSSP(ruleset), - ), - Developers: matchRoute('#/developers', () => Routes.developers), -}; - -export const getRoute = (url: string): Route | Routes.NotFound => { - for (const routeType of Object.keys(RouteMatch)) { - const route = RouteMatch[routeType as Route['type']](url); - if (route) { - return route; - } - } - return Routes.notFound; -}; - -export type Location = { - getCurrent: () => string; - listen: (listener: (url: string) => void) => void; - replace: (url: string) => void; -}; - -export const isRulesetRoute = (route: Route) => { - return (route as any).ruleset !== undefined; -}; diff --git a/src/web/src/browser/presenter/state/ruleset/index.ts b/src/web/src/browser/presenter/state/ruleset/index.ts deleted file mode 100644 index a6a098e79..000000000 --- a/src/web/src/browser/presenter/state/ruleset/index.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { OscalDocumentKey } from '@asap/shared/domain/oscal'; -import { - SchematronRuleset, - SchematronRulesetKey, - SchematronRulesetKeys, - SCHEMATRON_RULESETS, -} from '@asap/shared/domain/schematron'; -import * as schematron from './schematron-machine'; -import * as validationResults from './validation-results-machine'; - -export type RulesetState = { - meta: SchematronRuleset; - oscalDocuments: { - poam: schematron.State; - sap: schematron.State; - sar: schematron.State; - ssp: schematron.State; - }; - validationResults: { - poam: validationResults.State; - sap: validationResults.State; - sar: validationResults.State; - ssp: validationResults.State; - }; -}; - -const getInitialRulesetState = ( - rulesetKey: SchematronRulesetKey, -): RulesetState => ({ - meta: SCHEMATRON_RULESETS[rulesetKey], - oscalDocuments: { - poam: schematron.initialState, - sap: schematron.initialState, - sar: schematron.initialState, - ssp: schematron.initialState, - }, - validationResults: { - poam: validationResults.initialState, - sap: validationResults.initialState, - sar: validationResults.initialState, - ssp: validationResults.initialState, - }, -}); - -export const getInitialRulesetsState = () => - Object.fromEntries( - SchematronRulesetKeys.map(rulesetKey => [ - rulesetKey, - getInitialRulesetState(rulesetKey), - ]), - ) as Record; -export type RulesetsState = ReturnType; - -export type ScopedTransition = - | ({ - machine: `${SchematronRulesetKey}.oscalDocuments.${OscalDocumentKey}`; - } & schematron.StateTransition) - | ({ - machine: `${SchematronRulesetKey}.validationResults.${OscalDocumentKey}`; - } & validationResults.StateTransition); - -export const reduceMachine = ( - machine: ScopedTransition['machine'], - nextState: (s: S, e: ST) => S, - state: S, - event: ScopedTransition, -) => { - if (event.machine === machine) { - return nextState(state, event as unknown as ST); - } - return state; -}; - -const rulesetNextState = ( - state: RulesetState, - event: ScopedTransition, - rulesetKey: SchematronRulesetKey, -) => ({ - meta: state.meta, - oscalDocuments: { - poam: reduceMachine( - `${rulesetKey}.oscalDocuments.poam`, - schematron.nextState, - state.oscalDocuments.poam, - event, - ), - sap: reduceMachine( - `${rulesetKey}.oscalDocuments.sap`, - schematron.nextState, - state.oscalDocuments.sap, - event, - ), - sar: reduceMachine( - `${rulesetKey}.oscalDocuments.sar`, - schematron.nextState, - state.oscalDocuments.sar, - event, - ), - ssp: reduceMachine( - `${rulesetKey}.oscalDocuments.ssp`, - schematron.nextState, - state.oscalDocuments.ssp, - event, - ), - }, - validationResults: { - poam: reduceMachine( - `${rulesetKey}.validationResults.poam`, - validationResults.nextState, - state.validationResults.poam, - event, - ), - sap: reduceMachine( - `${rulesetKey}.validationResults.sap`, - validationResults.nextState, - state.validationResults.sap, - event, - ), - sar: reduceMachine( - `${rulesetKey}.validationResults.sar`, - validationResults.nextState, - state.validationResults.sar, - event, - ), - ssp: reduceMachine( - `${rulesetKey}.validationResults.ssp`, - validationResults.nextState, - state.validationResults.ssp, - event, - ), - }, -}); - -export const rulesetsReducer = ( - state: RulesetsState, - event: ScopedTransition, -) => - Object.fromEntries( - SchematronRulesetKeys.map(rulesetKey => [ - rulesetKey, - rulesetNextState(state[rulesetKey], event, rulesetKey), - ]), - ) as Record; diff --git a/src/web/src/browser/presenter/state/ruleset/schematron-machine.ts b/src/web/src/browser/presenter/state/ruleset/schematron-machine.ts deleted file mode 100644 index 76a768ac4..000000000 --- a/src/web/src/browser/presenter/state/ruleset/schematron-machine.ts +++ /dev/null @@ -1,187 +0,0 @@ -import type { SchematronAssert } from '@asap/shared/domain/schematron'; -import type { AssertionView } from '@asap/shared/use-cases/assertion-views'; - -export type Role = string; -export type PassStatus = 'pass' | 'fail' | 'all'; -export const FedRampSpecificOptions = [ - 'all', - 'fedramp', - 'non-fedramp', -] as const; -export type FedRampSpecific = typeof FedRampSpecificOptions[number]; - -export type FilterOptions = { - assertionViews: { - index: number; - title: string; - count: number; - }[]; - roles: { - name: Role; - subtitle: string; - count: number; - }[]; - passStatuses: { - id: PassStatus; - title: string; - enabled: boolean; - count: number; - }[]; - fedrampSpecificOptions: { - option: FedRampSpecific; - enabled: boolean; - count: number; - subtitle: string; - }[]; -}; - -export type BaseState = { - config: { - assertionViews: AssertionView[]; - schematronAsserts: SchematronAssert[]; - }; - filter: { - role: Role; - text: string; - assertionViewId: number; - passStatus: PassStatus; - fedrampSpecificOption: FedRampSpecific; - }; -}; - -export type State = - | (BaseState & { - current: 'INITIALIZED'; - }) - | (BaseState & { - current: 'UNINITIALIZED'; - }); - -export type StateTransition = - | { - type: 'FILTER_FEDRAMPSPECIFIC_CHANGED'; - data: { - fedrampSpecificOption: FedRampSpecific; - }; - } - | { - type: 'CONFIG_LOADED'; - data: { - config: State['config']; - }; - } - | { - type: 'FILTER_TEXT_CHANGED'; - data: { - text: string; - }; - } - | { - type: 'FILTER_ROLE_CHANGED'; - data: { - role: Role; - }; - } - | { - type: 'FILTER_ASSERTION_VIEW_CHANGED'; - data: { - assertionViewId: number; - }; - } - | { - type: 'FILTER_PASS_STATUS_CHANGED'; - data: { - passStatus: PassStatus; - }; - }; - -export const getAssertionViewTitleByIndex = ( - assertionViews: FilterOptions['assertionViews'], - index: number, -) => { - if (assertionViews.length === 0) { - return ''; - } - return assertionViews - .filter(view => view.index === index) - .map(() => { - return assertionViews[index]; - })[0].title; -}; - -export const nextState = (state: State, event: StateTransition): State => { - if (state.current === 'UNINITIALIZED') { - if (event.type === 'CONFIG_LOADED') { - return { - current: 'INITIALIZED', - filter: { - fedrampSpecificOption: 'all', - passStatus: 'all', - role: 'all', - text: '', - assertionViewId: 0, - }, - config: event.data.config, - }; - } - } else if (state.current === 'INITIALIZED') { - if (event.type === 'FILTER_TEXT_CHANGED') { - return { - ...state, - filter: { - ...state.filter, - text: event.data.text, - }, - }; - } else if (event.type === 'FILTER_ROLE_CHANGED') { - return { - ...state, - filter: { - ...state.filter, - role: event.data.role, - }, - }; - } else if (event.type === 'FILTER_ASSERTION_VIEW_CHANGED') { - return { - ...state, - filter: { - ...state.filter, - assertionViewId: event.data.assertionViewId, - }, - }; - } else if (event.type === 'FILTER_PASS_STATUS_CHANGED') { - return { - ...state, - filter: { - ...state.filter, - passStatus: event.data.passStatus, - }, - }; - } else if (event.type === 'FILTER_FEDRAMPSPECIFIC_CHANGED') { - return { - ...state, - filter: { - ...state.filter, - fedrampSpecificOption: event.data.fedrampSpecificOption, - }, - }; - } - } - - return state; -}; - -export const initialState: State = { - current: 'UNINITIALIZED', - config: { - assertionViews: [], - schematronAsserts: [], - }, - filter: { - fedrampSpecificOption: 'all', - passStatus: 'all', - role: 'all', - text: '', - assertionViewId: 0, - }, -}; diff --git a/src/web/src/browser/presenter/state/ruleset/validation-results-machine.ts b/src/web/src/browser/presenter/state/ruleset/validation-results-machine.ts deleted file mode 100644 index eea27ec3d..000000000 --- a/src/web/src/browser/presenter/state/ruleset/validation-results-machine.ts +++ /dev/null @@ -1,141 +0,0 @@ -import type { - FailedAssert, - ValidationReport, -} from '@asap/shared/domain/schematron'; - -type BaseState = { - summary: { - firedCount: null | number; - title: string; - }; -}; - -type ResultState = BaseState & { - annotatedXML: string; - assertionsById: Record | null; - failedAssertionCounts: Record | null; - svrlString: string; - validationReport: ValidationReport; -}; - -export type State = - | (BaseState & { - current: 'NO_RESULTS'; - summary: { - firedCount: null; - title: string; - }; - }) - | (ResultState & { - current: 'HAS_RESULT'; - }) - | (ResultState & { - current: 'ASSERTION_CONTEXT'; - assertionId: string; - }); - -export type StateTransition = - | { - type: 'SET_RESULTS'; - data: { - annotatedXML: string; - svrlString: string; - validationReport: ValidationReport; - }; - } - | { - type: 'SET_ASSERTION_CONTEXT'; - data: { - assertionId: string; - }; - } - | { - type: 'CLEAR_ASSERTION_CONTEXT'; - } - | { - type: 'RESET'; - }; - -export type FailedAssertionMap = Record; - -export const getAssertionsById = ({ - failedAssertions, -}: { - failedAssertions: FailedAssert[]; -}) => { - return failedAssertions.reduce((acc, assert) => { - if (acc[assert.id] === undefined) { - acc[assert.id] = []; - } - acc[assert.id].push(assert); - return acc; - }, {} as FailedAssertionMap); -}; - -export const nextState = (state: State, event: StateTransition): State => { - if (state.current === 'NO_RESULTS') { - if (event.type === 'SET_RESULTS') { - return { - current: 'HAS_RESULT', - annotatedXML: event.data.annotatedXML, - assertionsById: getAssertionsById({ - failedAssertions: event.data.validationReport.failedAsserts, - }), - failedAssertionCounts: (() => { - return event.data.validationReport.failedAsserts.reduce< - Record - >((acc, assert) => { - acc[assert.id] = (acc[assert.id] || 0) + 1; - return acc; - }, {}); - })(), - svrlString: event.data.svrlString, - summary: { - firedCount: event.data.validationReport.failedAsserts.length, - title: event.data.validationReport.title, - }, - validationReport: event.data.validationReport, - }; - } - } else if (state.current === 'HAS_RESULT') { - if (event.type === 'RESET') { - return initialState; - } else if (event.type === 'SET_ASSERTION_CONTEXT') { - return { - current: 'ASSERTION_CONTEXT', - assertionsById: state.assertionsById, - assertionId: event.data.assertionId, - annotatedXML: state.annotatedXML, - failedAssertionCounts: state.failedAssertionCounts, - svrlString: state.svrlString, - summary: state.summary, - validationReport: { - ...state.validationReport, - }, - }; - } - } else if (state.current === 'ASSERTION_CONTEXT') { - if (event.type === 'CLEAR_ASSERTION_CONTEXT') { - return { - current: 'HAS_RESULT', - assertionsById: state.assertionsById, - annotatedXML: state.annotatedXML, - failedAssertionCounts: state.failedAssertionCounts, - summary: state.summary, - svrlString: state.svrlString, - validationReport: { - ...state.validationReport, - }, - }; - } - } - return state; -}; - -export const initialState: State = { - current: 'NO_RESULTS', - summary: { - firedCount: null, - title: 'FedRAMP Package Concerns', - }, -}; diff --git a/src/web/src/browser/presenter/state/selectors.test.ts b/src/web/src/browser/presenter/state/selectors.test.ts deleted file mode 100644 index fc29870a9..000000000 --- a/src/web/src/browser/presenter/state/selectors.test.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { selectFilterOptions } from './selectors'; - -describe('selectors', () => { - describe('selectFilterOptions', () => { - it('handles group with two assertions', () => { - const options = selectFilterOptions('ssp', 'rev4').resultFunc( - { - assertionViews: [ - { - title: 'assertion view 1', - groups: [ - { - title: 'assertion group 1', - assertionIds: ['0', '1'], - groups: [], - }, - ], - }, - ], - schematronAsserts: [ - { - id: '0', - message: 'msg0', - role: 'error', - referenceUrl: '#TODO', - fedrampSpecific: true, - }, - { - id: '1', - message: 'msg1', - role: 'error', - referenceUrl: '#TODO', - fedrampSpecific: true, - }, - { - id: '2', - message: 'msg2', - role: 'error', - referenceUrl: '#TODO', - fedrampSpecific: true, - }, - ], - }, - { - fedrampSpecificOption: 'all', - passStatus: 'all', - role: 'error', - text: '', - assertionViewId: 0, - }, - null, - ['0', '1'], - ); - expect(options).toEqual({ - fedrampSpecificOptions: [ - { - count: 2, - enabled: true, - option: 'all', - subtitle: 'All validation rules', - }, - { - count: 2, - enabled: false, - option: 'fedramp', - subtitle: 'FedRAMP-specific validation rules', - }, - { - count: 0, - enabled: false, - option: 'non-fedramp', - subtitle: 'General OSCAL validation rules', - }, - ], - assertionViews: [ - { - index: 0, - title: 'assertion view 1', - count: 2, - groups: [ - { - assertionIds: ['0', '1'], - groups: [], - title: 'assertion group 1', - }, - ], - }, - ], - roles: [ - { name: 'all', subtitle: 'View all rules', count: 2 }, - { - name: 'error', - subtitle: 'View required, critical rules', - count: 2, - }, - ], - passStatuses: [ - { - count: 2, - enabled: false, - id: 'all', - title: 'All assertions', - }, - { - count: 2, - enabled: false, - id: 'pass', - title: 'Passing assertions', - }, - { - count: 2, - enabled: false, - id: 'fail', - title: 'Failing assertions', - }, - ], - }); - }); - }); - - describe('selectFilterOptions', () => { - it('handles empty state', () => { - const options = selectFilterOptions('ssp', 'rev4').resultFunc( - { - assertionViews: [], - schematronAsserts: [], - }, - { - fedrampSpecificOption: 'all', - passStatus: 'all', - role: 'error', - text: '', - assertionViewId: 1, - }, - null, - ['0', '1'], - ); - expect(options).toEqual({ - fedrampSpecificOptions: [ - { - count: 0, - option: 'all', - enabled: true, - subtitle: 'All validation rules', - }, - { - count: 0, - option: 'fedramp', - enabled: false, - subtitle: 'FedRAMP-specific validation rules', - }, - { - count: 0, - option: 'non-fedramp', - enabled: false, - subtitle: 'General OSCAL validation rules', - }, - ], - assertionViews: [], - roles: [ - { - count: 0, - name: 'all', - subtitle: 'View all rules', - }, - ], - passStatuses: [ - { - count: 0, - enabled: false, - id: 'all', - title: 'All assertions', - }, - { - count: 0, - enabled: false, - id: 'pass', - title: 'Passing assertions', - }, - { - count: 0, - enabled: false, - id: 'fail', - title: 'Failing assertions', - }, - ], - }); - }); - }); -}); diff --git a/src/web/src/browser/presenter/state/selectors.ts b/src/web/src/browser/presenter/state/selectors.ts deleted file mode 100644 index 66ca04ba4..000000000 --- a/src/web/src/browser/presenter/state/selectors.ts +++ /dev/null @@ -1,287 +0,0 @@ -import { createSelector, defaultMemoize as memoize } from 'reselect'; - -import { OscalDocumentKey } from '@asap/shared/domain/oscal'; -import { AssertionView } from '@asap/shared/use-cases/assertion-views'; - -import { State } from '.'; -import { filterAssertions, getReportGroups } from './helpers'; -import { - FedRampSpecific, - FedRampSpecificOptions, - FilterOptions, - PassStatus, - Role, -} from './ruleset/schematron-machine'; -import { SchematronRulesetKey } from '@asap/shared/domain/schematron'; - -const selectOscalDocument = memoize( - (documentType: OscalDocumentKey, rulesetKey: SchematronRulesetKey) => - (state: State) => - state.rulesets[rulesetKey].oscalDocuments[documentType], -); - -export const selectValidationResult = memoize( - (documentType: OscalDocumentKey, rulesetKey: SchematronRulesetKey) => - (state: State) => - state.rulesets[rulesetKey].validationResults[documentType], -); -const selectFilter = memoize( - (documentType: OscalDocumentKey, rulesetKey: SchematronRulesetKey) => - (state: State) => - state.rulesets[rulesetKey].oscalDocuments[documentType].filter, -); - -const selectFailedAssertionMap = memoize( - (documentType: OscalDocumentKey, rulesetKey: SchematronRulesetKey) => - createSelector( - selectValidationResult(documentType, rulesetKey), - validationResult => - validationResult.current !== 'NO_RESULTS' - ? validationResult.assertionsById - : null, - ), -); - -const selectOscalDocumentConfig = memoize( - (documentType: OscalDocumentKey, rulesetKey: SchematronRulesetKey) => - createSelector( - selectOscalDocument(documentType, rulesetKey), - oscalDocument => oscalDocument.config, - ), -); - -export const selectFilterOptions = memoize( - (documentType: OscalDocumentKey, rulesetKey: SchematronRulesetKey) => - createSelector( - selectOscalDocumentConfig(documentType, rulesetKey), - selectFilter(documentType, rulesetKey), - selectFailedAssertionMap(documentType, rulesetKey), - selectAssertionViewIds(documentType, rulesetKey), - (config, filter, failedAssertionMap, assertionViewIds): FilterOptions => { - const availableRoles = Array.from( - new Set(config.schematronAsserts.map(assert => assert.role)), - ); - return { - fedrampSpecificOptions: FedRampSpecificOptions.map( - (option: FedRampSpecific) => ({ - option, - enabled: filter.fedrampSpecificOption === option, - subtitle: - { - all: 'All validation rules', - fedramp: 'FedRAMP-specific validation rules', - 'non-fedramp': 'General OSCAL validation rules', - }[option] || '', - count: filterAssertions( - config.schematronAsserts, - { - fedrampSpecific: option, - passStatus: filter.passStatus, - role: filter.role, - text: filter.text, - assertionViewIds, - }, - availableRoles, - failedAssertionMap, - ).length, - }), - ), - - assertionViews: config.assertionViews.map((view, index) => ({ - ...view, - index, - count: filterAssertions( - config.schematronAsserts, - { - fedrampSpecific: filter.fedrampSpecificOption, - passStatus: filter.passStatus, - role: filter.role, - text: filter.text, - assertionViewIds: ( - config.assertionViews[index] as AssertionView - ).groups.flatMap(group => group.assertionIds), - }, - availableRoles, - failedAssertionMap, - ).length, - })), - roles: [ - ...['all', ...availableRoles.sort()].map((role: Role) => { - return { - name: role, - subtitle: - { - all: 'View all rules', - error: 'View required, critical rules', - fatal: 'View rules required for rule validation', - information: 'View optional rules', - warning: 'View suggested rules', - }[role] || '', - count: filterAssertions( - config.schematronAsserts, - { - fedrampSpecific: filter.fedrampSpecificOption, - passStatus: filter.passStatus, - role, - text: filter.text, - assertionViewIds, - }, - availableRoles, - failedAssertionMap, - ).length, - }; - }), - ], - passStatuses: [ - { - id: 'all' as PassStatus, - title: 'All assertions', - enabled: failedAssertionMap !== null, - count: filterAssertions( - config.schematronAsserts, - { - fedrampSpecific: filter.fedrampSpecificOption, - passStatus: 'all', - role: filter.role, - text: filter.text, - assertionViewIds, - }, - availableRoles, - failedAssertionMap, - ).length, - }, - { - id: 'pass' as PassStatus, - title: 'Passing assertions', - enabled: failedAssertionMap !== null, - count: filterAssertions( - config.schematronAsserts, - { - fedrampSpecific: filter.fedrampSpecificOption, - passStatus: 'pass', - role: filter.role, - text: filter.text, - assertionViewIds, - }, - availableRoles, - failedAssertionMap, - ).length, - }, - { - id: 'fail' as PassStatus, - title: 'Failing assertions', - enabled: failedAssertionMap !== null, - count: filterAssertions( - config.schematronAsserts, - { - fedrampSpecific: filter.fedrampSpecificOption, - passStatus: 'fail', - role: filter.role, - text: filter.text, - assertionViewIds, - }, - availableRoles, - failedAssertionMap, - ).length, - }, - ], - }; - }, - ), -); - -const selectAssertionViewIds = memoize( - (documentType: OscalDocumentKey, rulesetKey: SchematronRulesetKey) => - createSelector( - selectOscalDocumentConfig(documentType, rulesetKey), - selectFilter(documentType, rulesetKey), - (config, filter) => { - const assertionViews = config.assertionViews.map((view, index) => { - return { - index, - title: view.title, - }; - }); - const assertionView = assertionViews - .filter(view => view.index === filter.assertionViewId) - .map(() => { - return config.assertionViews[filter.assertionViewId]; - })[0] || { - title: '', - groups: [], - }; - return assertionView.groups.map(group => group.assertionIds).flat(); - }, - ), -); - -export const selectSchematronReport = memoize( - (documentType: OscalDocumentKey, rulesetKey: SchematronRulesetKey) => - createSelector( - selectOscalDocumentConfig(documentType, rulesetKey), - selectFilter(documentType, rulesetKey), - selectFilterOptions(documentType, rulesetKey), - selectValidationResult(documentType, rulesetKey), - (config, filter, filterOptions, validationResult) => { - const assertionView = filterOptions.assertionViews - .filter(view => view.index === filter.assertionViewId) - .map(() => { - return config.assertionViews[filter.assertionViewId]; - })[0] || { - title: '', - groups: [], - }; - - const failedAssertionMap = - validationResult.current !== 'NO_RESULTS' - ? validationResult.assertionsById - : null; - - const schematronChecksFiltered = filterAssertions( - config.schematronAsserts, - { - fedrampSpecific: filter.fedrampSpecificOption, - passStatus: filter.passStatus, - role: filter.role, - text: filter.text, - assertionViewIds: assertionView.groups - .map(group => group.assertionIds) - .flat(), - }, - filterOptions.roles.map(role => role.name), - failedAssertionMap, - ); - - return { - groups: getReportGroups( - assertionView, - schematronChecksFiltered, - failedAssertionMap, - ), - assertionCount: schematronChecksFiltered.length, - }; - }, - ), -); - -export const selectVisibleScenarioSummaries = memoize( - (rulesetKey: SchematronRulesetKey) => - createSelector( - (state: State) => state.assertionDocumentation, - (state: State) => state.rulesets[rulesetKey].oscalDocuments, - (assertionDocumentation, oscalDocuments) => { - if (assertionDocumentation.current === 'SHOWING') { - const visibleAssertion = assertionDocumentation.visibleAssertion; - if (visibleAssertion === null) { - return []; - } - return ( - assertionDocumentation.xspecScenarioSummaries[ - visibleAssertion.documentType - ][visibleAssertion.assertionId] || [] - ); - } - return []; - }, - ), -); diff --git a/src/web/src/browser/presenter/state/validator-machine.ts b/src/web/src/browser/presenter/state/validator-machine.ts deleted file mode 100644 index a31d26b8a..000000000 --- a/src/web/src/browser/presenter/state/validator-machine.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { - SchematronRulesetKey, - SchematronRulesetKeys, - SCHEMATRON_RULESETS, -} from '@asap/shared/domain/schematron'; - -type BaseState = { - ruleset: { - selected: SchematronRulesetKey; - choices: typeof SCHEMATRON_RULESETS; - }; -}; - -export type State = BaseState & - ( - | { - current: 'UNLOADED'; - } - | { - current: 'PROCESSING'; - message: string; - } - | { - current: 'PROCESSING_ERROR'; - errorMessage: string; - } - | { - current: 'VALIDATED'; - } - ); - -export type StateTransition = - | { - type: 'VALIDATOR_RESET'; - } - | { - type: 'VALIDATOR_PROCESSING_URL'; - data: { - xmlFileUrl: string; - }; - } - | { - type: 'VALIDATOR_PROCESSING_STRING'; - data: { - fileName: string; - }; - } - | { - type: 'VALIDATOR_PROCESSING_ERROR'; - data: { - errorMessage: string; - }; - } - | { - type: 'VALIDATOR_VALIDATED'; - } - | { - type: 'VALIDATOR_SET_RULESET'; - data: { - rulesetKey: SchematronRulesetKey; - }; - }; - -export const nextState = (state: State, event: StateTransition): State => { - // Handle VALIDATOR_SET_RULESET event - if ( - state.current !== 'PROCESSING' && - event.type === 'VALIDATOR_SET_RULESET' - ) { - return { - ...state, - ruleset: { - ...state.ruleset, - selected: event.data.rulesetKey, - }, - }; - } - // Handle all other events - if (state.current === 'PROCESSING_ERROR') { - if (event.type === 'VALIDATOR_RESET') { - return { - current: 'UNLOADED', - ruleset: state.ruleset, - }; - } - } else if (state.current === 'VALIDATED') { - if (event.type === 'VALIDATOR_RESET') { - return { - current: 'UNLOADED', - ruleset: state.ruleset, - }; - } - } else if (state.current === 'UNLOADED') { - if (event.type === 'VALIDATOR_RESET') { - return { - current: 'UNLOADED', - ruleset: state.ruleset, - }; - } - if (event.type === 'VALIDATOR_PROCESSING_URL') { - return { - current: 'PROCESSING', - message: `Processing ${event.data.xmlFileUrl}...`, - ruleset: state.ruleset, - }; - } - if (event.type === 'VALIDATOR_PROCESSING_STRING') { - return { - current: 'PROCESSING', - message: `Processing local file...`, - ruleset: state.ruleset, - }; - } - if (event.type === 'VALIDATOR_PROCESSING_ERROR') { - return { - current: 'PROCESSING_ERROR', - errorMessage: event.data.errorMessage, - ruleset: state.ruleset, - }; - } - } else if (state.current === 'PROCESSING') { - if (event.type === 'VALIDATOR_PROCESSING_ERROR') { - return { - current: 'PROCESSING_ERROR', - errorMessage: event.data.errorMessage, - ruleset: state.ruleset, - }; - } else if (event.type === 'VALIDATOR_VALIDATED') { - return { - current: 'VALIDATED', - ruleset: state.ruleset, - }; - } - } - return state; -}; - -export const initialState: State = { - current: 'UNLOADED', - ruleset: { - selected: SchematronRulesetKeys[0], - choices: SCHEMATRON_RULESETS, - }, -}; diff --git a/src/web/src/browser/util/file-input.test.ts b/src/web/src/browser/util/file-input.test.ts deleted file mode 100644 index a873caf25..000000000 --- a/src/web/src/browser/util/file-input.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { it, describe, expect, vi } from 'vitest'; -import type { ChangeEvent } from 'react'; - -import { onFileInputChangeGetFile } from './file-input'; - -/** - * @vitest-environment jsdom - */ -describe('onFileInputChangeGetFile', () => { - it('returns file details on file select', async () => { - return new Promise(resolve => { - const setFile = vi.fn().mockImplementation(details => { - expect(details).toEqual({ - name: 'file-name.xml', - text: '', - }); - resolve(); - }); - const handler = onFileInputChangeGetFile(setFile); - handler({ - target: { - files: [new File([], 'file-name.xml')] as unknown as FileList, - }, - } as ChangeEvent); - }); - }); -}); diff --git a/src/web/src/browser/util/file-input.ts b/src/web/src/browser/util/file-input.ts deleted file mode 100644 index 9529f3872..000000000 --- a/src/web/src/browser/util/file-input.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { ChangeEvent } from 'react'; - -const readFileAsync = (file: File) => { - return new Promise((resolve, reject) => { - let reader = new FileReader(); - reader.onload = () => { - resolve(reader.result as string); - }; - reader.onerror = reject; - reader.readAsText(file); - }); -}; - -export const onFileInputChangeGetFile = - (setFile: ({ name, text }: { name: string; text: string }) => void) => - (event: ChangeEvent) => { - if (event.target.files && event.target.files.length > 0) { - const inputFile = event.target.files[0]; - readFileAsync(inputFile).then(text => { - setFile({ name: inputFile.name, text }); - }); - } - }; diff --git a/src/web/src/browser/views/components/App.tsx b/src/web/src/browser/views/components/App.tsx deleted file mode 100644 index d4cea8b8e..000000000 --- a/src/web/src/browser/views/components/App.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import type { OscalDocumentKey } from '@asap/shared/domain/oscal'; - -import { AssertionDocumentationOverlay } from './AssertionDocumentationOverlay'; -import { DocumentViewerOverlay } from './DocumentViewerOverlay'; -import { DevelopersPage } from './DevelopersPage'; -import { Footer } from './Footer'; -import { Header } from './Header'; -import { HomePage } from './HomePage'; -import { UsaBanner } from './UsaBanner'; -import { ValidatorPage } from './ValidatorPage'; -import { useAppContext } from '../context'; - -const CurrentPage = () => { - const currentRoute = useAppContext().state.router.currentRoute; - - if (currentRoute.type === 'Home') { - return ; - } else if ( - currentRoute.type === 'DocumentSummary' || - currentRoute.type === 'DocumentPOAM' || - currentRoute.type === 'DocumentSAP' || - currentRoute.type === 'DocumentSAR' || - currentRoute.type === 'DocumentSSP' - ) { - const documentType = { - DocumentSummary: null, - DocumentPOAM: 'poam', - DocumentSAP: 'sap', - DocumentSAR: 'sar', - DocumentSSP: 'ssp', - }[currentRoute.type] as OscalDocumentKey | null; - return ( - <> - - - {documentType ? ( - - ) : null} - - ); - } else if (currentRoute.type === 'Developers') { - return ; - } else { - const _exhaustiveCheck: never = currentRoute; - return <>; - } -}; - -export const App = () => { - return ( -
- -
- -
-
- ); -}; diff --git a/src/web/src/browser/views/components/AssertionDocumentationOverlay.tsx b/src/web/src/browser/views/components/AssertionDocumentationOverlay.tsx deleted file mode 100644 index e699cdf0f..000000000 --- a/src/web/src/browser/views/components/AssertionDocumentationOverlay.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import Modal from 'react-modal'; -import { useAppContext } from '../context'; -import spriteSvg from 'uswds/img/sprite.svg'; - -import { AssertionXSpecScenarios } from './AssertionXSpecScenarios'; -import * as assertionDocumentation from '../../presenter/actions/assertion-documentation'; -import { SchematronRulesetKey } from '@asap/shared/domain/schematron'; - -export const AssertionDocumentationOverlay = ({ - rulesetKey, -}: { - rulesetKey: SchematronRulesetKey; -}) => { - const { dispatch, state } = useAppContext(); - - return ( -
- dispatch(assertionDocumentation.close)} - contentLabel="Assertion rule examples" - style={{ - overlay: { - position: 'fixed', - top: 0, - left: 0, - right: 0, - bottom: 0, - backgroundColor: 'rgba(0, 0, 0, 0.8)', - zIndex: '1000', - }, - content: { - position: 'absolute', - top: '40px', - left: '40px', - right: '40px', - bottom: '40px', - border: '1px solid #ccc', - background: '#fff', - overflow: 'auto', - WebkitOverflowScrolling: 'touch', - outline: 'none', - }, - }} - > -
- -

- Assertion Examples -

-
-
-

- These are examples and not user-generated code -

-
-
-
- -
-
- ); -}; diff --git a/src/web/src/browser/views/components/AssertionXSpecScenarios.tsx b/src/web/src/browser/views/components/AssertionXSpecScenarios.tsx deleted file mode 100644 index 6e081a90d..000000000 --- a/src/web/src/browser/views/components/AssertionXSpecScenarios.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { selectVisibleScenarioSummaries } from '@asap/browser/presenter/state/selectors'; -import { SchematronRulesetKey } from '@asap/shared/domain/schematron'; -import { useSelector } from '../context'; -import { CodeViewer } from './CodeViewer'; - -export const AssertionXSpecScenarios = ({ - rulesetKey, -}: { - rulesetKey: SchematronRulesetKey; -}) => { - const scenarioSummaries = useSelector( - selectVisibleScenarioSummaries(rulesetKey), - ); - return ( -
    - {scenarioSummaries.map((summary, index) => ( -
  • - {summary.scenarios.map((s, index) => - s.url ? ( - - {s.label} - - ) : ( - {s.label} - ), - )}{' '} - {summary.assertionLabel} - {summary.referenceUrl ? ( - <> - {' '} - - View XSpec - - - ) : null} - -
  • - ))} -
- ); -}; diff --git a/src/web/src/browser/views/components/CodeViewer.tsx b/src/web/src/browser/views/components/CodeViewer.tsx deleted file mode 100644 index 98e3cb68e..000000000 --- a/src/web/src/browser/views/components/CodeViewer.tsx +++ /dev/null @@ -1,11 +0,0 @@ -type CodeViewerProps = { - codeHTML: string; -}; - -export const CodeViewer = ({ codeHTML }: CodeViewerProps) => { - return ( -
-      
-    
- ); -}; diff --git a/src/web/src/browser/views/components/Collapsable.tsx b/src/web/src/browser/views/components/Collapsable.tsx deleted file mode 100644 index 74cb4fa24..000000000 --- a/src/web/src/browser/views/components/Collapsable.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; - -type CollapsableProps = { - children?: React.ReactNode; - title: string; -}; - -export const Collapsable = ({ children, title }: CollapsableProps) => { - return ( -
- {React.Children.map(children, (child, index) => ( - <> -

- -

-
- {child} -
- - ))} -
- ); -}; diff --git a/src/web/src/browser/views/components/DevelopersPage.tsx b/src/web/src/browser/views/components/DevelopersPage.tsx deleted file mode 100644 index 8d9f096f8..000000000 --- a/src/web/src/browser/views/components/DevelopersPage.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { useAppContext } from '../context'; -import { HeadingOne } from './HeadingOne'; -import laptopImage from '../images/laptop.svg'; - -export const DevelopersPage = () => { - const { developerExampleUrl } = useAppContext().state.config.sourceRepository; - return ( - <> - -
-
-
-

- Evaluate the Rules -

- laptop, notepad, markers, and papers on a desk. -
-
-
-

- As a third-party developer, you may evaluate the FedRAMP ASAP - rules with an XSLT 3.0 processor. -

-

- Developer examples are available in our{' '} - - Github repository - - . -

-
-
-
-
- - ); -}; diff --git a/src/web/src/browser/views/components/DocumentViewerOverlay.tsx b/src/web/src/browser/views/components/DocumentViewerOverlay.tsx deleted file mode 100644 index 47c9c6010..000000000 --- a/src/web/src/browser/views/components/DocumentViewerOverlay.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import { useCallback } from 'react'; -import Modal from 'react-modal'; - -import { clearAssertionContext } from '@asap/browser/presenter/actions/validator'; -import { OscalDocumentKey } from '@asap/shared/domain/oscal'; - -import { CodeViewer } from './CodeViewer'; -import { useAppContext, useSelector } from '../context'; -import { selectValidationResult } from '@asap/browser/presenter/state/selectors'; -import { SchematronRulesetKey } from '@asap/shared/domain/schematron'; - -type DocumentViewerOverlayProps = { - documentType: OscalDocumentKey; - rulesetKey: SchematronRulesetKey; -}; - -export const DocumentViewerOverlay = ({ - documentType, - rulesetKey, -}: DocumentViewerOverlayProps) => { - const { dispatch } = useAppContext(); - const validationResult = useSelector( - selectValidationResult(documentType, rulesetKey), - ); - - // Hightlight and scroll to node when mounted to DOM. - const refCallback = useCallback( - node => { - if (!node) { - return; - } - const assertionId = - validationResult.current === 'ASSERTION_CONTEXT' - ? validationResult.assertionId - : null; - if (assertionId) { - const target = node.querySelector(`#${assertionId}`) as HTMLElement; - if (target) { - target.scrollIntoView({ - behavior: 'auto', - block: 'start', - inline: 'start', - }); - target.style.backgroundColor = 'lightcyan'; - } - } - }, - [validationResult], - ); - - return ( - - dispatch(clearAssertionContext(documentType, rulesetKey)) - } - contentLabel="Assertion rule examples" - style={{ - overlay: { - position: 'fixed', - top: 0, - left: 0, - right: 0, - bottom: 0, - backgroundColor: 'rgba(0, 0, 0, 0.8)', - zIndex: '1000', - }, - content: { - position: 'absolute', - top: '40px', - left: '40px', - right: '40px', - bottom: '40px', - border: '1px solid #ccc', - background: '#fff', - overflow: 'auto', - WebkitOverflowScrolling: 'touch', - outline: 'none', - }, - }} - > -
- {validationResult.current === 'ASSERTION_CONTEXT' ? ( - - ) : ( -

No report validated.

- )} -
-
- ); -}; diff --git a/src/web/src/browser/views/components/Footer.tsx b/src/web/src/browser/views/components/Footer.tsx deleted file mode 100644 index 7932d9671..000000000 --- a/src/web/src/browser/views/components/Footer.tsx +++ /dev/null @@ -1,150 +0,0 @@ -import logoImg from 'uswds/img/logo-img.png'; -import mailIcon from '../images/footer-mail-icon.svg'; -import twitterIcon from '../images/FedRAMP_twitter.svg'; -import youTubeIcon from '../images/FedRAMP-youtube.svg'; - -import { useAppContext } from '../context'; -import { Identifier } from './Identifier'; -export const Footer = () => { - const { sourceRepository } = useAppContext().state.config; - return ( - <> -
- -
-
-
- -
-
-
-
-
-
-
-

- The Federal Risk and Authorization Management Program - (FedRAMP®) is managed by the FedRAMP Program Management - Office. -

-

- The FedRAMP name and the FedRAMP logo are the property of the - General Services Administration (GSA) and may not be used - without GSA’s express, written permission. For more - information, please see the{' '} - - FedRAMP Brand Guide - - . -

-
-
-

- Connect With Us -

-

Please reach out to FedRAMP with any questions.

-
- - mail to fedramp - info@FedRAMP.gov - -
-
-
-

- Follow us -

-
- - -
-
-
-

- Keep Up To Date -

-

- To receive news and updates, join the GSA’s subscriber list. -

- - Subscribe - -
-
-
-
-
- - - ); -}; diff --git a/src/web/src/browser/views/components/Header.tsx b/src/web/src/browser/views/components/Header.tsx deleted file mode 100644 index 829b876a4..000000000 --- a/src/web/src/browser/views/components/Header.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import classnames from 'classnames'; -import closeSvg from 'uswds/img/usa-icons/close.svg'; - -import { - getUrl, - Routes, - isRulesetRoute, -} from '@asap/browser/presenter/state/router'; - -import { useAppContext } from '../context'; -import logo from '../images/logo.svg'; - -export const Header = () => { - const { currentRoute } = useAppContext().state.router; - const { newIssueUrl } = useAppContext().state.config.sourceRepository; - - return ( -
- -
- ); -}; diff --git a/src/web/src/browser/views/components/HeadingOne.tsx b/src/web/src/browser/views/components/HeadingOne.tsx deleted file mode 100644 index 3f5e39dd8..000000000 --- a/src/web/src/browser/views/components/HeadingOne.tsx +++ /dev/null @@ -1,16 +0,0 @@ -type HeadingOneProps = { - children?: React.ReactNode; - heading: string; - secondaryText?: string; -}; - -export const HeadingOne = ({ heading, secondaryText }: HeadingOneProps) => { - return ( -
-

- {heading.toUpperCase()} -

- {secondaryText &&

{secondaryText}

} -
- ); -}; diff --git a/src/web/src/browser/views/components/HomePage.tsx b/src/web/src/browser/views/components/HomePage.tsx deleted file mode 100644 index 0f0cb5aec..000000000 --- a/src/web/src/browser/views/components/HomePage.tsx +++ /dev/null @@ -1,263 +0,0 @@ -import { getUrl, Routes } from '@asap/browser/presenter/state/router'; -import partnersCloudSvg from '../images/partners-cloud.svg'; -import partnersAssessorsSvg from '../images/partners-assessors.svg'; -import partnersAgenciesSvg from '../images/bldg.svg'; -import whyIllustration from '../images/partners_fed-agencies.png'; -import '../styles/HomePage.scss'; -import asapMovie from '../images/asap-540-2.mp4'; - -import { useAppContext } from '../context'; -import { SchematronRulesetKeys } from '@asap/shared/domain/schematron'; - -const ProcessList = () => ( -
-
-

- How does it work? -

-
-
-
    -
  1. -

    - Submit with confidence -

    -

    - Creation of compliant FedRAMP OSCAL System Security Plans is - enhanced with timely and context-sensitive validation errors. -

    -
  2. -
  3. -

    - Streamlined FedRAMP Review -

    -

    - High-quality submissions lead to efficient FedRAMP audit - reviews. Additionally, FedRAMP Audit Review Team efforts are - further streamlined by a friendly presentation of complex - business rule validations. -

    -
  4. -
  5. -

    - Lower-cost agency ATO -

    -

    - FedRAMP-approved Cloud Service Providers (CSPs) with structured - OSCAL System Security Plans are more cost-effective for agencies - to evaluate as part of their own Approval To Operate (ATO) - process. -

    -
  6. -
-
-
-
-
-
-
-
-
-); - -const PartiesGrid = () => ( -
-
-

- Who uses ASAP? -

-
-
- partners in the cloud -
-

Cloud Service Providers

-

- Submit your FedRAMP-compliant OSCAL System Security Plan with - confidence. -

-
-
-
- partner assessors -
-

FedRAMP Reviewers

-

Evaluate CSP submissions with an efficient workflow.

- - Learn more - -
-
-
- partner agencies -
-

Federal Agencies

-

- Evaluate FedRAMP-approved cloud service providers with the aid of - structured OSCAL documentation. -

-
-
-
-
-
-); - -const HeroSection = () => { - const { state } = useAppContext(); - return ( -
-
-
-
-

- Accelerate Approvals -

-
-
-

- Welcome to Automated Security Authorization Processing (ASAP), - the FedRAMP audit validation tool. Project funded by{' '} - - 10x. - -

- - Try It Now - -
-
-

ASAP is comprised of the following components:

-

- - Open Security Controls Assessment Language (OSCAL) - {' '} - validation rules written in{' '} - - Schematron - {' '} - format. A summary of the NIST{' '} - - rev 4 - - and{' '} - - rev 5 - - {' '}rulesets are available. -

-

- This user interface, which applies validations to a FedRAMP - OSCAL System Security Plan and display validation errors - in-browser. -

-

- Compiled Schematron rules (XSLT), which may be integrated with - third-party OSCAL creation/validation tools. Read our{' '} - - developer documentation - {' '} - for more information. -

-
-
-
-
-
-
- ); -}; - -const WhySection = () => { - const { newIssueUrl } = useAppContext().state.config.sourceRepository; - return ( -
-
-
-
- pillars with folders, cart, zoom window, and envelope -
-
-

- Why should I care? -

-

- FedRAMP audit approvals are expensive for both FedRAMP and CSPs - (Cloud Service Providers). The ASAP validation tool helps CSPs - craft correct System Security Plans, and helps the FedRAMP Audit - Review Team evaluate them efficiently. -

-

- Contact us -

-

- Your feedback is important to us. Please send us any problems or - feature requests to our team to help make ASAP better for - everyone. -

- - Provide Feedback - -
-
-
-
- ); -}; -export const HomePage = () => ( -
- - - - -
-); diff --git a/src/web/src/browser/views/components/Identifier.tsx b/src/web/src/browser/views/components/Identifier.tsx deleted file mode 100644 index df09aded5..000000000 --- a/src/web/src/browser/views/components/Identifier.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import GSAIcon from '../images/gsa-reversed-logo.svg'; - -export const Identifier = () => ( -
-
-
-
-
- - GSA logo - -
-

FedRAMP.gov

-

- An official website of the GSA’s{' '} - - Technology Transformation Services - -

-
-
-
-
-
- -
-
-
- Looking for U.S. government information and services? -
- - Visit USA.gov - -
-
-
-); diff --git a/src/web/src/browser/views/components/RulesetPicker.tsx b/src/web/src/browser/views/components/RulesetPicker.tsx deleted file mode 100644 index fe8090ec2..000000000 --- a/src/web/src/browser/views/components/RulesetPicker.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { SchematronRulesetKey } from '@asap/shared/domain/schematron'; -import { setCurrentRoute } from '@asap/browser/presenter/actions'; -import { getUrl, Routes } from '@asap/browser/presenter/state/router'; - -import { useAppContext } from '../context'; -import '../styles/RulesetPicker.scss'; - -export const RulesetPicker = () => { - const { dispatch, state } = useAppContext(); - return ( -
- -
- ); -}; diff --git a/src/web/src/browser/views/components/UsaBanner.tsx b/src/web/src/browser/views/components/UsaBanner.tsx deleted file mode 100644 index 67f171a0d..000000000 --- a/src/web/src/browser/views/components/UsaBanner.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import iconDotGov from 'uswds/img/icon-dot-gov.svg'; -import iconHttps from 'uswds/src/img/icon-https.svg'; -import usFlagSmall from 'uswds/src/img/us_flag_small.png'; - -export const UsaBanner = () => { - return ( - <> -
-
-
-
-
- U.S. flag -
-
-

- An official website of the United States government -

- -
- -
-
-
-
-
- -
-

- Official websites use .gov -
A .gov website belongs to an official - government organization in the United States. -

-
-
-
- -
-

- Secure .gov websites use HTTPS -
A lock ( - - - - - - - - ) or https:// means you’ve safely connected - to the .gov website. Share sensitive information only on - official, secure websites. -

-
-
-
-
-
-
- - ); -}; diff --git a/src/web/src/browser/views/components/UsageTrackingPage.tsx b/src/web/src/browser/views/components/UsageTrackingPage.tsx deleted file mode 100644 index e30a6c759..000000000 --- a/src/web/src/browser/views/components/UsageTrackingPage.tsx +++ /dev/null @@ -1,48 +0,0 @@ -export const UsageTrackingPage = () => { - return ( - <> -

Usage Tracking

-
-

- During the beta period, the 10x ASAP development team benefits from - understanding how you use this application. The following is a - description of each piece of data collected by this application. -

- - - - - - - - - - - - - - - - - - - - - - -
Usage data collected
Application EventDescription
All events - For all events, an anonymized browser fingerprint is tracked. - This fingerprint is used to group your user activity into a - single session. -
Application loaded - When you load the 10x ASAP application, the current page is - tracked. -
Validation summary - After validating an OSCAL SSP, the assertion identifiers for - each failed validation is tracked. No content from your document - is shared. -
-
- - ); -}; diff --git a/src/web/src/browser/views/components/ValidatorFileSelectForm.tsx b/src/web/src/browser/views/components/ValidatorFileSelectForm.tsx deleted file mode 100644 index 2df69c5d8..000000000 --- a/src/web/src/browser/views/components/ValidatorFileSelectForm.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import spriteSvg from 'uswds/img/sprite.svg'; - -import { onFileInputChangeGetFile } from '../../util/file-input'; -import * as validator from '../../presenter/actions/validator'; -import { useAppContext } from '../context'; -import { SchematronRulesetKey } from '@asap/shared/domain/schematron'; - -export const ValidatorFileSelectForm = ({ - rulesetKey, -}: { - rulesetKey: SchematronRulesetKey; -}) => { - const { dispatch, state } = useAppContext(); - - return ( - <> -
-
- Select FedRAMP OSCAL SSP, SAP, SAR, or POA&M (XML, JSON or YAML - format) -
- { - dispatch( - validator.validateOscalDocument({ - rulesetKey, - fileName: fileDetails.name, - fileContents: fileDetails.text, - }), - ); - })} - disabled={state.validator.current === 'PROCESSING'} - /> -
-
- - {state.validator.current === 'PROCESSING_ERROR' && ( -
-
-

Processing Error

-

{state.validator.errorMessage}

-
-
- )} -
- - {state.validator.current === 'UNLOADED' && ( - - )} - {state.validator.current === 'PROCESSING' && ( -
- )} - {state.validator.current === 'PROCESSING_ERROR' && ( - - )} - {state.validator.current === 'VALIDATED' && ( - - )} -
- {state.validator.current === 'PROCESSING' && ( -
-
- Please wait, this document is still processing... -
-
- )} -
- - ); -}; diff --git a/src/web/src/browser/views/components/ValidatorPage.tsx b/src/web/src/browser/views/components/ValidatorPage.tsx deleted file mode 100644 index e617eca1a..000000000 --- a/src/web/src/browser/views/components/ValidatorPage.tsx +++ /dev/null @@ -1,308 +0,0 @@ -import classnames from 'classnames'; - -import { getUrl, Routes } from '@asap/browser/presenter/state/router'; -import type { OscalDocumentKey } from '@asap/shared/domain/oscal'; -import { HeadingOne } from './HeadingOne'; -import { ValidatorFileSelectForm } from './ValidatorFileSelectForm'; -import { ValidatorReport } from './ValidatorReport'; -import { ValidatorResultsFilterForm } from './ValidatorResultsFilterForm'; -import { useAppContext } from '../context'; -import tableImage from '../images/2022-05-19-first-oscal-system-security-plan.png'; -import '../styles/ValidatorPage.scss'; -import { RulesetPicker } from './RulesetPicker'; -import { SchematronRulesetKey } from '@asap/shared/domain/schematron'; - -const DocumentValidator = ({ - documentType, - rulesetKey, -}: { - documentType: OscalDocumentKey; - rulesetKey: SchematronRulesetKey; -}) => ( - <> -
-
-
- -
-
-
- -
-
- -); - -export const ValidatorPage = ({ - documentType, - rulesetKey, -}: { - documentType: OscalDocumentKey | null; - rulesetKey: SchematronRulesetKey; -}) => { - const { router, rulesets } = useAppContext().state; - const ruleset = rulesets[rulesetKey]; - return ( - <> - - - - {ruleset.meta.description && ( -
-
-
-

{ruleset.meta.description}

-
-
-
- )} -
-
-
-

- Choose an OSCAL file to process -

-
- -
- - {documentType ? ( - - ) : ( -
-
-

- {ruleset.meta.title} Summary -

- laptop with report on screen -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DocumentStatusRulesFlagged
- - System Security Plan - - 0, - })} - > - - {ruleset.validationResults.ssp.summary.firedCount !== - null && - ruleset.validationResults.ssp.summary.firedCount > 0 - ? 'FAIL' - : 'PASS'} - - - { - ruleset.oscalDocuments.ssp.config.schematronAsserts - .length - } - {ruleset.validationResults.ssp.summary.firedCount}
- - Security Assessment Results - - - - 0, - })} - > - {ruleset.validationResults.sar.summary.firedCount !== - null && - ruleset.validationResults.sar.summary.firedCount > 0 - ? 'FAIL' - : 'PASS'} - - - { - ruleset.oscalDocuments.sar.config.schematronAsserts - .length - } - {ruleset.validationResults.sar.summary.firedCount}
- - Security Assessment Plan - - 0, - })} - > - - {ruleset.validationResults.sap.summary.firedCount !== - null && - ruleset.validationResults.sap.summary.firedCount > 0 - ? 'FAIL' - : 'PASS'} - - - { - ruleset.oscalDocuments.sap.config.schematronAsserts - .length - } - {ruleset.validationResults.sap.summary.firedCount}
- - Plan of Action and Milestones - - 0, - })} - > - - {ruleset.validationResults.poam.summary.firedCount !== - null && - ruleset.validationResults.poam.summary.firedCount > 0 - ? 'FAIL' - : 'PASS'} - - - { - ruleset.oscalDocuments.poam.config.schematronAsserts - .length - } - {ruleset.validationResults.poam.summary.firedCount}
-
-
- )} -
- - ); -}; diff --git a/src/web/src/browser/views/components/ValidatorReport.tsx b/src/web/src/browser/views/components/ValidatorReport.tsx deleted file mode 100644 index 791975bcb..000000000 --- a/src/web/src/browser/views/components/ValidatorReport.tsx +++ /dev/null @@ -1,261 +0,0 @@ -import spriteSvg from 'uswds/img/sprite.svg'; - -import * as assertionDocumentation from '@asap/browser/presenter/actions/assertion-documentation'; -import { - downloadSVRL, - showAssertionContext, -} from '@asap/browser/presenter/actions/validator'; -import { - selectFilterOptions, - selectSchematronReport, -} from '@asap/browser/presenter/state/selectors'; -import { getAssertionViewTitleByIndex } from '@asap/browser/presenter/state/ruleset/schematron-machine'; -import type { OscalDocumentKey } from '@asap/shared/domain/oscal'; -import { useAppContext } from '../context'; -import '../styles/ValidatorReport.scss'; -import { SchematronRulesetKey } from '@asap/shared/domain/schematron'; - -type Props = { - documentType: OscalDocumentKey; - rulesetKey: SchematronRulesetKey; -}; - -export const ValidatorReport = ({ documentType, rulesetKey }: Props) => { - const { dispatch, state } = useAppContext(); - const oscalDocument = state.rulesets[rulesetKey].oscalDocuments[documentType]; - const validationResult = - state.rulesets[rulesetKey].validationResults[documentType]; - const filterOptions = selectFilterOptions(documentType, rulesetKey)(state); - const schematronReport = selectSchematronReport( - documentType, - rulesetKey, - )(state); - const viewTitle = getAssertionViewTitleByIndex( - filterOptions.assertionViews, - oscalDocument.filter.assertionViewId, - ); - - interface FedRampTagProp { - isFedRamp: boolean; - } - - const FedRampTag = ({ isFedRamp }: FedRampTagProp) => - isFedRamp ? ( -
- - FedRAMP - -
- ) : null; - - return ( - <> -
-
-

- {validationResult.summary.title} -

-
-
- - {schematronReport.assertionCount} concerns -
- {validationResult.current === 'HAS_RESULT' ? ( - - ) : null} -
-
-

- {viewTitle} -

-
- {schematronReport.groups.map(group => ( -
- - - {group.title} - - {group.isValidated ? ( - - {group.checks.summaryColor === 'green' ? ( - - ) : ( - - )} - - {group.checks.summary} - - - ) : ( - {group.checks.checks.length} - )} - -
- -
-
- ))} - - ); -}; diff --git a/src/web/src/browser/views/components/ValidatorResultsFilterForm.tsx b/src/web/src/browser/views/components/ValidatorResultsFilterForm.tsx deleted file mode 100644 index c5aa0389f..000000000 --- a/src/web/src/browser/views/components/ValidatorResultsFilterForm.tsx +++ /dev/null @@ -1,269 +0,0 @@ -import { useRef } from 'react'; -import spriteSvg from 'uswds/img/sprite.svg'; -import * as schematron from '@asap/browser/presenter/actions/schematron'; -import type { OscalDocumentKey } from '@asap/shared/domain/oscal'; -import { useAppContext } from '../context'; -import { selectFilterOptions } from '@asap/browser/presenter/state/selectors'; -import '../styles/ValidatorResultsFilterForm.scss'; -import { SchematronRulesetKey } from '@asap/shared/domain/schematron'; - -type Props = { - documentType: OscalDocumentKey; - rulesetKey: SchematronRulesetKey; -}; - -export const ValidatorResultsFilterForm = ({ - documentType, - rulesetKey, -}: Props) => { - const { state } = useAppContext(); - const oscalDocument = state.rulesets[rulesetKey].oscalDocuments[documentType]; - const { dispatch } = useAppContext(); - - const filterOptions = selectFilterOptions(documentType, rulesetKey)(state); - - const topRef = useRef(null); - const scrollIntoView = () => { - if (topRef && topRef.current && topRef.current.parentElement) { - topRef.current.parentElement.scrollIntoView(); - } - }; - return ( - <> - - - ); -}; diff --git a/src/web/src/browser/views/context.tsx b/src/web/src/browser/views/context.tsx deleted file mode 100644 index aaaa333c7..000000000 --- a/src/web/src/browser/views/context.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { createContext, useContext, useState } from 'react'; - -import { Effects, ActionDispatch } from '../presenter'; -import { initializeApplication } from '../presenter/actions'; -import { State, rootReducer, StateTransition } from '../presenter/state'; -import { useThunkReducer } from './hooks'; - -export type AppContextType = { - state: State; - dispatch: ActionDispatch; -}; -export const AppContext = createContext({ - state: {} as State, - dispatch: () => null, -}); - -export const useAppContext = () => { - return useContext(AppContext); -}; - -export const useSelector = any>(selector: T) => { - const { state } = useAppContext(); - return selector(state) as ReturnType; -}; - -export const AppContextProvider = ({ - children, - effects, - initialState, -}: { - children: React.ReactNode; - effects: Effects; - initialState: State; -}) => { - const [appInitialized, setAppInitialized] = useState(false); - const [state, dispatch] = useThunkReducer( - rootReducer, - effects, - initialState, - ); - - // TODO: Move somewhere else? - if (!appInitialized) { - dispatch(initializeApplication); - setAppInitialized(true); - } - - return ( - - {children} - - ); -}; diff --git a/src/web/src/browser/views/hooks.ts b/src/web/src/browser/views/hooks.ts deleted file mode 100644 index f46dff9f8..000000000 --- a/src/web/src/browser/views/hooks.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Reducer, useCallback, useRef, useState } from 'react'; -import type { ActionDispatch } from '../presenter'; - -export const useThunkReducer = ( - reducer: Reducer, - effects: Effects, - initialState: State, -): [State, ActionDispatch] => { - const [hookState, setHookState] = useState(initialState); - - const state = useRef(hookState); - const getState = useCallback(() => state.current, [state]); - const setState = useCallback( - (newState: State) => { - state.current = newState; - setHookState(newState); - }, - [state, setHookState], - ); - - const reduce = useCallback( - (event: Event) => { - return reducer(getState(), event); - }, - [reducer, getState], - ); - - // Dispatcher that optionally calls a thunk - const dispatch: ActionDispatch = useCallback( - (event: Event) => { - return typeof event === 'function' - ? event({ dispatch, getState, effects }) - : setState(reduce(event)); - }, - [getState, setState, reduce], - ); - - return [hookState, dispatch]; -}; diff --git a/src/web/src/browser/views/images/2022-05-19-first-oscal-system-security-plan.png b/src/web/src/browser/views/images/2022-05-19-first-oscal-system-security-plan.png deleted file mode 100644 index 10349ab9f..000000000 Binary files a/src/web/src/browser/views/images/2022-05-19-first-oscal-system-security-plan.png and /dev/null differ diff --git a/src/web/src/browser/views/images/FedRAMP-youtube.svg b/src/web/src/browser/views/images/FedRAMP-youtube.svg deleted file mode 100644 index 1fc534f62..000000000 --- a/src/web/src/browser/views/images/FedRAMP-youtube.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/src/web/src/browser/views/images/FedRAMP_twitter.svg b/src/web/src/browser/views/images/FedRAMP_twitter.svg deleted file mode 100644 index f28ca1099..000000000 --- a/src/web/src/browser/views/images/FedRAMP_twitter.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/web/src/browser/views/images/asap-540-2.mp4 b/src/web/src/browser/views/images/asap-540-2.mp4 deleted file mode 100644 index 4521124b9..000000000 Binary files a/src/web/src/browser/views/images/asap-540-2.mp4 and /dev/null differ diff --git a/src/web/src/browser/views/images/bldg.svg b/src/web/src/browser/views/images/bldg.svg deleted file mode 100644 index 9bee1360e..000000000 --- a/src/web/src/browser/views/images/bldg.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/web/src/browser/views/images/footer-mail-icon.svg b/src/web/src/browser/views/images/footer-mail-icon.svg deleted file mode 100644 index b59f541dc..000000000 --- a/src/web/src/browser/views/images/footer-mail-icon.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/web/src/browser/views/images/gsa-reversed-logo.svg b/src/web/src/browser/views/images/gsa-reversed-logo.svg deleted file mode 100644 index bc32a8815..000000000 --- a/src/web/src/browser/views/images/gsa-reversed-logo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/web/src/browser/views/images/homepage-banner-desktop.jpeg b/src/web/src/browser/views/images/homepage-banner-desktop.jpeg deleted file mode 100644 index 411c121ff..000000000 Binary files a/src/web/src/browser/views/images/homepage-banner-desktop.jpeg and /dev/null differ diff --git a/src/web/src/browser/views/images/homepage-banner-tablet.jpg b/src/web/src/browser/views/images/homepage-banner-tablet.jpg deleted file mode 100644 index 39115002a..000000000 Binary files a/src/web/src/browser/views/images/homepage-banner-tablet.jpg and /dev/null differ diff --git a/src/web/src/browser/views/images/laptop.svg b/src/web/src/browser/views/images/laptop.svg deleted file mode 100644 index 1bd4fb604..000000000 --- a/src/web/src/browser/views/images/laptop.svg +++ /dev/null @@ -1,1064 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/web/src/browser/views/images/logo.svg b/src/web/src/browser/views/images/logo.svg deleted file mode 100644 index 22d4ae624..000000000 --- a/src/web/src/browser/views/images/logo.svg +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/web/src/browser/views/images/partners-assessors.svg b/src/web/src/browser/views/images/partners-assessors.svg deleted file mode 100644 index 2ef416a86..000000000 --- a/src/web/src/browser/views/images/partners-assessors.svg +++ /dev/null @@ -1,539 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/web/src/browser/views/images/partners-cloud.svg b/src/web/src/browser/views/images/partners-cloud.svg deleted file mode 100644 index 95823d798..000000000 --- a/src/web/src/browser/views/images/partners-cloud.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/web/src/browser/views/images/partners_fed-agencies.png b/src/web/src/browser/views/images/partners_fed-agencies.png deleted file mode 100644 index 8ab445f7f..000000000 Binary files a/src/web/src/browser/views/images/partners_fed-agencies.png and /dev/null differ diff --git a/src/web/src/browser/views/index.tsx b/src/web/src/browser/views/index.tsx deleted file mode 100644 index 85a60434c..000000000 --- a/src/web/src/browser/views/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import 'uswds'; - -import React from 'react'; -import ReactDOM from 'react-dom'; -import Modal from 'react-modal'; - -import { App } from './components/App'; -import { AppContextProvider } from './context'; -import './styles/index.scss'; -import { State } from '../presenter/state'; -import { Effects } from '../presenter'; - -export const createAppRenderer = - (rootElement: HTMLElement, initialState: State, effects: Effects) => () => { - Modal.setAppElement(rootElement); - ReactDOM.render( - - - - - , - rootElement, - ); - }; diff --git a/src/web/src/browser/views/styles/HomePage.scss b/src/web/src/browser/views/styles/HomePage.scss deleted file mode 100644 index d17990626..000000000 --- a/src/web/src/browser/views/styles/HomePage.scss +++ /dev/null @@ -1,19 +0,0 @@ -.hero-unit { - background-repeat: no-repeat; - background-position: 90% 0px; - background-size: cover; - min-height: 22em; - padding-top: 6rem; - padding-bottom: 4rem; - - // tablet - @media (min-width: 50rem) { - background-position: center; - background-image: url(../images/homepage-banner-tablet.jpg); - } - - // desktop and up - @media (min-width: 80rem) { - background-image: url(../images/homepage-banner-desktop.jpeg); - } -} diff --git a/src/web/src/browser/views/styles/RulesetPicker.scss b/src/web/src/browser/views/styles/RulesetPicker.scss deleted file mode 100644 index a6b2e39bf..000000000 --- a/src/web/src/browser/views/styles/RulesetPicker.scss +++ /dev/null @@ -1,6 +0,0 @@ -.ruleset-picker { - background-color: color('accent-cool-lighter'); - color: color('ink'); - margin: auto 0; - padding: 0; -} diff --git a/src/web/src/browser/views/styles/ValidatorPage.scss b/src/web/src/browser/views/styles/ValidatorPage.scss deleted file mode 100644 index c00f47561..000000000 --- a/src/web/src/browser/views/styles/ValidatorPage.scss +++ /dev/null @@ -1,25 +0,0 @@ -a { - color: var(--theme-headings-text); - text-decoration: none; - line-height: 0.9; - :visited { - color: var(--theme-headings-text); - } -} -.bg-theme-red { - background-color: var(--theme-red) !important; -} - -.active-link { - color: var(--theme-dark-text) !important; - font-weight: bold; -} -.secondary-nav-container { - flex-direction: column; -} -// desktop and up -@media (min-width: 74rem) { - .secondary-nav-container { - flex-direction: row; - } -} diff --git a/src/web/src/browser/views/styles/ValidatorReport.scss b/src/web/src/browser/views/styles/ValidatorReport.scss deleted file mode 100644 index 9240eb0d1..000000000 --- a/src/web/src/browser/views/styles/ValidatorReport.scss +++ /dev/null @@ -1,25 +0,0 @@ -summary { - &:hover { - cursor: pointer; - } -} - -.usa-icon-list__content ul li { - list-style-type: none !important; - cursor: pointer; -} - -details > summary { - list-style: none; - &::-webkit-details-marker { - display: none; - } -} - -details > summary .learn-more::after { - content: ' \22C1'; -} - -details[open] > summary .learn-more::after { - content: ' \22C0'; -} diff --git a/src/web/src/browser/views/styles/ValidatorResultsFilterForm.scss b/src/web/src/browser/views/styles/ValidatorResultsFilterForm.scss deleted file mode 100644 index 7c018dfd9..000000000 --- a/src/web/src/browser/views/styles/ValidatorResultsFilterForm.scss +++ /dev/null @@ -1,29 +0,0 @@ -aside { - background-color: var(--theme-light-blue); - h2 { - color: var(--theme-vivid-blue); - } - legend { - color: var(--theme--blue); - } - .usa-search input { - border-radius: 20px 0 0 20px; - background: white; - height: 34px; - padding: 0px 24px; - border: none; - font-style: italic; - } - .usa-button { - border-radius: 0 20px 20px 0; - height: 34px !important; - background-color: #d0d0d0; - &:hover { - background-color: #757575; - } - } - .usa-checkbox, - .usa-radio { - background: transparent; - } -} diff --git a/src/web/src/browser/views/styles/_uswds-theme-overrides.scss b/src/web/src/browser/views/styles/_uswds-theme-overrides.scss deleted file mode 100644 index 806993e2b..000000000 --- a/src/web/src/browser/views/styles/_uswds-theme-overrides.scss +++ /dev/null @@ -1,23 +0,0 @@ -/** - * These styles override the base theme in the USWDS npm package. - * Since we are only changing a few things, this makes it easy to upgrade to - * the next version of the USWDS without having to audit all variable usage. - **/ - -// Theme colors overrides -$theme-color-primary: 'blue-warm-70v'; -$theme-color-primary-darker: 'blue-warm-70v'; -$theme-color-success-dark: 'green-cool-50'; -$theme-color-success-darker: 'green-cool-60'; - -$theme-show-notifications: false; -$theme-font-path: '../../../../node_modules/uswds/src/fonts'; -$theme-image-path: '../../../../node_modules/uswds/src/img'; - -$theme-banner-max-width: 'widescreen'; -$theme-footer-max-width: 'widescreen'; -$theme-grid-container-max-width: 'widescreen'; -$theme-header-max-width: 'widescreen'; - -$utilities-use-important: true; -$output-all-utilities: true; diff --git a/src/web/src/browser/views/styles/index.scss b/src/web/src/browser/views/styles/index.scss deleted file mode 100644 index 413f80cb8..000000000 --- a/src/web/src/browser/views/styles/index.scss +++ /dev/null @@ -1,146 +0,0 @@ -@import 'uswds/scss/theme/uswds-theme-general'; -@import 'uswds/scss/theme/uswds-theme-typography'; -@import 'uswds/scss/theme/uswds-theme-spacing'; -@import 'uswds/scss/theme/uswds-theme-color'; -@import 'uswds/scss/theme/uswds-theme-utilities'; -@import './uswds-theme-overrides'; -@import 'uswds/scss/uswds.scss'; - -@import 'highlight.js/scss/github.scss'; - -:root { - --theme-light-blue: #d9f1fd; - --theme-teal: #0a90b7; - --theme-red: #c71f25; - --theme-vivid-blue: #1a4480; // 'primary-dark' - --theme-deep-blue: #162e51; // 'primary-darker' - --theme-light-grey: #f2f2f2; // background - --theme-headings-text: #757575; // 'gray-50' - --theme-body-text: #454545; - --theme-dark-cyan: #1889bc; - --theme-dark-text: #5a5353; -} - -.text-theme-dark-blue { - color: var(--theme-dark-cyan) !important; -} - -.text-theme-light-blue { - color: var(--theme-light-blue) !important; -} - -.bg-theme-deep-blue { - background-color: var(--theme-deep-blue) !important; -} - -.vertical-align-middle { - vertical-align: middle !important; -} -.text-theme-red { - color: var(--theme-red); -} -.bg-theme-light-cyan { - background-color: var(--theme-teal); -} - -// Button hover overrides -.usa-button:hover { - background-color: var(--theme-red) !important; - transition: 0.5s; -} -.usa-button--unstyled:hover { - background-color: transparent !important; -} - -// nav button -.nav-btn { - border-color: var(--theme-headings-text) !important; - color: var(--theme-headings-text) !important; - font-size: initial; - &:hover { - border-color: var(--theme-red) !important; - color: var(--theme-red) !important; - background-color: transparent !important; - } -} - -.loader { - border: 8px solid color('base-lightest'); - border-top: 8px solid color('primary-vivid'); - border-radius: 50%; - width: 2.13rem; - height: 2.13rem; - animation: spin 2s linear infinite; -} - -@keyframes spin { - 0% { - transform: rotate(0deg); - } - - 100% { - transform: rotate(360deg); - } -} - -.loader-message { - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - margin: 2em; - font-size: 2em; - text-align: center; - opacity: 0; - animation: fadeIn 1s; - animation-delay: 10s; - animation-fill-mode: forwards; - .loader-message-text { - background-color: white; - } -} - -@keyframes fadeIn { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - -.bg-error-lighter { - @include checkbox-and-radio-colors('error-lighter'); -} - -.bg-warning-lighter { - @include checkbox-and-radio-colors('warning-lighter'); -} - -.bg-info-lighter { - @include checkbox-and-radio-colors('info-lighter'); -} - -.usa-nav__primary button:hover { - color: var(--theme-red); -} - -.usa-header--basic .usa-nav__primary-item > .usa-current::after, -.usa-header--basic .usa-nav__link:hover::after { - background-color: var(--theme-red); -} - -.usa-nav__primary > .usa-nav__primary-item > a:hover { - color: var(--theme-red); -} -.usa-header--basic .usa-nav__primary-item > .usa-current, -.usa-header--basic .usa-nav__link:hover { - color: var(--theme-red); -} -@media (min-width: 64em) { - .usa-nav__primary button[aria-expanded='true'] { - color: white !important; - } -} diff --git a/src/web/src/cli/cli-controller.test.ts b/src/web/src/cli/cli-controller.test.ts deleted file mode 100644 index 7c1386847..000000000 --- a/src/web/src/cli/cli-controller.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { it, describe, expect, vi } from 'vitest'; -import { mock } from 'vitest-mock-extended'; - -import { AssertionViewGenerator } from '@asap/shared/use-cases/assertion-views'; -import type { OscalService } from '@asap/shared/use-cases/oscal'; -import { SchematronCompiler } from '@asap/shared/use-cases/schematron-compiler'; -import { SchematronSummary } from '@asap/shared/use-cases/schematron-summary'; -import { XSpecAssertionSummaryGenerator } from '@asap/shared/use-cases/xspec-summary'; - -import { CommandLineContext, CommandLineController } from './cli-controller'; - -describe('command-line controller', () => { - it('calls validate schematron', async () => { - const ctx: CommandLineContext = { - console: mock(), - useCases: { - assertionViewGenerator: mock(), - oscalService: mock({ - validateOscalFile: vi.fn(), - }), - schematronCompiler: mock(), - schematronSummary: mock(), - xSpecAssertionSummaryGenerator: mock(), - }, - }; - const cli = CommandLineController(ctx); - await cli.parseAsync(['node', 'index.ts', 'validate', 'rev4', 'ssp.xml']); - expect(ctx.useCases.oscalService.validateOscalFile).toHaveBeenCalled(); - }); -}); diff --git a/src/web/src/cli/cli-controller.ts b/src/web/src/cli/cli-controller.ts deleted file mode 100644 index 7312f9bb0..000000000 --- a/src/web/src/cli/cli-controller.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Command } from 'commander'; - -import type { AssertionViewGenerator } from '@asap/shared/use-cases/assertion-views'; -import type { OscalService } from '@asap/shared/use-cases/oscal'; -import { SchematronCompiler } from '@asap/shared/use-cases/schematron-compiler'; -import { SchematronSummary } from '@asap/shared/use-cases/schematron-summary'; -import type { XSpecAssertionSummaryGenerator } from '@asap/shared/use-cases/xspec-summary'; - -export type CommandLineContext = { - console: Console; - useCases: { - assertionViewGenerator: AssertionViewGenerator; - oscalService: OscalService; - schematronCompiler: SchematronCompiler; - schematronSummary: SchematronSummary; - xSpecAssertionSummaryGenerator: XSpecAssertionSummaryGenerator; - }; -}; - -export const CommandLineController = (ctx: CommandLineContext) => { - const cli = new Command(); - cli - .command('compile-schematron') - .description( - 'compile schematron for each ruleset using the saxon-js xslt3 package', - ) - .action(async () => { - await ctx.useCases.schematronCompiler.compileAll(); - }); - cli - .command('validate ') - .description('validate OSCAL document (SSP, SAP, SAR, or POA&M)') - .action(async (schematronRuleset, oscalFilePath) => { - await ctx.useCases.oscalService.validateOscalFile( - schematronRuleset, - oscalFilePath, - ); - }); - cli - .command('generate-schematron-summaries') - .description('parse all Schematron XML and outputs JSON summaries') - .action(() => ctx.useCases.schematronSummary.generateAllSummaries()); - cli - .command('create-assertion-view') - .description( - 'write UI-optimized JSON of assertion views to target location', - ) - .action(async () => { - await ctx.useCases.assertionViewGenerator.generateAll(); - }); - cli - .command('create-xspec-summaries') - .description( - 'write UI-optimized JSON xspec scenario summaries, useful for usage examples', - ) - .action(async () => { - await ctx.useCases.xSpecAssertionSummaryGenerator.generateAll(); - }); - return cli; -}; -export type CommandLineController = ReturnType; diff --git a/src/web/src/cli/index.ts b/src/web/src/cli/index.ts deleted file mode 100644 index ca47cf7df..000000000 --- a/src/web/src/cli/index.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { execSync } from 'child_process'; -import { promises as fs } from 'fs'; -import { join } from 'path'; -import xmlFormatter from 'xml-formatter'; - -// @ts-ignore -import SaxonJS from 'saxon-js'; - -import { highlightXML } from '@asap/shared/adapters/highlight-js'; -import { - SaxonJsJsonOscalToXmlProcessor, - SaxonJsProcessor, - SaxonJsSchematronProcessorGateway, - SaxonJsXSpecParser, - SchematronParser, -} from '@asap/shared/adapters/saxon-js-gateway'; -import * as config from '@asap/shared/project-config'; -import { AssertionViewGenerator } from '@asap/shared/use-cases/assertion-views'; -import { OscalService } from '@asap/shared/use-cases/oscal'; -import { SchematronSummary } from '@asap/shared/use-cases/schematron-summary'; -import { XSpecAssertionSummaryGenerator } from '@asap/shared/use-cases/xspec-summary'; - -import { CommandLineController } from './cli-controller'; -import { SchematronCompiler } from '@asap/shared/use-cases/schematron-compiler'; -import { - SchematronProcessors, - SchematronRulesetKey, - SchematronRulesetKeys, -} from '@asap/shared/domain/schematron'; - -const readStringFile = async (fileName: string) => - fs.readFile(fileName, 'utf-8'); -const writeStringFile = (fileName: string, data: string) => - fs.writeFile(fileName, data, 'utf-8'); - -const GITHUB = { - owner: process.env.OWNER || '18F', - repository: process.env.REPOSITORY || 'fedramp-automation', - branch: process.env.BRANCH || 'master', - commit: execSync('git rev-parse HEAD').toString().trim(), -}; - -const controller = CommandLineController({ - console, - useCases: { - assertionViewGenerator: new AssertionViewGenerator( - { - assertionViewSEFPath: join( - config.BUILD_PATH, - 'assertion-grouping.sef.json', - ), - }, - SaxonJsProcessor({ SaxonJS }), - readStringFile, - writeStringFile, - console, - ), - oscalService: new OscalService( - { - ssp: SaxonJsJsonOscalToXmlProcessor({ - console, - sefUrl: `file://${join( - config.BUILD_PATH, - 'oscal_ssp_json-to-xml-converter.sef.json', - )}`, - SaxonJS, - }), - sap: SaxonJsJsonOscalToXmlProcessor({ - console, - sefUrl: `file://${join( - config.BUILD_PATH, - 'oscal_assessment-plan_json-to-xml-converter.json', - )}`, - SaxonJS, - }), - sar: SaxonJsJsonOscalToXmlProcessor({ - console, - sefUrl: `file://${join( - config.BUILD_PATH, - 'oscal_assessment-results_json-to-xml-converter.sef.json', - )}`, - SaxonJS, - }), - poam: SaxonJsJsonOscalToXmlProcessor({ - console, - sefUrl: `file://${join( - config.BUILD_PATH, - 'oscal_poam_json-to-xml-converter.sef.json', - )}`, - SaxonJS, - }), - }, - Object.fromEntries( - SchematronRulesetKeys.map((rulesetKey: SchematronRulesetKey) => [ - rulesetKey, - SaxonJsSchematronProcessorGateway({ - console, - sefUrls: { - poam: `file://${join( - config.BUILD_PATH, - `{rulesetKey}/poam.sef.json`, - )}`, - sap: `file://${join( - config.BUILD_PATH, - `{rulesetKey}/sap.sef.json`, - )}`, - sar: `file://${join( - config.BUILD_PATH, - `{rulesetKey}/sar.sef.json`, - )}`, - ssp: `file://${join( - config.BUILD_PATH, - `{rulesetKey}/ssp.sef.json`, - )}`, - }, - SaxonJS: SaxonJS, - baselinesBaseUrl: config.LOCAL_PATHS[rulesetKey].BASELINES_PATH, - registryBaseUrl: config.LOCAL_PATHS[rulesetKey].REGISTRY_PATH, - }), - ]), - ) as SchematronProcessors, - null as unknown as typeof fetch, - console, - readStringFile, - ), - schematronCompiler: new SchematronCompiler(console), - schematronSummary: new SchematronSummary( - SchematronParser({ SaxonJS }), - readStringFile, - writeStringFile, - GITHUB, - console, - ), - xSpecAssertionSummaryGenerator: new XSpecAssertionSummaryGenerator( - (xml: string) => highlightXML(xmlFormatter(xml)), - GITHUB, - SaxonJsXSpecParser({ SaxonJS }), - readStringFile, - writeStringFile, - console, - ), - }, -}); - -controller.parseAsync(process.argv).then(() => console.log('Done')); diff --git a/src/web/src/fitness.test.ts b/src/web/src/fitness.test.ts deleted file mode 100644 index f3152a227..000000000 --- a/src/web/src/fitness.test.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * This module includes extra tests that confirm some general requirements of - * the project that reside outside application code. - */ - -import fs from 'fs/promises'; - -import { describe, expect, it } from 'vitest'; - -import { version as npmSaxonVersion } from '../node_modules/saxon-js/package.json'; - -describe('Saxon-JS', () => { - /** - * The node.js version of SaxonJS is specified in: - * src/web/package.json - * The browser version of SaxonJS is vendored at: - * src/web/public/SaxonJS2.rt.js. - * - * There will be confusion if these versions get out of sync, so this test - * verifies that the two references are to the same version. - * - * NOTE: If this test is failing because you updated the version of SaxonJS - * in package.json, download the browser version and check it into the - * repository. See: https://www.saxonica.com/download/javascript.xml - * - * You may also want to check if Saxonica has improved their distribution - * method to include the browser version in the npm package, in which case - * this separate treatment could be deprecated. - */ - it('node.js version is the same as browser version', async () => { - const browserString = await fs.readFile('public/SaxonJS2.rt.js', 'utf-8'); - const browserMatch = browserString.match(/"product-version":"([\d\.]+)"/); - - expect(browserMatch).not.toBeNull(); - if (browserMatch === null) { - return; - } - const browserSaxonVersion = browserMatch[1]; - - // browserSaxonVersion include the minor version. eg: 2.4 - // the node.js version also includes the patch version. eg: 2.4.0 - // confirm that, at least, the minor versions match. - expect(npmSaxonVersion.startsWith(browserSaxonVersion)).toBeTruthy(); - }); -}); diff --git a/src/web/src/index.ts b/src/web/src/index.ts deleted file mode 100644 index ba8d978b0..000000000 --- a/src/web/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { runBrowserContext } from '@asap/browser'; - -runBrowserContext({ - element: document.getElementById('root') as HTMLElement, - baseUrl: import.meta.env.BASE_URL as `${string}/`, - githubRepository: import.meta.env.GITHUB, -}); diff --git a/src/web/src/shared/adapters/highlight-js-commonjs.ts b/src/web/src/shared/adapters/highlight-js-commonjs.ts deleted file mode 100644 index 8a2aff1a0..000000000 --- a/src/web/src/shared/adapters/highlight-js-commonjs.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * This is a separate module from `highlight-js.ts` to accomodate an CommonJS - * dependency within highlight.js. This version is intended to be used via - * node.js, while the ES6 module is to be used by Snowpack browser builds. - */ -const hljs = require('highlight.js/lib/core'); -const xml = require('highlight.js/lib/languages/xml'); - -import type { FormatXml } from '@asap/shared/domain/xml'; - -hljs.registerLanguage('xml', xml); - -export const highlightXML: FormatXml = (xmlString: string) => { - return hljs.highlight(xmlString, { - language: 'xml', - }).value; -}; diff --git a/src/web/src/shared/adapters/highlight-js.ts b/src/web/src/shared/adapters/highlight-js.ts deleted file mode 100644 index 092d521ca..000000000 --- a/src/web/src/shared/adapters/highlight-js.ts +++ /dev/null @@ -1,12 +0,0 @@ -import hljs from 'highlight.js/lib/core'; -import xml from 'highlight.js/lib/languages/xml'; - -import type { FormatXml } from '@asap/shared/domain/xml'; - -hljs.registerLanguage('xml', xml); - -export const highlightXML: FormatXml = (xmlString: string) => { - return hljs.highlight(xmlString, { - language: 'xml', - }).value; -}; diff --git a/src/web/src/shared/adapters/saxon-js-gateway.test.ts b/src/web/src/shared/adapters/saxon-js-gateway.test.ts deleted file mode 100644 index b819f41fc..000000000 --- a/src/web/src/shared/adapters/saxon-js-gateway.test.ts +++ /dev/null @@ -1,248 +0,0 @@ -import SaxonJS from 'saxon-js'; -import { it, describe, expect, vi } from 'vitest'; -import { mock } from 'vitest-mock-extended'; - -import { - SaxonJSXmlIndenter, - SaxonJsSchematronProcessorGateway, - SaxonJsJsonOscalToXmlProcessor, - SaxonJsXSpecParser, -} from './saxon-js-gateway'; - -import { BUILD_PATH } from '../project-config'; - -/** - * @vitest-environment jsdom - */ -describe('xml indent', () => { - it('works', async () => { - const xmlIndent = SaxonJSXmlIndenter({ SaxonJS }); - const indentedXml = await xmlIndent( - '', - ); - expect(indentedXml).toEqual( - ` - - - - -`, - ); - }); -}); - -describe('saxon-js gateway', () => { - it('produces validation results for transformation', async () => { - vi.spyOn(SaxonJS, 'transform').mockImplementation((() => { - return Promise.resolve({ - principalResult: SAMPLE_SVRL, - }); - }) as any); - const reportGateway = SaxonJsSchematronProcessorGateway({ - console, - SaxonJS, - sefUrls: { - poam: '/test.sef.json', - sap: '/test.sef.json', - sar: '/test.sef.json', - ssp: '/test.sef.json', - }, - baselinesBaseUrl: '/baselines', - registryBaseUrl: '/xml', - }); - const result = await reportGateway( - 'ignored', - ); - expect(SaxonJS.transform).toHaveBeenCalled(); - expect(result).toEqual({ - documentType: 'ssp', - schematronResult: { - failedAsserts: [ - { - diagnosticReferences: ['Diagnostic reference node content.'], - id: 'incorrect-role-association', - location: - "/*:system-security-plan[namespace-uri()='http://csrc.nist.gov/ns/oscal/1.0'][1]/*:metadata[namespace-uri()='http://csrc.nist.gov/ns/oscal/1.0'][1]", - role: 'error', - test: 'not(exists($extraneous-roles))', - text: 'Failed assertion text node content.', - uniqueId: 'incorrect-role-association-0', - }, - ], - svrlString: SAMPLE_SVRL, - successfulReports: [ - { - id: 'control-implemented-requirements-stats', - location: - "/*:system-security-plan[namespace-uri()='http://csrc.nist.gov/ns/oscal/1.0'][1]/*:control-implementation[namespace-uri()='http://csrc.nist.gov/ns/oscal/1.0'][1]", - role: 'information', - test: 'count($results/errors/error) = 0', - text: 'Successful report text content.', - uniqueId: 'control-implemented-requirements-stats-0', - }, - ], - }, - }); - }); - - it('converts JSON to XML', async () => { - const jsonToXml = SaxonJsJsonOscalToXmlProcessor({ - console: mock({ - log: vi.fn(), - }), - sefUrl: `${BUILD_PATH}/oscal_ssp_json-to-xml-converter.sef.json`, - SaxonJS, - }); - const convertedXml = await jsonToXml('{"system-security-plan": {}}'); - expect(convertedXml.toString()).toMatch(/ { - const parseXspec = SaxonJsXSpecParser({ SaxonJS }); - const xspec = parseXspec(SAMPLE_XSPEC); - expect(xspec).toEqual([ - { - node: 'x:scenario', - label: 'In FedRAMP OSCAL Schematron', - children: [ - { - node: 'x:context', - context: - '', - }, - { - node: 'x:expect-assert', - id: 'has-xspec-reference', - label: 'that is incorrect', - }, - ], - }, - { - node: 'x:scenario', - label: 'FedRAMP OSCAL SSP Attachments', - children: [ - { - node: 'x:scenario', - label: 'General:', - children: [ - { - node: 'x:scenario', - label: 'when a resource attachment type', - children: [ - { - node: 'x:scenario', - label: 'is allowed', - children: [ - { - node: 'x:context', - context: - '\n \n ', - }, - { - node: 'x:expect-not-assert', - id: 'attachment-type-is-valid', - label: 'that is correct', - }, - { - node: 'x:expect-not-assert', - id: 'attachment-type-is-valid-2', - label: 'that is correct 2', - }, - ], - }, - { - node: 'x:scenario', - label: 'is not allowed', - children: [ - { - node: 'x:context', - context: - '\n \n ', - }, - { - node: 'x:expect-assert', - id: 'attachment-type-is-valid', - label: 'that is an error', - }, - ], - }, - ], - }, - ], - }, - ], - }, - ]); - }); -}); - -const SAMPLE_SVRL = ` - - - - - - - - - Failed assertion text node content. - Diagnostic reference node content. - - - Successful report text content. - - -`; - -const SAMPLE_XSPEC = ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -`; diff --git a/src/web/src/shared/adapters/saxon-js-gateway.ts b/src/web/src/shared/adapters/saxon-js-gateway.ts deleted file mode 100644 index 831a062e9..000000000 --- a/src/web/src/shared/adapters/saxon-js-gateway.ts +++ /dev/null @@ -1,509 +0,0 @@ -import type { IndentXml } from '@asap/shared/domain/xml'; -import type { - FailedAssert, - ParseSchematronAssertions, - SchematronJSONToXMLProcessor, - SchematronProcessor, - SchematronResult, - SuccessfulReport, -} from '@asap/shared/domain/schematron'; - -import { getDocumentTypeForRootNode, OscalDocumentKey } from '../domain/oscal'; -import type { ParseXSpec, XSpecNode, XSpecScenarioNode } from '../domain/xspec'; -import type { XSLTProcessor } from '../use-cases/assertion-views'; -import { base64DataUriForJson, formatElapsedTime } from '../util'; - -const getSchematronResult = async ( - SaxonJS: any, - svrlString: string, -): Promise => { - const document: DocumentFragment = await SaxonJS.getResource({ - text: svrlString, - type: 'xml', - }); - const failedAsserts = SaxonJS.XPath.evaluate( - '//svrl:failed-assert', - document, - { - // prettier-ignore - namespaceContext: { svrl: 'http://purl.oclc.org/dsdl/svrl' }, //NOSONAR - resultForm: 'array', - }, - ); - const successfulReports = SaxonJS.XPath.evaluate( - '//svrl:successful-report', - document, - { - // prettier-ignore - namespaceContext: { svrl: 'http://purl.oclc.org/dsdl/svrl' }, //NOSONAR - resultForm: 'array', - }, - ); - return { - failedAsserts: Array.prototype.map.call(failedAsserts, (assert, index) => { - return Object.keys(assert.attributes).reduce( - (assertMap: Record, key: string) => { - const name = assert.attributes[key].name; - if (name) { - assertMap[name] = assert.attributes[key].value; - } - return assertMap; - }, - { - diagnosticReferences: Array.prototype.map.call( - SaxonJS.XPath.evaluate('svrl:diagnostic-reference', assert, { - // prettier-ignore - namespaceContext: { svrl: 'http://purl.oclc.org/dsdl/svrl' }, //NOSONAR - resultForm: 'array', - }), - (node: Node) => node.textContent, - ) as any, - text: SaxonJS.XPath.evaluate('svrl:text', assert, { - // prettier-ignore - namespaceContext: { svrl: 'http://purl.oclc.org/dsdl/svrl' }, //NOSONAR - }).textContent, - uniqueId: `${assert.getAttribute('id')}-${index}` as any, - }, - ); - }) as FailedAssert[], - svrlString, - successfulReports: Array.prototype.map.call( - successfulReports, - (report, index) => { - return Object.keys(report.attributes).reduce( - (assertMap: Record, key: string) => { - const name = report.attributes[key].name; - if (name) { - assertMap[name] = report.attributes[key].value; - } - return assertMap; - }, - { - text: SaxonJS.XPath.evaluate('svrl:text', report, { - // prettier-ignore - namespaceContext: { svrl: 'http://purl.oclc.org/dsdl/svrl' }, //NOSONAR - }).textContent, - uniqueId: `${report.getAttribute('id')}-${index}` as any, - }, - ); - }, - ) as SuccessfulReport[], - }; -}; - -export const SaxonJsSchematronProcessorGateway = - (ctx: { - console: Console; - sefUrls: Record; - SaxonJS: any; - baselinesBaseUrl: string; - registryBaseUrl: string; - }): SchematronProcessor => - (sourceText: string) => { - const startTime = performance.now(); - return ctx.SaxonJS.getResource({ - text: sourceText, - type: 'xml', - }).then((resource: any) => { - const rootNodeName = resource.documentElement.nodeName as string; - const documentType = getDocumentTypeForRootNode(rootNodeName); - if (documentType === null) { - throw new Error(`Unknown root node "${rootNodeName}"`); - } - return ( - ctx.SaxonJS.transform( - { - stylesheetLocation: ctx.sefUrls[documentType], - destination: 'serialized', - sourceNode: resource, - stylesheetParams: { - 'baselines-base-path': ctx.baselinesBaseUrl, - 'registry-base-path': ctx.registryBaseUrl, - 'param-use-remote-resources': '1', - }, - }, - 'async', - ) as Promise - ) - .then(result => { - const elapsed = formatElapsedTime(performance.now() - startTime); - ctx.console.log( - `OSCAL XML validation completed in ${elapsed} (HH:MM:SS)`, - ); - return result; - }) - .then((output: any) => { - return getSchematronResult( - ctx.SaxonJS, - output.principalResult as string, - ); - }) - .then(schematronResult => { - return { - documentType, - schematronResult, - }; - }); - }); - }; - -type XmlIndenterContext = { - SaxonJS: any; -}; - -export const SaxonJSXmlIndenter = - (ctx: XmlIndenterContext): IndentXml => - (sourceText: string) => { - return ( - ctx.SaxonJS.transform( - // This is an XSLT identity tranformation, manually-compiled to SEF - // format. Its output is indented XML. - { - stylesheetInternal: { - N: 'package', - version: '10', - packageVersion: '1', - saxonVersion: 'Saxon-JS 2.2', - target: 'JS', - targetVersion: '2', - name: 'TOP-LEVEL', - relocatable: 'true', - buildDateTime: '2021-07-01T13:24:49.504-05:00', - ns: 'xml=~ xsl=~', - C: [ - { - N: 'co', - id: '0', - binds: '0', - C: [ - { - N: 'mode', - onNo: 'TC', - flags: '', - patternSlots: '0', - prec: '', - C: [ - { - N: 'templateRule', - rank: '0', - prec: '0', - seq: '0', - ns: 'xml=~ xsl=~', - minImp: '0', - flags: 's', - baseUri: - 'file:///Users/dan/src/10x/fedramp-automation/resources/validations/ui/identity.xsl', - slots: '200', - line: '3', - module: 'identity.xsl', - match: 'node()|@*', - prio: '-0.5', - matches: 'N u[NT,NP,NC,NE]', - C: [ - { - N: 'p.nodeTest', - role: 'match', - test: 'N u[NT,NP,NC,NE]', - sType: '1N u[NT,NP,NC,NE]', - }, - { - N: 'copy', - sType: '1N u[1NT ,1NP ,1NC ,1NE ] ', - flags: 'cin', - role: 'action', - line: '4', - C: [ - { - N: 'applyT', - sType: '* ', - line: '5', - mode: '#unnamed', - bSlot: '0', - C: [ - { - N: 'docOrder', - sType: - '*N u[N u[N u[N u[NT,NP],NC],NE],NA]', - role: 'select', - line: '5', - C: [ - { - N: 'union', - op: '|', - sType: - '*N u[N u[N u[N u[NT,NP],NC],NE],NA]', - ns: '= xml=~ fn=~ xsl=~ ', - C: [ - { - N: 'axis', - name: 'child', - nodeTest: '*N u[NT,NP,NC,NE]', - }, - { - N: 'axis', - name: 'attribute', - nodeTest: '*NA', - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - { - N: 'templateRule', - rank: '1', - prec: '0', - seq: '0', - ns: 'xml=~ xsl=~', - minImp: '0', - flags: 's', - baseUri: - 'file:///Users/dan/src/10x/fedramp-automation/resources/validations/ui/identity.xsl', - slots: '200', - line: '3', - module: 'identity.xsl', - match: 'node()|@*', - prio: '-0.5', - matches: 'NA', - C: [ - { - N: 'p.nodeTest', - role: 'match', - test: 'NA', - sType: '1NA', - }, - { - N: 'copy', - sType: '1NA ', - flags: 'cin', - role: 'action', - line: '4', - C: [ - { - N: 'applyT', - sType: '* ', - line: '5', - mode: '#unnamed', - bSlot: '0', - C: [ - { - N: 'docOrder', - sType: - '*N u[N u[N u[N u[NT,NP],NC],NE],NA]', - role: 'select', - line: '5', - C: [ - { - N: 'union', - op: '|', - sType: - '*N u[N u[N u[N u[NT,NP],NC],NE],NA]', - ns: '= xml=~ fn=~ xsl=~ ', - C: [ - { - N: 'axis', - name: 'child', - nodeTest: '*N u[NT,NP,NC,NE]', - }, - { - N: 'axis', - name: 'attribute', - nodeTest: '*NA', - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - { N: 'overridden' }, - { - N: 'output', - C: [ - { - N: 'property', - name: 'Q{http://saxon.sf.net/}stylesheet-version', - value: '10', - }, - { N: 'property', name: 'omit-xml-declaration', value: 'yes' }, - { N: 'property', name: 'indent', value: 'yes' }, - ], - }, - { N: 'decimalFormat' }, - ], - Σ: 'da0fec95', - }, - destination: 'serialized', - sourceText, - }, - 'async', - ) as Promise - ) - .then((output: any) => { - return output.principalResult as string; - }) - .catch(error => { - console.error(error); - throw new Error(`Error indenting xml: ${error}`); - }); - }; - -// SaxonJS attribute lookup behaves differently on node.js vs the browser. -const safeGetAttribute = (node: any, name: string) => { - if (node.getAttribute) { - return node.getAttribute(name); - } - if (node.attributes) { - for (const attribute of node.attributes) { - if (attribute.name === name) { - return attribute.value; - } - } - } - throw new Error(`Attribute "${name}" not found.`); -}; - -export const SchematronParser = - (ctx: { SaxonJS: any }): ParseSchematronAssertions => - (schematron: string) => { - const document = ctx.SaxonJS.getPlatform().parseXmlFromString(schematron); - const asserts = ctx.SaxonJS.XPath.evaluate('//sch:assert', document, { - // prettier-ignore - namespaceContext: { sch: 'http://purl.oclc.org/dsdl/schematron' }, //NOSONAR - resultForm: 'array', - }); - return asserts.map((assert: any) => ({ - id: assert.getAttribute('id'), - message: assert.textContent, - role: assert.getAttribute('role'), - fedrampSpecific: assert.getAttribute('fedramp:specific') === 'true', - })); - }; - -// Wrapper over an XSLT transform that logs and re-rasies errors. -const transform = async (SaxonJS: any, options: any) => { - try { - return SaxonJS.transform(options, 'async') as Promise; - } catch (error) { - console.error(error); - throw new Error(`Error transforming xml: ${error}`); - } -}; - -/** - * Given XSLT in SEF format and an input XML document, return a string of the - * transformed XML. - **/ -export const SaxonJsProcessor = - (ctx: { SaxonJS: any }): XSLTProcessor => - (stylesheetText: string, sourceText: string) => { - try { - return transform(ctx.SaxonJS, { - stylesheetText, - sourceText, - destination: 'serialized', - stylesheetParams: {}, - }).then((output: any) => { - return output.principalResult as string; - }); - } catch (error) { - console.error(error); - throw new Error(`Error transforming xml: ${error}`); - } - }; - -export const SaxonJsJsonOscalToXmlProcessor = - (ctx: { - console: Console; - sefUrl: string; - SaxonJS: any; - }): SchematronJSONToXMLProcessor => - (jsonString: string) => { - const startTime = performance.now(); - return base64DataUriForJson(jsonString) - .then(base64Json => - ctx.SaxonJS.transform( - { - stylesheetLocation: ctx.sefUrl, - destination: 'serialized', - initialTemplate: 'from-json', - stylesheetParams: { - file: base64Json, - }, - }, - 'async', - ), - ) - .then((output: any) => { - const elapsed = formatElapsedTime(performance.now() - startTime); - ctx.console.log( - `JSON to XML conversion completed in ${elapsed} (HH:MM:SS)`, - ); - return output.principalResult as string; - }); - }; - -const parseScenarioNode = (scenario: any): XSpecScenarioNode => { - const nodes = Array.from(scenario.childNodes) as any[]; - const children = nodes - .map((childNode: any): XSpecNode | null => { - if (childNode.nodeName === 'x:context') { - return { - node: 'x:context', - context: childNode.childNodes[1].toString(), - }; - } - if (childNode.nodeName === 'x:expect-not-assert') { - return { - node: 'x:expect-not-assert', - id: safeGetAttribute(childNode, 'id'), - label: safeGetAttribute(childNode, 'label'), - }; - } - if (childNode.nodeName === 'x:expect-assert') { - return { - node: 'x:expect-assert', - id: safeGetAttribute(childNode, 'id'), - label: safeGetAttribute(childNode, 'label'), - }; - } - if (childNode.nodeName === 'x:scenario') { - return parseScenarioNode(childNode); - } - return null; - }) - .filter((node: any) => node) as XSpecNode[]; - return { - node: 'x:scenario', - label: safeGetAttribute(scenario, 'label'), - children, - }; -}; - -export const SaxonJsXSpecParser = - (ctx: { SaxonJS: any }): ParseXSpec => - (xmlString: string) => { - const document = ctx.SaxonJS.getPlatform().parseXmlFromString(xmlString); - const scenarios = ctx.SaxonJS.XPath.evaluate( - '/x:description/x:scenario', - document, - { - namespaceContext: { x: 'http://www.jenitennison.com/xslt/xspec' }, - resultForm: 'array', - }, - ); - return scenarios.map((node: any) => parseScenarioNode(node)); - }; diff --git a/src/web/src/shared/domain/github.test.ts b/src/web/src/shared/domain/github.test.ts deleted file mode 100644 index 7f801c085..000000000 --- a/src/web/src/shared/domain/github.test.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { it, describe, expect } from 'vitest'; - -import * as github from './github'; - -describe('github', () => { - describe('getBranchTreeUrl', () => { - it('returns a root URL for the default branch', () => { - expect( - github.getBranchTreeUrl({ - owner: 'owner', - branch: 'master', - repository: 'my-repository', - commit: 'master', - }), - ).toEqual('https://github.com/owner/my-repository'); - }); - it('returns a tree URL', () => { - expect( - github.getBranchTreeUrl({ - owner: 'owner', - branch: 'branch-name', - repository: 'my-repository', - commit: 'master', - }), - ).toEqual('https://github.com/owner/my-repository/tree/branch-name'); - }); - }); - describe('getRepositoryRawUrl', () => { - it('returns well-formed URL', () => { - expect( - github.getRepositoryRawUrl( - { - owner: '18F', - branch: 'master', - repository: 'fedramp-automation', - commit: 'master', - }, - 'src/validations/test/demo/FedRAMP-SSP-OSCAL-Template.xml', - ), - ).toEqual( - 'https://raw.githubusercontent.com/18F/fedramp-automation/master/src/validations/test/demo/FedRAMP-SSP-OSCAL-Template.xml', - ); - }); - }); - describe('getDeveloperExampleUrl', () => { - it('returns correct URL for repository', () => { - expect( - github.getDeveloperExampleUrl({ - owner: '18F', - branch: 'my-branch', - repository: 'fedramp-automation', - commit: 'master', - }), - ).toEqual( - 'https://github.com/18F/fedramp-automation/tree/my-branch/src/examples', - ); - }); - }); - describe('getBlobFileUrl', () => { - it('returns correct URL with line numbers', () => { - expect( - github.getBlobFileUrl( - { - owner: '18F', - branch: 'master', - repository: 'fedramp-automation', - commit: 'master', - }, - '/src/validations/rules/ssp.sch', - { start: 545, end: 551 }, - ), - ).toEqual( - 'https://github.com/18F/fedramp-automation/blob/master/src/validations/rules/ssp.sch#L545-L551', - ); - }); - it('returns correct URL without line numbers', () => { - expect( - github.getBlobFileUrl( - { - owner: '18F', - branch: 'master', - repository: 'fedramp-automation', - commit: 'master', - }, - '/src/validations/rules/ssp.sch', - ), - ).toEqual( - 'https://github.com/18F/fedramp-automation/blob/master/src/validations/rules/ssp.sch', - ); - }); - }); -}); diff --git a/src/web/src/shared/domain/github.ts b/src/web/src/shared/domain/github.ts deleted file mode 100644 index 763192f72..000000000 --- a/src/web/src/shared/domain/github.ts +++ /dev/null @@ -1,77 +0,0 @@ -export type GithubRepository = { - owner: string; - repository: string; - branch: string; - commit: string; -}; - -export const DEFAULT_REPOSITORY: GithubRepository = { - owner: '18F', - repository: 'fedramp-automation', - branch: 'master', - commit: 'master', -}; - -const SAMPLE_OSCAL_PATHS = [ - 'dist/content/rev4/templates/poam/xml/FedRAMP-POAM-OSCAL-Template.xml', - 'dist/content/rev4/templates/poam/json/FedRAMP-POAM-OSCAL-Template.json', - 'dist/content/rev4/templates/poam/yaml/FedRAMP-POAM-OSCAL-Template.yaml', - 'dist/content/rev4/templates/sap/xml/FedRAMP-SAP-OSCAL-Template.xml', - 'dist/content/rev4/templates/sap/json/FedRAMP-SAP-OSCAL-Template.json', - 'dist/content/rev4/templates/sap/yaml/FedRAMP-SAP-OSCAL-Template.yaml', - 'dist/content/rev4/templates/sar/xml/FedRAMP-SAR-OSCAL-Template.xml', - 'dist/content/rev4/templates/sar/json/FedRAMP-SAR-OSCAL-Template.json', - 'dist/content/rev4/templates/sar/yaml/FedRAMP-SAR-OSCAL-Template.yaml', - 'dist/content/rev4/templates/ssp/xml/FedRAMP-SSP-OSCAL-Template.xml', - 'dist/content/rev4/templates/ssp/json/FedRAMP-SSP-OSCAL-Template.json', - 'dist/content/rev4/templates/ssp/yaml/FedRAMP-SSP-OSCAL-Template.yaml', -]; - -export const getBranchTreeUrl = ( - github: GithubRepository, - useDefaultShortForm = true, -) => { - if (useDefaultShortForm && github.branch === DEFAULT_REPOSITORY.branch) { - return `https://github.com/${github.owner}/${github.repository}`; - } - return `https://github.com/${github.owner}/${github.repository}/tree/${github.branch}`; -}; - -type LineRange = { start: number; end: number }; -export const getBlobFileUrl = ( - github: GithubRepository, - repositoryPath: `/${string}`, - lineRange?: LineRange, -) => { - const blobUrl = `https://github.com/${github.owner}/${github.repository}/blob/${github.commit}${repositoryPath}`; - if (!lineRange) { - return blobUrl; - } - return `${blobUrl}#L${lineRange.start}-L${lineRange.end}`; -}; - -export const getRepositoryRawUrl = ( - github: GithubRepository, - repositoryPath: string, -) => { - return `https://raw.githubusercontent.com/${github.owner}/${github.repository}/${github.branch}/${repositoryPath}`; -}; - -export const getSampleOscalDocuments = (github: GithubRepository) => { - return SAMPLE_OSCAL_PATHS.map(url => { - const urlParts = url.split('/'); - return { - url: getRepositoryRawUrl(github, url), - displayName: urlParts[urlParts.length - 1], - }; - }); -}; - -export const getDeveloperExampleUrl = (github: GithubRepository) => { - const branchTree = getBranchTreeUrl(github, false); - return `${branchTree}/src/examples`; -}; - -export const getNewIssueUrl = (github: GithubRepository) => { - return `https://github.com/${github.owner}/${github.repository}/issues/new/choose`; -}; diff --git a/src/web/src/shared/domain/metrics.ts b/src/web/src/shared/domain/metrics.ts deleted file mode 100644 index f57d730a5..000000000 --- a/src/web/src/shared/domain/metrics.ts +++ /dev/null @@ -1,33 +0,0 @@ -// If you add a new event type here, don't forget to also add to the documentation. -// see: src/web/src/browser/views/components/UsageTrackingPage.tsx -export type EventType = 'validation-summary' | 'app-loaded'; - -export type Event = { - // Deployment of the application (Github branch name) - deploymentId: string; - - // Unique browser identifier - deviceId: string; - - // Optional. User-specified identifier (eg, email address) - userAlias?: string; - - // ID of this event. - eventType: EventType; - - // Associated data for this `eventType` - data: Record; -}; - -// Log an event -export type EventLogger = (event: Event) => Promise; - -// Returns a unique fingerprint for the user's device. -export type GetBrowserFingerprint = () => Promise; - -// Use to determine whether the user has opted-in to tracking. -// The 10x ASAP Phase 4 team asks its partners to voluntarily opt-in. -export interface OptInStatusAdapter { - setOptInStatus(optInStatus: boolean): void; - getOptInStatus(): boolean; -} diff --git a/src/web/src/shared/domain/oscal.ts b/src/web/src/shared/domain/oscal.ts deleted file mode 100644 index 807c935cd..000000000 --- a/src/web/src/shared/domain/oscal.ts +++ /dev/null @@ -1,15 +0,0 @@ -export const OscalDocumentKeys = ['poam', 'sap', 'sar', 'ssp'] as const; -export type OscalDocumentKey = typeof OscalDocumentKeys[number]; - -const ROOT_NODE_MAPPING: Record = { - 'plan-of-action-and-milestones': 'poam', - 'assessment-plan': 'sap', - 'assessment-results': 'sar', - 'system-security-plan': 'ssp', -}; - -export const getDocumentTypeForRootNode = ( - rootNodeName: string, -): OscalDocumentKey | null => { - return ROOT_NODE_MAPPING[rootNodeName] || null; -}; diff --git a/src/web/src/shared/domain/schematron.test.ts b/src/web/src/shared/domain/schematron.test.ts deleted file mode 100644 index bcbbc6d9a..000000000 --- a/src/web/src/shared/domain/schematron.test.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { getSchematronAssertLineRanges } from './schematron'; - -describe('schematron', () => { - describe('getSchematronAssertLineRanges', () => { - it('returns line numbers for sch:assert', () => { - const lineNumbers = getSchematronAssertLineRanges(TEST_SCH); - expect(lineNumbers).toEqual({ - 'has-import-ssp': { - end: 13, - start: 8, - }, - 'has-import-ssp-href': { - end: 48, - start: 43, - }, - 'has-location-assessment-subject': { - end: 39, - start: 34, - }, - 'has-web-applications': { - end: 32, - start: 24, - }, - }); - }); - }); -}); - -const TEST_SCH = ` - - - - - An OSCAL SAP must have an import-ssp element. - - - - For every web interface to be tested there must be a matching task entry. - - A FedRAMP SAP must have a assesment-subject with a type of 'location'. - - - An OSCAL SAP import-ssp element must have an href attribute. - - - -`; diff --git a/src/web/src/shared/domain/schematron.ts b/src/web/src/shared/domain/schematron.ts deleted file mode 100644 index c67b0169d..000000000 --- a/src/web/src/shared/domain/schematron.ts +++ /dev/null @@ -1,145 +0,0 @@ -/** - * Core Schematron logic used in the application. - */ - -import { getBlobFileUrl, GithubRepository } from './github'; -import type { OscalDocumentKey } from './oscal'; -import { LineRange, linesOf } from './text'; - -export type FailedAssert = { - uniqueId: string; - id: string; - location: string; - role?: string; - see?: string; - test: string; - text: string; - diagnosticReferences: string[]; -}; -export type SuccessfulReport = { - uniqueId: string; - id: string; - location: string; - role?: string; - test: string; - text: string; -}; -export type SchematronResult = { - failedAsserts: FailedAssert[]; - svrlString: string; - successfulReports: SuccessfulReport[]; -}; -export type ValidationReport = { - title: string; - failedAsserts: FailedAssert[]; -}; - -export type SchematronJSONToXMLProcessor = ( - jsonString: string, -) => Promise; - -export type SchematronJSONToXMLProcessors = Record< - OscalDocumentKey, - SchematronJSONToXMLProcessor ->; - -export type SchematronProcessor = (oscalXmlString: string) => Promise<{ - documentType: OscalDocumentKey; - schematronResult: SchematronResult; -}>; - -// See the concrete implementation in project-config.ts -export type SchematronRuleset = { - // The key corresponds to the directory used in the project structure, - // such as "rev4" - key: SchematronRulesetKey; - // The title for this ruleset is displayed in the user interface - title: string; - description?: string; -}; - -// Define these in priority order - ie, the most-recent (or most-relevant) -// ruleset should be first in the list. -export const SchematronRulesetKeys = ['rev4','rev5'] as const; -export type SchematronRulesetKey = typeof SchematronRulesetKeys[number]; - -export const SCHEMATRON_RULESETS: Record< - SchematronRulesetKey, - SchematronRuleset -> = { - rev5: { - key: 'rev5', - title: 'NIST RMF revision 5', - description: '', - }, - rev4: { - key: 'rev4', - title: 'NIST RMF revision 4', - description: 'The latest NIST RMF is rev5', - }, -} as const; - -export type SchematronProcessors = Record< - SchematronRuleset['key'], - SchematronProcessor ->; - -export type SchematronAssert = { - id: string; - message: string; - role: string; - referenceUrl: string; - fedrampSpecific: boolean; -}; - -export type ParseSchematronAssertions = ( - schematron: string, -) => SchematronAssert[]; -export type GetSchematronAssertions = ( - rulesetKey: SchematronRulesetKey, -) => Promise<{ - poam: SchematronAssert[]; - sap: SchematronAssert[]; - sar: SchematronAssert[]; - ssp: SchematronAssert[]; -}>; - -export class SchematronSummaryGenerator {} - -export const getSchematronAssertLineRanges = (xml: string) => { - const regExp = new RegExp( - ``, - 'g', - ); - const matches = xml.matchAll(regExp); - - const lineNumbers: Record = {}; - for (const match of matches) { - const elementString = match[0]; - const idAttribute = match[1]; - lineNumbers[idAttribute] = linesOf(xml, elementString); - } - return lineNumbers; -}; - -export const generateSchematronSummary = ( - schXml: string, - asserts: SchematronAssert[], - github: GithubRepository, - repositoryPath: `/${string}`, -) => { - const lineRanges = getSchematronAssertLineRanges(schXml); - return asserts.map(assert => { - const lineRange = lineRanges[assert.id]; - if (!lineRange) { - return { - ...assert, - referenceUrl: getBlobFileUrl(github, repositoryPath), - }; - } - return { - ...assert, - referenceUrl: getBlobFileUrl(github, repositoryPath, lineRange), - }; - }); -}; diff --git a/src/web/src/shared/domain/source-code-links.test.ts b/src/web/src/shared/domain/source-code-links.test.ts deleted file mode 100644 index d2451c0a5..000000000 --- a/src/web/src/shared/domain/source-code-links.test.ts +++ /dev/null @@ -1,208 +0,0 @@ -import { describe, expect, it } from 'vitest'; - -import { getDocumentReferenceUrls } from './source-code-links'; - -describe('source code link generator', () => { - const github = { - owner: '18F', - branch: 'master', - repository: 'fedramp-automation', - commit: 'master', - }; - describe('getDocumentReferenceUrls', () => { - it('works', () => { - expect( - getDocumentReferenceUrls({ - github, - documentType: 'ssp', - rulesetKey: 'rev4', - schXmlString: TEST_SCH, - }), - ).toEqual({ - assertions: { - 'has-import-ssp': - 'https://github.com/18F/fedramp-automation/blob/master/src/validations/rules/rev4/ssp.sch#L8-L13', - 'has-import-ssp-href': - 'https://github.com/18F/fedramp-automation/blob/master/src/validations/rules/rev4/ssp.sch#L43-L48', - 'has-location-assessment-subject': - 'https://github.com/18F/fedramp-automation/blob/master/src/validations/rules/rev4/ssp.sch#L34-L39', - 'has-web-applications': - 'https://github.com/18F/fedramp-automation/blob/master/src/validations/rules/rev4/ssp.sch#L24-L32', - }, - }); - }); - }); -}); - -const TEST_SCH = ` - - - - - An OSCAL SAP must have an import-ssp element. - - - - For every web interface to be tested there must be a matching task entry. - - A FedRAMP SAP must have a assesment-subject with a type of 'location'. - - - An OSCAL SAP import-ssp element must have an href attribute. - - - -`; - -const TEST_XSPEC = ` - true - false - true - - - - - - - - fips-199-moderate - - - - - - - - - - - - - - - - - - - - fips-199-low - - - - - - - - - - invalid - - - - - - - - - - fips-199-moderate - - fips-199-moderate - fips-199-moderate - fips-199-moderate - - - - - - - - - - - fips-199-moderate - - fips-199-high - fips-199-moderate - fips-199-moderate - - - - - - - - - -`; diff --git a/src/web/src/shared/domain/source-code-links.ts b/src/web/src/shared/domain/source-code-links.ts deleted file mode 100644 index 1d532ab19..000000000 --- a/src/web/src/shared/domain/source-code-links.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { REPOSITORY_PATHS } from '../project-config'; -import { getBlobFileUrl, GithubRepository } from './github'; -import { OscalDocumentKey } from './oscal'; -import { - getSchematronAssertLineRanges, - SchematronRulesetKey, -} from './schematron'; -import { LineRange } from './text'; - -export const getDocumentReferenceUrls = ({ - github, - documentType, - schXmlString, - rulesetKey, -}: { - github: GithubRepository; - documentType: OscalDocumentKey; - schXmlString: string; - rulesetKey: SchematronRulesetKey; -}) => { - return { - assertions: getElementReferenceUrls({ - lineRanges: getSchematronAssertLineRanges(schXmlString), - github, - xmlRepositoryPath: REPOSITORY_PATHS[rulesetKey].SCHEMATRON[documentType], - }), - }; -}; - -export type DocumentReferenceUrls = ReturnType; - -const getElementReferenceUrls = ({ - lineRanges, - github, - xmlRepositoryPath, -}: { - lineRanges: Record; - github: GithubRepository; - xmlRepositoryPath: `/${string}`; -}) => { - return Object.entries(lineRanges).reduce( - (acc: Record, [id, lineRange]) => { - if (lineRange) { - acc[id] = getBlobFileUrl(github, xmlRepositoryPath, lineRange); - } else { - acc[id] = getBlobFileUrl(github, xmlRepositoryPath); - } - return acc; - }, - {}, - ); -}; diff --git a/src/web/src/shared/domain/text.test.ts b/src/web/src/shared/domain/text.test.ts deleted file mode 100644 index 25415a338..000000000 --- a/src/web/src/shared/domain/text.test.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { getElementString, linesOf, linesOfXml } from './text'; - -describe('text domain', () => { - describe('getElementString', () => { - it('work with one closing tag', () => { - const elementString = getElementString( - TEST_SCH, - ['sch:schema', 'sch:pattern', 'sch:rule', 'sch:assert'], - ['sch:assert'], - ); - expect(elementString).toEqual(`An OSCAL SAP must have an import-ssp element.`); - }); - it('work with two closing tags', () => { - const elementString = getElementString( - TEST_SCH, - ['sch:schema', 'sch:pattern', 'sch:rule'], - ['sch:assert', 'sch:rule'], - ); - expect(elementString).toEqual(` - An OSCAL SAP must have an import-ssp element. - - - - For every web interface to be tested there must be a matching task entry. - - A FedRAMP SAP must have a assesment-subject with a type of 'location'. - `); - }); - it('works with duplicate opening tag and two closing tags', () => { - const elementString = getElementString( - TEST_SCH, - ['sch:schema', 'sch:pattern', 'sch:rule', 'sch:rule'], - ['sch:rule'], - ); - expect(elementString).toEqual(` - An OSCAL SAP import-ssp element must have an href attribute. - `); - }); - }); - - describe('linesOf', () => { - it('returns line numbers for sch:assert', () => { - const lineNumbers = linesOf( - TEST_SCH, - `For every web interface to be tested there must be a matching task entry.`, - ); - expect(lineNumbers).toEqual({ - end: 32, - start: 24, - }); - }); - }); - - describe('linesOfXml', () => { - it('returns line numbers for nested xml node', () => { - expect( - linesOfXml( - TEST_SCH, - ['sch:schema', 'sch:pattern', 'sch:rule', 'sch:rule', 'sch:assert'], - ['sch:assert'], - ), - ).toEqual({ - start: 43, - end: 48, - }); - }); - it('returns line numbers for nested xml node with parents', () => { - expect( - linesOfXml( - TEST_SCH, - ['sch:schema', 'sch:pattern', 'sch:rule', 'sch:rule'], - ['sch:rule'], - ), - ).toEqual({ - start: 41, - end: 49, - }); - }); - it('returns line numbers for xml with self-closing tags', () => { - expect( - linesOfXml( - TEST_XSPEC, - [ - 'x:description', - 'x:scenario', - 'x:scenario', - 'x:scenario', - 'x:context', - 'x:expect-assert', - ], - ['x:expect-assert'], - ), - ).toEqual({ - start: 18, - end: 20, - }); - }); - }); -}); - -const TEST_SCH = ` - - - - - An OSCAL SAP must have an import-ssp element. - - - - For every web interface to be tested there must be a matching task entry. - - A FedRAMP SAP must have a assesment-subject with a type of 'location'. - - - An OSCAL SAP import-ssp element must have an href attribute. - - - -`; - -const TEST_XSPEC = ` - - - - - - - - - - - - - -`; diff --git a/src/web/src/shared/domain/text.ts b/src/web/src/shared/domain/text.ts deleted file mode 100644 index e8fcf9f5d..000000000 --- a/src/web/src/shared/domain/text.ts +++ /dev/null @@ -1,101 +0,0 @@ -export type LineRange = { start: number; end: number } | null; - -/** - * Returns the 1-indexed start and end line numbers for a substring. - * @param text string to file line numbers of - * @param substring string to search - * @returns start and end line numbers - */ -export const linesOf = (text: string, substring: string) => { - let line = 0; - let matchLine = 0; - let matchedChars = 0; - - for (let i = 0; i < text.length; i++) { - if (text[i] === substring[matchedChars]) { - matchedChars++; - } else { - matchedChars = 0; - matchLine = 0; - } - if (matchedChars === substring.length) { - return { - start: line - matchLine + 1, - end: line + 1, - }; - } - if (text[i] === '\n') { - line++; - if (matchedChars > 0) { - matchLine++; - } - } - } - - return null; -}; - -const closingIndex = (str: string, elem: string, startIndex: number) => { - const pattern = ``; - const index = str.indexOf(pattern, startIndex); - if (index > -1) { - return index + pattern.length; - } - - const selfClosingPattern = '/>'; - const selfClosingIndex = str.indexOf(selfClosingPattern, startIndex); - if (selfClosingIndex === -1) { - throw new Error(`closingIndex: cannot find ${str}`); - } - return selfClosingIndex + selfClosingPattern.length; -}; - -export const getElementString = ( - xml: string, - openedElements: string[], - closedElements: string[], -) => { - let startIndex = -1; - for (const openedElement of openedElements) { - startIndex = xml.indexOf(`<${openedElement}`, startIndex + 1); - } - let endIndex = 0; - for (const elem of closedElements) { - endIndex = closingIndex(xml, elem, startIndex + endIndex); - } - return xml.substring(startIndex, endIndex); -}; - -/** - * Using the parent nodes of an element, returns the lines of an XML node - * within a document. - * @param xml document to search - * @param openedElements list of preceding, opened parent nodes - * @param closedElements list of closing nodes to include in the matched pattern - * @returns start and end lines - */ -export const linesOfXml = ( - xml: string, - openedElements: string[], - closedElements: string[], -) => { - const elementString = getElementString(xml, openedElements, closedElements); - const lines = linesOf(xml, elementString); - return lines; -}; - -const createXmlMatchRegExp = ( - openedElements: string[], - closedElements: string[], -) => { - const prefixElements = openedElements.slice(0, openedElements.length - 1); - const matchOpenedElement = openedElements[openedElements.length - 1]; - - const prefix = prefixElements.map(elem => `<${elem}[^>]*?>[^]*?`).join(''); - const suffix = closedElements - .map(elem => `[^]+?(<\\/${elem}>|\\/>)`) - .join(''); - - const regExp = `(?:${prefix})(<${matchOpenedElement}${suffix})`; - return new RegExp(regExp, 'u'); -}; diff --git a/src/web/src/shared/domain/xml.ts b/src/web/src/shared/domain/xml.ts deleted file mode 100644 index df3b91f4c..000000000 --- a/src/web/src/shared/domain/xml.ts +++ /dev/null @@ -1,2 +0,0 @@ -export type FormatXml = (xml: string) => string; -export type IndentXml = (xml: string) => Promise; diff --git a/src/web/src/shared/domain/xspec.test.ts b/src/web/src/shared/domain/xspec.test.ts deleted file mode 100644 index 48dc3482e..000000000 --- a/src/web/src/shared/domain/xspec.test.ts +++ /dev/null @@ -1,179 +0,0 @@ -import SaxonJS from 'saxon-js'; - -import { it, describe, expect } from 'vitest'; -import { SaxonJsXSpecParser } from '../adapters/saxon-js-gateway'; -import { GithubRepository } from './github'; - -import { getXSpecAssertionSummaries } from './xspec'; - -describe('xspec', () => { - it('summary generation works', async () => { - const mockXSpec = SaxonJsXSpecParser({ SaxonJS })(MOCK_XSPEC_XML); - const github: GithubRepository = { - owner: '18F', - repository: 'fedramp-automation', - branch: 'master', - commit: 'commit-hash', - }; - const summaries = await getXSpecAssertionSummaries( - { formatXml: xml => xml }, - github, - '/test', - mockXSpec, - MOCK_XSPEC_XML, - ); - expect(summaries).toEqual({ - 'document-is-OSCAL-document': [ - { - assertionId: 'document-is-OSCAL-document', - assertionLabel: 'that is correct', - context: - '', - expectAssert: false, - referenceUrl: - 'https://github.com/18F/fedramp-automation/blob/commit-hash/test#L17-L19', - scenarios: [ - { url: null, label: 'sanity-checks' }, - { url: null, label: 'when the root element' }, - { url: null, label: 'is in OSCAL 1.0 namespace' }, - ], - }, - { - assertionId: 'document-is-OSCAL-document', - assertionLabel: 'that is an error', - context: - '\n \n ', - expectAssert: true, - referenceUrl: - 'https://github.com/18F/fedramp-automation/blob/commit-hash/test#L28-L30', - scenarios: [ - { url: null, label: 'sanity-checks' }, - { url: null, label: 'when the root element' }, - { url: null, label: 'is not in OSCAL 1.0 namespace' }, - ], - }, - ], - 'document-is-plan-of-action-and-milestones': [ - { - assertionId: 'document-is-plan-of-action-and-milestones', - assertionLabel: 'that is correct', - context: - '', - expectAssert: false, - referenceUrl: - 'https://github.com/18F/fedramp-automation/blob/commit-hash/test#L38-L40', - scenarios: [ - { url: null, label: 'sanity-checks' }, - { url: null, label: 'when the root element' }, - { url: null, label: 'is plan-of-action-and-milestones' }, - ], - }, - { - assertionId: 'document-is-plan-of-action-and-milestones', - assertionLabel: 'that is an error', - context: - '\n \n ', - expectAssert: true, - referenceUrl: - 'https://github.com/18F/fedramp-automation/blob/commit-hash/test#L50-L52', - scenarios: [ - { url: null, label: 'sanity-checks' }, - { url: null, label: 'when the root element' }, - { url: null, label: 'is not a plan-of-action-and-milestones' }, - ], - }, - ], - 'has-public-cloud-deployment-model': [ - { - assertionId: 'has-public-cloud-deployment-model', - assertionLabel: 'that is correct', - context: - '\n ', - expectAssert: false, - referenceUrl: - 'https://github.com/18F/fedramp-automation/blob/commit-hash/test#L64-L66', - scenarios: [ - { url: null, label: 'sanity-checks' }, - { - url: null, - label: - 'When a FedRAMP SSP has public components or inventory items, a cloud deployment model of "public-cloud" must be employed.', - }, - { url: null, label: 'When that is not pertinent' }, - ], - }, - ], - }); - }); -}); - -const MOCK_XSPEC_XML = ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -`; diff --git a/src/web/src/shared/domain/xspec.ts b/src/web/src/shared/domain/xspec.ts deleted file mode 100644 index 1ec62d8a9..000000000 --- a/src/web/src/shared/domain/xspec.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { linesOfXml } from './text'; -import { groupBy } from '../util'; -import type { FormatXml } from './xml'; -import { getBlobFileUrl, GithubRepository } from './github'; - -type XspecAssert = { - id: string; - label: string; -}; - -export type XSpecScenarioNode = { - node: 'x:scenario'; - label: string; - children: XSpecNode[]; -}; -type XSpecContextNode = { - node: 'x:context'; - context: string; -}; -type XSpecAssertionNode = - | { - node: 'x:expect-not-assert'; - id: string; - label: string; - } - | { - node: 'x:expect-assert'; - id: string; - label: string; - }; -export type XSpecNode = - | XSpecScenarioNode - | XSpecContextNode - | XSpecAssertionNode; - -export type XSpecScenario = { - label: string; - scenarios?: XSpecScenario[]; - context?: string; - expectAssert?: XspecAssert[]; - expectNotAssert?: XspecAssert[]; -}; - -export type ParseXSpec = (xmlString: string) => XSpecScenarioNode[]; - -// A flattened summary of an XSpec scenario, suitable for documentation. -export type AssertionSummary = { - assertionId: string; - assertionLabel: string; - context: string; - expectAssert: boolean; - referenceUrl: string | null; - scenarios: { url: string | null; label: string }[]; -}; - -export type SummariesByAssertionId = { - [key: string]: AssertionSummary[]; -}; - -type XSpecNodeContext = { - current: { - encounteredElements: XSpecNode[]; - context?: string; - }; - assertions: { - id: string; - label: string; - expectAssert: boolean; - }[]; -}; - -type NodeParseContext = { - context: string; - parentNodes: XSpecNode[]; - childNodes: XSpecNode[]; -}; -export const getXSpecAssertionSummaries = ( - ctx: { formatXml: FormatXml }, - github: GithubRepository, - repositoryPath: `/${string}`, - xSpecNodes: XSpecScenarioNode[], - xspecString: string, -) => { - const encounteredElements: string[] = []; - - const parseNode = ( - xSpecNode: XSpecNode, - nodeContext: NodeParseContext = { - context: '', - parentNodes: [], - childNodes: [], - }, - ): { context: string; assertions: AssertionSummary[] } => { - encounteredElements.push(xSpecNode.node); - - let childContext = { - ...nodeContext, - }; - if (xSpecNode.node === 'x:scenario') { - childContext = { - ...childContext, - parentNodes: [...childContext.parentNodes, xSpecNode], - }; - return { - assertions: xSpecNode.children.flatMap(child => { - const parseResult = parseNode(child, childContext); - childContext.context = parseResult.context; - return parseResult.assertions; - }), - context: childContext.context, - }; - } - - const assertions: XSpecAssertionNode[] = []; - if (xSpecNode.node === 'x:context') { - childContext.context = xSpecNode.context; - } else if (xSpecNode.node === 'x:expect-assert') { - assertions.push(xSpecNode); - } else if (xSpecNode.node === 'x:expect-not-assert') { - assertions.push(xSpecNode); - } - - return { - context: childContext.context, - assertions: assertions.map((assertionNode: XSpecAssertionNode) => { - return { - assertionId: assertionNode.id, - assertionLabel: assertionNode.label, - context: ctx.formatXml(nodeContext.context), - expectAssert: assertionNode.node === 'x:expect-assert', - referenceUrl: getElementUrlByPosition( - { github, repositoryPath, xspecString }, - encounteredElements, - [encounteredElements[encounteredElements.length - 1]], - ), - scenarios: nodeContext.parentNodes - .filter(parentNode => parentNode.node === 'x:scenario') - .map(parentNode => { - const scenarioNode = parentNode as XSpecScenarioNode; - return { - url: null /*getElementUrlByPosition( - { github, repositoryPath, xspecString }, - encounteredElements, - nodeContext.childNodes - .map(childNode => childNode.node) - .reverse(), - )*/, - label: scenarioNode.label, - }; - }), - }; - }), - }; - }; - const assertions = xSpecNodes.flatMap(node => parseNode(node).assertions); - return groupBy(assertions, summary => summary.assertionId); -}; - -const getElementUrlByPosition = ( - opts: { - github: GithubRepository; - repositoryPath: `/${string}`; - xspecString: string; - }, - precedingOpenedTags: string[], - innerTags: string[], -) => { - const lineRange = linesOfXml( - opts.xspecString, - precedingOpenedTags, - innerTags.reverse(), - ); - return lineRange - ? getBlobFileUrl(opts.github, opts.repositoryPath, lineRange) - : null; -}; diff --git a/src/web/src/shared/project-config.ts b/src/web/src/shared/project-config.ts deleted file mode 100644 index b90c6481a..000000000 --- a/src/web/src/shared/project-config.ts +++ /dev/null @@ -1,101 +0,0 @@ -/** - * Define project-wide configuration settings. - * Note that this is a CommonJS module so it may be used in - * `snowpack.config.js` as well as application code. - */ - -import { join } from 'path'; -import { OscalDocumentKey } from './domain/oscal'; -import { - SchematronRulesetKey, - SchematronRulesetKeys, -} from './domain/schematron'; - -// This should map to the directory containing the package.json. -// By convention, assume that the originating process was run from the root -// directory. -const PROJECT_ROOT = process.cwd(); -export const REPOSITORY_ROOT = join(PROJECT_ROOT, '../../'); - -export const PUBLIC_PATH = join(PROJECT_ROOT, 'public'); -export const BUILD_PATH = join(PUBLIC_PATH, 'rules'); -export const RULES_PATH = join(PROJECT_ROOT, '../validations/rules'); -export const RULES_TEST_PATH = join(PROJECT_ROOT, '../validations/test/rules'); - -export const getRepositoryPaths = (rulesetKey: SchematronRulesetKey) => ({ - SCHEMATRON: { - ssp: `/src/validations/rules/${rulesetKey}/ssp.sch`, - sap: `/src/validations/rules/${rulesetKey}/sap.sch`, - sar: `/src/validations/rules/${rulesetKey}/sar.sch`, - poam: `/src/validations/rules/${rulesetKey}/poam.sch`, - } as Record, - XSPEC: { - ssp: `/src/validations/test/rules/${rulesetKey}/ssp.xspec`, - sap: `/src/validations/test/rules/${rulesetKey}/sap.xspec`, - sar: `/src/validations/test/rules/${rulesetKey}/sar.xspec`, - poam: `/src/validations/test/rules/${rulesetKey}/poam.xspec`, - } as Record, -}); - -export const REPOSITORY_PATHS = Object.fromEntries( - SchematronRulesetKeys.map(rulesetKey => [ - rulesetKey, - getRepositoryPaths(rulesetKey), - ]), -) as Record>; - -export const getLocalPaths = (rulesetKey: SchematronRulesetKey) => ({ - REPOSITORY_ROOT, - REGISTRY_PATH: join( - REPOSITORY_ROOT, - `dist/content/${rulesetKey}/resources/xml`, - ), - BASELINES_PATH: join( - REPOSITORY_ROOT, - `dist/content/${rulesetKey}/baselines/xml`, - ), - SCHEMATRON: { - ssp: join(REPOSITORY_ROOT, REPOSITORY_PATHS[rulesetKey].SCHEMATRON.ssp), - sar: join(REPOSITORY_ROOT, REPOSITORY_PATHS[rulesetKey].SCHEMATRON.sar), - sap: join(REPOSITORY_ROOT, REPOSITORY_PATHS[rulesetKey].SCHEMATRON.sap), - poam: join(REPOSITORY_ROOT, REPOSITORY_PATHS[rulesetKey].SCHEMATRON.poam), - } as Record, - SCHEMATRON_SUMMARY: { - ssp: join(BUILD_PATH, `./${rulesetKey}/ssp.json`), - sar: join(BUILD_PATH, `./${rulesetKey}/sar.json`), - sap: join(BUILD_PATH, `./${rulesetKey}/sap.json`), - poam: join(BUILD_PATH, `./${rulesetKey}/poam.json`), - } as Record, - XSPEC: { - ssp: join(REPOSITORY_ROOT, REPOSITORY_PATHS[rulesetKey].XSPEC.ssp), - sar: join(REPOSITORY_ROOT, REPOSITORY_PATHS[rulesetKey].XSPEC.sar), - sap: join(REPOSITORY_ROOT, REPOSITORY_PATHS[rulesetKey].XSPEC.sap), - poam: join(REPOSITORY_ROOT, REPOSITORY_PATHS[rulesetKey].XSPEC.poam), - } as Record, - XSPEC_SUMMARY: { - ssp: join(BUILD_PATH, `./${rulesetKey}/xspec-summary-ssp.json`), - sar: join(BUILD_PATH, `./${rulesetKey}/xspec-summary-sar.json`), - sap: join(BUILD_PATH, `./${rulesetKey}/xspec-summary-sap.json`), - poam: join(BUILD_PATH, `./${rulesetKey}/xspec-summary-poam.json`), - } as Record, - ASSERTION_VIEW: { - ssp: join(BUILD_PATH, `./${rulesetKey}/assertion-views-ssp.json`), - sap: join(BUILD_PATH, `./${rulesetKey}/assertion-views-sap.json`), - sar: join(BUILD_PATH, `./${rulesetKey}/assertion-views-sar.json`), - poam: join(BUILD_PATH, `./${rulesetKey}/assertion-views-poam.json`), - } as Record, -}); -export const SCHEMATRON_SUMMARY_LOCAL_PATHS: Record = - { - ssp: join(REPOSITORY_ROOT, './src/web/public/rules/ssp.json'), - sar: join(REPOSITORY_ROOT, './src/web/public/rules/sar.json'), - sap: join(REPOSITORY_ROOT, './src/web/public/rules/sap.json'), - poam: join(REPOSITORY_ROOT, './src/web/public/rules/poam.json'), - }; - -export const LOCAL_PATHS = Object.fromEntries( - SchematronRulesetKeys.map(rulesetKey => [ - rulesetKey, - getLocalPaths(rulesetKey), - ]), -) as Record>; diff --git a/src/web/src/shared/use-cases/annotate-xml.test.ts b/src/web/src/shared/use-cases/annotate-xml.test.ts deleted file mode 100644 index 856d91913..000000000 --- a/src/web/src/shared/use-cases/annotate-xml.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { it, describe, expect } from 'vitest'; - -import { AnnotateXMLUseCase } from './annotate-xml'; - -// @ts-ignore -import SaxonJS from 'saxon-js'; - -describe('xml annotation integrated with SaxonJS', () => { - const annotateXML = AnnotateXMLUseCase({ - xml: { formatXML: xml => xml, indentXml: async xml => xml }, - SaxonJS, - }); - describe('wraps node with comments', () => { - it('when first child', async () => { - const retVal = await annotateXML({ - xmlString: '', - annotations: [ - { - uniqueId: 'annotation-1', - xpath: '//node1', - }, - ], - }); - expect(retVal).toEqual( - '', - ); - }); - - it('when last child', async () => { - const retVal = await annotateXML({ - xmlString: '', - annotations: [ - { - uniqueId: 'annotation-1', - xpath: '//node2', - }, - ], - }); - expect(retVal).toEqual( - '', - ); - }); - }); -}); diff --git a/src/web/src/shared/use-cases/annotate-xml.ts b/src/web/src/shared/use-cases/annotate-xml.ts deleted file mode 100644 index 5ffc9f752..000000000 --- a/src/web/src/shared/use-cases/annotate-xml.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { FormatXml, IndentXml } from '@asap/shared/domain/xml'; - -type AnnotateXMLUseCaseContext = { - xml: { - formatXML: FormatXml; - indentXml: IndentXml; - }; - SaxonJS: any; -}; - -type AnnotateXMLOptions = { - xmlString: string; - annotations: { - uniqueId: string; - xpath: string; - }[]; -}; - -const spanWrapAssertionContexts = (highlightedXml: string) => { - const assertionStart = - /<!--ASSERTION-START:(.*?):ASSERTION-START--><\/span>/gm; - const assertionEnd = - /<!--ASSERTION-END:(.*?):ASSERTION-END--><\/span>/gm; - return highlightedXml - .replaceAll(assertionStart, (_, assertionId) => { - return ``; - }) - .replaceAll(assertionEnd, ''); -}; - -export const AnnotateXMLUseCase = - (ctx: AnnotateXMLUseCaseContext) => async (options: AnnotateXMLOptions) => { - const doc = ctx.SaxonJS.getPlatform().parseXmlFromString(options.xmlString); - for (let i = 0; i < options.annotations.length; i++) { - const annotation = options.annotations[i]; - let xmlContext = ctx.SaxonJS.XPath.evaluate(annotation.xpath, doc, { - namespaceContext: { svrl: 'http://purl.oclc.org/dsdl/svrl' }, - resultForm: 'array', - }); - const node = xmlContext[0]; - if (node && node.parentNode) { - node.parentNode.insertBefore( - doc.createComment( - `ASSERTION-START:${annotation.uniqueId}:ASSERTION-START`, - ), - node, - ); - node.parentNode.insertBefore( - doc.createComment( - `ASSERTION-END:${annotation.uniqueId}:ASSERTION-END`, - ), - node.nextSibling, - ); - } - } - const xmlString = ctx.SaxonJS.serialize(doc); - const formattedXml = ctx.xml.formatXML(await ctx.xml.indentXml(xmlString)); - return spanWrapAssertionContexts(formattedXml); - }; -export type AnnotateXMLUseCase = ReturnType; diff --git a/src/web/src/shared/use-cases/assertion-views.test.ts b/src/web/src/shared/use-cases/assertion-views.test.ts deleted file mode 100644 index 773d412e8..000000000 --- a/src/web/src/shared/use-cases/assertion-views.test.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { it, describe, expect } from 'vitest'; - -import { validateAssertionViews } from './assertion-views'; - -describe('assertion view parser', () => { - it('returns valid object', () => { - expect( - validateAssertionViews([ - { - title: 'assertion view title', - groups: [ - { - title: 'group title', - assertionIds: ['assertion id 1', 'assertion id 2'], - groups: [ - { - title: 'subgroup title', - assertionIds: ['assertion id 3', 'assertion id 4'], - }, - { - title: 'subgroup title 2', - assertionIds: ['assertion id 5', 'assertion id 6'], - groups: [], - }, - { - title: 'subgroup title 3', - assertionIds: ['assertion id 7', 'assertion id 8'], - groups: [ - { - title: 'subgroup title 4', - assertionIds: ['assertion id 9', 'assertion id 10'], - }, - ], - }, - ], - }, - ], - }, - ]), - ).toEqual([ - { - groups: [ - { - assertionIds: ['assertion id 1', 'assertion id 2'], - groups: [ - { - assertionIds: ['assertion id 3', 'assertion id 4'], - groups: undefined, - title: 'subgroup title', - }, - { - assertionIds: ['assertion id 5', 'assertion id 6'], - groups: [], - title: 'subgroup title 2', - }, - { - assertionIds: ['assertion id 7', 'assertion id 8'], - groups: [ - { - assertionIds: ['assertion id 9', 'assertion id 10'], - groups: undefined, - title: 'subgroup title 4', - }, - ], - title: 'subgroup title 3', - }, - ], - title: 'group title', - }, - ], - title: 'assertion view title', - }, - ]); - }); - it('returns null for invalid object', () => { - expect(validateAssertionViews({})).toEqual(null); - }); -}); diff --git a/src/web/src/shared/use-cases/assertion-views.ts b/src/web/src/shared/use-cases/assertion-views.ts deleted file mode 100644 index 05212b58b..000000000 --- a/src/web/src/shared/use-cases/assertion-views.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { OscalDocumentKey, OscalDocumentKeys } from '../domain/oscal'; -import { - SchematronRulesetKey, - SchematronRulesetKeys, -} from '../domain/schematron'; -import { LOCAL_PATHS } from '../project-config'; - -export type AssertionGroup = { - title: string; - assertionIds: string[]; - groups: Array | undefined; -}; - -const getAssertionGroup = (input: any): AssertionGroup => { - if (typeof input.title !== 'string') { - throw new Error('title not a string'); - } - if (!Array.isArray(input.assertionIds)) { - throw new Error('assertionIds not an array'); - } - if ( - input.groups !== undefined && - (!Array.isArray(input.groups) || - !Array.from(input.groups).every(group => getAssertionGroup(group))) - ) { - throw new Error('groups not an array of assertion groups'); - } - return { - title: input.title as string, - assertionIds: input.assertionIds as string[], - groups: (input.groups as AssertionGroup[]) || undefined, - } as AssertionGroup; -}; - -const getAssertionView = (input: any): AssertionView => { - if (typeof input.title !== 'string') { - throw new Error('input title is not a string'); - } - try { - return { - title: input.title as string, - groups: Array.from(input.groups).map(group => getAssertionGroup(group)), - }; - } catch (e) { - throw new Error('assertion view groups is not array of assertion groups'); - } -}; - -export type AssertionView = { - title: string; - groups: AssertionGroup[]; -}; -type AssertionViews = AssertionView[]; - -// Confirm that an input object (sourced from XSLT output) conforms to the -// Typescript expectation. -export const validateAssertionViews = (input: any): AssertionViews | null => { - if (!Array.isArray(input)) { - return null; - } - try { - return Array.from(input).map(view => getAssertionView(view)); - } catch (e) { - console.error(e); - return null; - } -}; - -export type GetAssertionViews = (rulesetKey: SchematronRulesetKey) => Promise<{ - poam: AssertionViews; - sap: AssertionViews; - sar: AssertionViews; - ssp: AssertionViews; -}>; - -export type XSLTProcessor = ( - stylesheetText: string, - sourceText: string, -) => Promise; - -export class AssertionViewGenerator { - constructor( - private paths: { - assertionViewSEFPath: string; - }, - private processXSLT: XSLTProcessor, - private readStringFile: (fileName: string) => Promise, - private writeStringFile: ( - fileName: string, - contents: string, - ) => Promise, - private console: Console, - ) {} - - async generateAll() { - for (const rulesetKey of SchematronRulesetKeys) { - for (const documentType of OscalDocumentKeys) { - await this.generate({ documentType, rulesetKey }); - } - } - } - - private async generate({ - documentType, - rulesetKey, - }: { - documentType: OscalDocumentKey; - rulesetKey: SchematronRulesetKey; - }) { - const stylesheetSEFText = await this.readStringFile( - this.paths.assertionViewSEFPath, - ); - const schematronXML = await this.readStringFile( - LOCAL_PATHS[rulesetKey].SCHEMATRON[documentType], - ); - const assertionViewJSON = await this.processXSLT( - stylesheetSEFText, - schematronXML, - ); - const assertionViews = validateAssertionViews( - JSON.parse(assertionViewJSON), - ); - const outputFilePath = LOCAL_PATHS[rulesetKey].ASSERTION_VIEW[documentType]; - await this.writeStringFile(outputFilePath, JSON.stringify(assertionViews)); - this.console.log(`Wrote ${outputFilePath} assertion view to filesystem`); - } -} diff --git a/src/web/src/shared/use-cases/oscal.test.ts b/src/web/src/shared/use-cases/oscal.test.ts deleted file mode 100644 index 998091cdb..000000000 --- a/src/web/src/shared/use-cases/oscal.test.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { it, describe, expect, vi } from 'vitest'; -import { mock } from 'vitest-mock-extended'; -import { SchematronProcessors } from '../domain/schematron'; - -import { OscalService } from './oscal'; - -const MOCK_SCHEMATRON_RESULT = { - failedAsserts: ['assertion 1', 'assertion 2'], - svrlString: '', - successfulReports: [{ id: 'info-system-name', text: 'title text' }], -}; -const EXPECTED_VALIDATION_REPORT = { - title: 'title text', - failedAsserts: ['assertion 1', 'assertion 2'], -}; - -describe('validate ssp use case', () => { - const mockXml = 'xml {[]} input'; - it('returns schematron for xml input', async () => { - const ctx = { - console: mock(), - jsonOscalToXml: vi.fn().mockReturnValue(Promise.resolve('')), - schematronProcessors: mock({ - rev4: vi.fn().mockReturnValue( - Promise.resolve({ - documentType: 'ssp', - schematronResult: MOCK_SCHEMATRON_RESULT, - }), - ), - }), - fetch: vi.fn(), - }; - const oscalService = new OscalService( - { - ssp: ctx.jsonOscalToXml, - sap: ctx.jsonOscalToXml, - sar: ctx.jsonOscalToXml, - poam: ctx.jsonOscalToXml, - }, - ctx.schematronProcessors, - ctx.fetch, - ctx.console, - ); - const retVal = await oscalService.validateXml('rev4', mockXml); - expect(retVal).toEqual({ - documentType: 'ssp', - svrlString: '', - validationReport: EXPECTED_VALIDATION_REPORT, - }); - }); - - it('returns schematron for json input', async () => { - const testJson = async (mockJson: string) => { - const ctx = { - console: mock(), - jsonOscalToXml: vi.fn().mockReturnValue(Promise.resolve(mockXml)), - schematronProcessors: mock({ - rev4: vi.fn().mockReturnValue( - Promise.resolve({ - documentType: 'ssp', - schematronResult: MOCK_SCHEMATRON_RESULT, - }), - ), - }), - fetch: vi.fn(), - }; - const oscalService = new OscalService( - { - ssp: ctx.jsonOscalToXml, - sap: ctx.jsonOscalToXml, - sar: ctx.jsonOscalToXml, - poam: ctx.jsonOscalToXml, - }, - ctx.schematronProcessors, - ctx.fetch, - ctx.console, - ); - const retVal = await oscalService.validateOscal('rev4', mockJson); - expect(ctx.jsonOscalToXml).toHaveBeenCalledWith(mockJson); - expect(ctx.schematronProcessors.rev4).toHaveBeenCalledWith(mockXml); - expect(retVal).toEqual({ - documentType: 'ssp', - svrlString: '', - validationReport: EXPECTED_VALIDATION_REPORT, - xmlString: mockXml, - }); - }; - - testJson('{"system-security-plan": {}}'); - }); -}); - -describe('validate ssp url use case', () => { - it('passes through return value from adapter', async () => { - const xmlString = 'ignored'; - const ctx = { - console: mock(), - fetch: vi.fn().mockImplementation((url: string) => { - return Promise.resolve({ - text: vi.fn().mockImplementation(async () => { - expect(url).toEqual('https://sample.gov/ssp-url.xml'); - return xmlString; - }), - }); - }), - jsonOscalToXml: vi.fn().mockReturnValue(xmlString), - schematronProcessors: mock({ - rev4: vi.fn().mockImplementation(xmlStr => { - expect(xmlStr).toEqual(xmlString); - return Promise.resolve({ - documentType: 'ssp', - schematronResult: MOCK_SCHEMATRON_RESULT, - }); - }), - }), - }; - const oscalService = new OscalService( - { - ssp: ctx.jsonOscalToXml, - sap: ctx.jsonOscalToXml, - sar: ctx.jsonOscalToXml, - poam: ctx.jsonOscalToXml, - }, - ctx.schematronProcessors, - ctx.fetch, - ctx.console, - ); - const retVal = await oscalService.validateOscalByUrl( - 'rev4', - 'https://sample.gov/ssp-url.xml', - ); - expect(retVal).toEqual({ - documentType: 'ssp', - svrlString: '', - validationReport: EXPECTED_VALIDATION_REPORT, - xmlString, - }); - }); -}); diff --git a/src/web/src/shared/use-cases/oscal.ts b/src/web/src/shared/use-cases/oscal.ts deleted file mode 100644 index 02f7818d9..000000000 --- a/src/web/src/shared/use-cases/oscal.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { parse as parseYaml } from 'yaml'; - -import { getDocumentTypeForRootNode, OscalDocumentKey } from '../domain/oscal'; -import type { - SchematronJSONToXMLProcessors, - SchematronProcessors, - SchematronResult, - SchematronRulesetKey, - ValidationReport, -} from '../domain/schematron'; - -type Fetch = typeof fetch; - -export class OscalService { - constructor( - private jsonOscalToXmlProcessors: SchematronJSONToXMLProcessors, - private schematronProcessors: SchematronProcessors, - private fetch: Fetch, - private console: Console, - private readStringFile?: (fileName: string) => Promise, - ) {} - - async validateOscalFile( - ruleset: SchematronRulesetKey, - oscalFilePath: string, - ) { - if (!this.readStringFile) { - throw new Error('readStringFile not provided'); - } - const xmlString = await this.readStringFile(oscalFilePath); - const result = await this.validateOscal(ruleset, xmlString); - this.console.log( - `Found ${result.validationReport.failedAsserts.length} assertions in ${result.documentType}`, - ); - } - - validateOscal( - ruleset: SchematronRulesetKey, - oscalString: string, - ): Promise<{ - documentType: OscalDocumentKey; - svrlString: string; - validationReport: ValidationReport; - xmlString: string; - }> { - let xmlString = ''; - return this.ensureXml(oscalString) - .then(str => { - xmlString = str; - return this.validateXml(ruleset, xmlString); - }) - .then(result => { - return { - ...result, - xmlString, - }; - }); - } - - validateOscalByUrl(ruleset: SchematronRulesetKey, fileUrl: string) { - return this.fetch(fileUrl) - .then(response => response.text()) - .then(value => this.validateOscal(ruleset, value)); - } - - validateXml( - ruleset: SchematronRulesetKey, - xmlString: string, - ): Promise<{ - documentType: OscalDocumentKey; - svrlString: string; - validationReport: ValidationReport; - }> { - return this.schematronProcessors[ruleset](xmlString).then(result => { - return { - documentType: result.documentType, - svrlString: result.schematronResult.svrlString, - validationReport: generateValidationReport(result.schematronResult), - }; - }); - } - - async ensureXml(oscalString: string): Promise { - const detected = detectFormat(oscalString); - - if (detected.format === 'yaml') { - const jsonString = JSON.stringify(parseYaml(oscalString)); - const documentType = getDocumentTypeForRootNode(detected.type || ''); - if (documentType === null) { - return oscalString; - } - return this.jsonOscalToXmlProcessors[documentType](jsonString); - } - - if (detected.format === 'json') { - const documentType = getDocumentTypeForRootNode(detected.type || ''); - if (documentType === null) { - return oscalString; - } - return this.jsonOscalToXmlProcessors[documentType](oscalString); - } - - return oscalString; - } -} - -const detectFormat = (document: string) => { - // Naive detection of JSON format - first non-whitespace character should be - // `{`, and we will extract the opening tag name to detect the document type. - const jsonMatch = document.match(/^\s*\{\s*"(.+)"/); - if (jsonMatch !== null) { - return { - format: 'json', - type: jsonMatch[1], - }; - } - - const yamlMatch = document.match(/^---\s*(.+):/); - if (yamlMatch !== null) { - return { - format: 'yaml', - type: yamlMatch[1], - }; - } - - return { - format: 'xml', - }; -}; - -const generateValidationReport = ( - schematronResult: SchematronResult, -): ValidationReport => { - return { - title: - schematronResult.successfulReports - .filter(report => report.id === 'info-system-name') - .map(report => report.text)[0] || '', - failedAsserts: schematronResult.failedAsserts, - }; -}; diff --git a/src/web/src/shared/use-cases/schematron-compiler.ts b/src/web/src/shared/use-cases/schematron-compiler.ts deleted file mode 100644 index 82333711a..000000000 --- a/src/web/src/shared/use-cases/schematron-compiler.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { execSync } from 'child_process'; - -import { OscalDocumentKey, OscalDocumentKeys } from '../domain/oscal'; -import { - SchematronRulesetKey, - SchematronRulesetKeys, -} from '../domain/schematron'; -import { BUILD_PATH, REPOSITORY_ROOT } from '../project-config'; - -const STAGE_1 = `${REPOSITORY_ROOT}/vendor/schematron/trunk/schematron/code/iso_dsdl_include.xsl`; -const STAGE_2 = `${REPOSITORY_ROOT}/vendor/schematron/trunk/schematron/code/iso_abstract_expand.xsl`; -const STAGE_3 = `${REPOSITORY_ROOT}/vendor/schematron/trunk/schematron/code/iso_svrl_for_xslt2.xsl`; - -export class SchematronCompiler { - constructor(private console: Console) {} - - async compileAll() { - for (const rulesetKey of SchematronRulesetKeys) { - for (const documentType of OscalDocumentKeys) { - await this.compile(rulesetKey, documentType); - } - } - } - - async compile( - rulesetKey: SchematronRulesetKey, - documentType: OscalDocumentKey, - ) { - this.console.log(`Compiling Schematron for ${rulesetKey}:${documentType}`); - const sourceFile = `${REPOSITORY_ROOT}/src/validations/rules/${rulesetKey}/${documentType}.sch`; - const outDir = `${BUILD_PATH}/${rulesetKey}`; - - /** - * This compilation uses the `xslt3` command-line utility, which should be - * installed in node_modules. It is not, at time of writing, possible to - * compile XSLT using the SaxonJS API. - * It is also possible to use Saxon Java library, but this method avoids - * adding Java as a dependency to the frontend. - */ - execSync(`mkdirp ${outDir}`); - execSync( - `xslt3 -s:${sourceFile} -xsl:${STAGE_1} -o:${outDir}/${documentType}-stage1.sch allow-foreign=true diagnose=true`, - ); - execSync( - `xslt3 -s:${outDir}/${documentType}-stage1.sch -xsl:${STAGE_2} -o:${outDir}/${documentType}-stage2.sch allow-foreign=true diagnose=true`, - ); - execSync( - `xslt3 -s:${outDir}/${documentType}-stage2.sch -xsl:${STAGE_3} -o:${outDir}/${documentType}.xsl allow-foreign=true diagnose=true`, - ); - execSync( - `xslt3 -xsl:${outDir}/${documentType}.xsl -export:${outDir}/${documentType}.sef.json -relocate:on -nogo`, - ); - } -} diff --git a/src/web/src/shared/use-cases/schematron-summary.test.ts b/src/web/src/shared/use-cases/schematron-summary.test.ts deleted file mode 100644 index 2075c4b05..000000000 --- a/src/web/src/shared/use-cases/schematron-summary.test.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { describe, it } from 'vitest'; - -describe('schematron summary', () => { - it('works', () => {}); -}); diff --git a/src/web/src/shared/use-cases/schematron-summary.ts b/src/web/src/shared/use-cases/schematron-summary.ts deleted file mode 100644 index 0d2fd1c79..000000000 --- a/src/web/src/shared/use-cases/schematron-summary.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { GithubRepository } from '../domain/github'; -import { OscalDocumentKey, OscalDocumentKeys } from '../domain/oscal'; -import { - generateSchematronSummary, - ParseSchematronAssertions, - SchematronRulesetKey, - SchematronRulesetKeys, -} from '../domain/schematron'; -import { LOCAL_PATHS, REPOSITORY_PATHS } from '../project-config'; - -export class SchematronSummary { - constructor( - private parseSchematron: ParseSchematronAssertions, - private readStringFile: (fileName: string) => Promise, - private writeStringFile: ( - fileName: string, - contents: string, - ) => Promise, - private github: GithubRepository, - private console: Console, - ) {} - - async generateAllSummaries() { - for (const rulesetKey of SchematronRulesetKeys) { - for (const documentType of OscalDocumentKeys) { - await this.generateSummary(documentType, rulesetKey); - } - } - } - - async generateSummary( - documentType: OscalDocumentKey, - rulesetKey: SchematronRulesetKey, - ) { - const xmlString = await this.readStringFile( - LOCAL_PATHS[rulesetKey].SCHEMATRON[documentType], - ); - const schematronAsserts = await this.parseSchematron(xmlString); - const schematronSummary = generateSchematronSummary( - xmlString, - schematronAsserts, - this.github, - REPOSITORY_PATHS[rulesetKey].SCHEMATRON[documentType], - ); - await this.writeStringFile( - LOCAL_PATHS[rulesetKey].SCHEMATRON_SUMMARY[documentType], - JSON.stringify(schematronSummary), - ); - this.console.log( - `Wrote ${LOCAL_PATHS[rulesetKey].SCHEMATRON_SUMMARY[documentType]}`, - ); - } -} diff --git a/src/web/src/shared/use-cases/xspec-summary.ts b/src/web/src/shared/use-cases/xspec-summary.ts deleted file mode 100644 index bdc5baa42..000000000 --- a/src/web/src/shared/use-cases/xspec-summary.ts +++ /dev/null @@ -1,66 +0,0 @@ -import type { FormatXml } from '@asap/shared/domain/xml'; -import { GithubRepository } from '@asap/shared/domain/github'; -import { - getXSpecAssertionSummaries, - ParseXSpec, - SummariesByAssertionId, -} from '@asap/shared/domain/xspec'; -import { OscalDocumentKey, OscalDocumentKeys } from '../domain/oscal'; -import { LOCAL_PATHS, REPOSITORY_PATHS } from '../project-config'; -import { - SchematronRulesetKey, - SchematronRulesetKeys, -} from '../domain/schematron'; - -export type XSpecScenarioSummaries = { - poam: SummariesByAssertionId; - sap: SummariesByAssertionId; - sar: SummariesByAssertionId; - ssp: SummariesByAssertionId; -}; - -export type GetXSpecScenarioSummaries = ( - rulesetKey: SchematronRulesetKey, -) => Promise; - -export class XSpecAssertionSummaryGenerator { - constructor( - private formatXml: FormatXml, - private github: GithubRepository, - private parseXspec: ParseXSpec, - private readStringFile: (path: string) => Promise, - private writeStringFile: (path: string, data: string) => void, - private console: Console, - ) {} - - async generateAll() { - for (const rulesetKey of SchematronRulesetKeys) { - for (const documentType of OscalDocumentKeys) { - await this.generate(documentType, rulesetKey); - } - } - } - - async generate( - documentType: OscalDocumentKey, - rulesetKey: SchematronRulesetKey, - ) { - this.console.log(`Generating ${documentType} xspec summary...`); - const xspecString = await this.readStringFile( - LOCAL_PATHS[rulesetKey].XSPEC[documentType], - ); - const xspec = this.parseXspec(xspecString); - const scenarios = await getXSpecAssertionSummaries( - { formatXml: this.formatXml }, - this.github, - REPOSITORY_PATHS[rulesetKey].XSPEC[documentType], - xspec, - xspecString, - ); - this.writeStringFile( - LOCAL_PATHS[rulesetKey].XSPEC_SUMMARY[documentType], - JSON.stringify(scenarios), - ); - this.console.log(`Wrote ${documentType} xspec summary to filesystem.`); - } -} diff --git a/src/web/src/shared/util.test.ts b/src/web/src/shared/util.test.ts deleted file mode 100644 index 77986851a..000000000 --- a/src/web/src/shared/util.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { it, describe, expect } from 'vitest'; - -import { base64DataUriForJson } from './util'; - -/** - * @vitest-environment jsdom - */ -describe('utility function', () => { - describe('base64DataUriForJson', () => { - it('works', async () => { - expect(await base64DataUriForJson(`{"hello": 1}`)).toEqual( - 'data:application/json;base64,eyJoZWxsbyI6IDF9', - ); - }); - }); -}); diff --git a/src/web/src/shared/util.ts b/src/web/src/shared/util.ts deleted file mode 100644 index 3235eb363..000000000 --- a/src/web/src/shared/util.ts +++ /dev/null @@ -1,33 +0,0 @@ -export const groupBy = (array: T[], predicate: (v: T) => string) => - array.reduce((acc, value) => { - (acc[predicate(value)] ||= []).push(value); - return acc; - }, {} as { [key: string]: T[] }); - -export const base64DataUriForJson = (jsonString: string) => { - return new Promise((resolve, reject) => { - var blob = new Blob([jsonString], { type: 'application/json' }); - var reader = new FileReader(); - reader.onload = e => { - const result = e?.target?.result as string; - if (result) { - resolve(result); - } else { - reject(); - } - }; - reader.onerror = reject; - reader.readAsDataURL(blob); - }); -}; - -// Returns a string of the form "00:00:00" -export const formatElapsedTime = (milliseconds: number) => { - return new Date(milliseconds).toLocaleTimeString('en-GB', { - timeZone: 'Etc/UTC', - hour12: false, - hour: '2-digit', - minute: '2-digit', - second: '2-digit', - }); -}; diff --git a/src/web/tsconfig.json b/src/web/tsconfig.json deleted file mode 100644 index 8cfc8cc7e..000000000 --- a/src/web/tsconfig.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": [ - "DOM", - "DOM.Iterable", - "ESNext" - ], - "baseUrl": ".", - "paths": { - "@asap/*": [ - "./src/*" - ], - }, - "types": [ - "vite/client" - ], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "Node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - }, - "include": [ - "src", - "types" - ], - "references": [ - { - "path": "./tsconfig.node.json" - } - ] -} diff --git a/src/web/tsconfig.node.json b/src/web/tsconfig.node.json deleted file mode 100644 index 495d7b03f..000000000 --- a/src/web/tsconfig.node.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "composite": true, - "module": "esnext", - "moduleResolution": "node" - }, - "include": [ - "vite.config.ts" - ], - "baseUrl": ".", - "paths": { - "@asap/*": [ - "./src/*" - ], - } -} diff --git a/src/web/types/saxon-js.d.ts b/src/web/types/saxon-js.d.ts deleted file mode 100644 index d5534dd94..000000000 --- a/src/web/types/saxon-js.d.ts +++ /dev/null @@ -1,90 +0,0 @@ -declare module 'saxon-js' { - namespace SaxonJS { - function transform(options: Transformation.Options): Transformation.Results; - function transform( - options: Transformation.Options, - execution: 'sync', - ): Transformation.Results; - function transform( - options: Transformation.Options, - execution: 'async', - ): Promise; - namespace Transformation { - interface Results { - principalResult: any; - resultDocuments: any; - stylesheetInternal: any; - masterDocument: Document; - } - interface Options - extends Partial, - Partial, - Partial, - Partial, - Partial, - Partial {} - interface Stylesheet { - stylesheetLocation: string; - stylesheetFileName: string; - stylesheetText: string; - stylesheetInternal: any; - stylesheetBaseURI: string; - } - interface SourceXmlInput { - sourceLocation: string; - sourceFileName: string; - sourceNode: Node; - sourceText: string; - } - interface InvocationOptions { - stylesheetParams: any; - initialTemplate: string; - templateParams: any; - tunnelParams: any; - initialFunction: string; - functionParams: any[]; - initialMode: string; - initialSelection: any; - } - interface AdditionalResources { - documentPool: { [uri: string]: Document }; - textResourcePool: { [uri: string]: string }; - } - interface ResultDelivery { - destination: - | 'replaceBody' - | 'appendToBody' - | 'prependToBody' - | 'raw' - | 'document' - | 'application' - | 'file' - | 'stdout' - | 'serialized'; - resultForm: 'default' | 'array' | 'iterator' | 'xdm'; - outputProperties: any; - deliverMessage: (message: DocumentFragment, errorCode: string) => void; - deliverResultDocument: (uri: string) => { - destination: - | 'html-page' - | 'raw' - | 'document' - | 'serialized' - | 'file' - | 'receiver'; - save: (uri: string, value: any, encoding: string) => void; - receiver: unknown; - }; - masterDocument: Document; - baseOutputURI: string; - } - interface TransformationBehaviour { - collations: any; - collectionFinder: (uri: string) => any; - logLevel: -1 | 0 | 1 | 2 | 10; - nonInteractive: boolean; - } - } - } - export = SaxonJS; -} diff --git a/src/web/types/static.d.ts b/src/web/types/static.d.ts deleted file mode 100644 index ba74d2a2a..000000000 --- a/src/web/types/static.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* Use this file to declare any custom file extensions for importing */ -/* Use this folder to also add/extend a package d.ts file, if needed. */ - -/* CSS MODULES */ -declare module '*.module.css' { - const classes: { [key: string]: string }; - export default classes; -} -declare module '*.module.scss' { - const classes: { [key: string]: string }; - export default classes; -} -declare module '*.module.sass' { - const classes: { [key: string]: string }; - export default classes; -} -declare module '*.module.less' { - const classes: { [key: string]: string }; - export default classes; -} -declare module '*.module.styl' { - const classes: { [key: string]: string }; - export default classes; -} - -/* CSS */ -declare module '*.css'; -declare module '*.scss'; -declare module '*.sass'; -declare module '*.less'; -declare module '*.styl'; - -/* IMAGES */ -declare module '*.svg' { - const ref: string; - export default ref; -} -declare module '*.bmp' { - const ref: string; - export default ref; -} -declare module '*.gif' { - const ref: string; - export default ref; -} -declare module '*.jpg' { - const ref: string; - export default ref; -} -declare module '*.jpeg' { - const ref: string; - export default ref; -} -declare module '*.png' { - const ref: string; - export default ref; -} - -/* CUSTOM: ADD YOUR OWN HERE */ diff --git a/src/web/vite.config.ts b/src/web/vite.config.ts deleted file mode 100644 index 18a6f10ab..000000000 --- a/src/web/vite.config.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { execSync } from 'child_process'; - -import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react'; -import tsconfigPaths from 'vite-tsconfig-paths'; - -const BASEURL = process.env.BASEURL || '/'; -const GITHUB = { - owner: process.env.OWNER || '18F', - repository: process.env.REPOSITORY || 'fedramp-automation', - branch: process.env.BRANCH || 'master', - commit: execSync('git rev-parse HEAD').toString().trim(), -}; - -const DEPLOYMENT_ID = - process.env.NODE_ENV === 'development' - ? 'local' - : `${GITHUB.owner}:${GITHUB.branch}`; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [tsconfigPaths(), react()], - base: BASEURL, - define: { - 'import.meta.env.DEPLOYMENT_ID': JSON.stringify(DEPLOYMENT_ID), - 'import.meta.env.GITHUB': JSON.stringify(GITHUB), - }, -}); diff --git a/vendor/.gitignore b/vendor/.gitignore deleted file mode 100644 index 35655fa0c..000000000 --- a/vendor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -Saxon-HE-*.jar diff --git a/vendor/oscal b/vendor/oscal deleted file mode 160000 index 674f7245f..000000000 --- a/vendor/oscal +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 674f7245fcc3847d1877b2781d3bf45f69d279a0 diff --git a/vendor/schematron b/vendor/schematron deleted file mode 160000 index 77dcd36c5..000000000 --- a/vendor/schematron +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 77dcd36c53d12ed786c144ece3b2af7694abdc56 diff --git a/vendor/svrl2html.xsl b/vendor/svrl2html.xsl deleted file mode 100644 index e5321d551..000000000 --- a/vendor/svrl2html.xsl +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - SVRL report - - - -

SVRL report

-
Errors:
- -
    -
  • Text:
  • -
  • Error message:
  • -
  • Test:
  • -
  • See:
  • -
  • Location:
  • -
-
-
Reports:
- -
    -
  • Text:
  • -
  • Test:
  • -
  • See:
  • -
  • Location:
  • -
-
- - - -
- - - - - - -
\ No newline at end of file diff --git a/vendor/xspec b/vendor/xspec deleted file mode 160000 index cc77f2e32..000000000 --- a/vendor/xspec +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cc77f2e3273f29bee9f6b31b635c3e5599ba7a08