From fb3b2fe43a3821e1b6bd6551ab887fffafad58ef Mon Sep 17 00:00:00 2001 From: Dorchies David <david.dorchies@irstea.fr> Date: Thu, 13 Oct 2022 14:51:00 +0200 Subject: [PATCH 001/285] docs: update main page of documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add section "Citing Cassiopée" - Add URL of development version --- docs/en/index.md | 12 ++++++++++-- docs/fr/index.md | 10 +++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/docs/en/index.md b/docs/en/index.md index dc47b8887..f8e9b1078 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -15,7 +15,7 @@ Cassiopée is a software dedicated to rivers hydraulics with especially some hel Cassiopée does not require any installation. It is available online using an up-to-date browser (tested with Firefox, Chrome and Chromium) by navigating to the following address: [https://cassiopee.g-eau.fr](https://cassiopee.g-eau.fr) -Offline versions are availble (Windows, Linux, macOS, Android) at the following address : [https://cassiopee.g-eau.fr/cassiopee-releases/](https://cassiopee.g-eau.fr/cassiopee-releases/) +Offline versions are available (Windows, Linux, macOS, Android) at the following address : [https://cassiopee.g-eau.fr/cassiopee-releases/](https://cassiopee.g-eau.fr/cassiopee-releases/) ## Documentation @@ -25,8 +25,16 @@ Download [illustrated quick start guide (in french) in PDF format](https://cassi ## Support and bug reports -To be kept informed of Cassiopée news or to benefit from the Cassiopée users' support network, subscribe to the Cassiopée users' mailing list: https://groupes.renater.fr/sympa/subscribe/cassiopee-users +To be kept informed of Cassiopée news or to benefit from the Cassiopée users' support network, subscribe to the Cassiopée users' mailing list: <https://groupes.renater.fr/sympa/subscribe/cassiopee-users> + +Insiders can test the future version of Cassiopée under development at <https://cassiopee-dev.g-eau.fr> and provide feedback at bug@cassiopee.g-eau.fr. To report a bug in the application, please use the "Report an issue" link in the main menu of the application or write directly to bug@cassiopee.g-eau.fr. For questions concerning the design of fish crossing structures for upstream (basin, retarder, macro-roughness) and downstream migrations, please contact Sylvain Richard, pole OFB-IMFT Écohydraulique, sylvain.richard@imft.fr. + +## Citing Cassiopée + +If you use Cassiopée in your work please remember to give appropriate credit by using the following reference: + +*Dorchies, David; Grand, François; Chouet, Mathias; Cassan, Ludovic; Courret, Dominique; Richard, Sylvain, 2022, "Cassiopée: tools for designing fish crossing devices for upstream and downstream migrations, and hydraulic calculation tools for environmental and agricultural engineering. Version 4.16.0", <https://doi.org/10.15454/TLO5LX>, Recherche Data Gouv, V1* diff --git a/docs/fr/index.md b/docs/fr/index.md index 5621a48ad..c7d0948eb 100644 --- a/docs/fr/index.md +++ b/docs/fr/index.md @@ -25,8 +25,16 @@ Télécharger [le guide de prise en main illustrée au format PDF](https://cassi ## Assistance et signalement de bug -Pour être tenu au courant de l'actualité de Cassiopée et bénéficier du réseau d'entraide des utilisateurs de Cassiopée, inscrivez-vous à la liste de diffusion des utilisateurs de Cassiopée : https://groupes.renater.fr/sympa/subscribe/cassiopee-users +Pour être tenu au courant de l'actualité de Cassiopée et bénéficier du réseau d'entraide des utilisateurs de Cassiopée, inscrivez-vous à la liste de diffusion des utilisateurs de Cassiopée : <https://groupes.renater.fr/sympa/subscribe/cassiopee-users> + +Les initiés peuvent tester la future version de Cassiopée en cours de développement à l'adresse <https://cassiopee-dev.g-eau.fr> et faire des retours à bug@cassiopee.g-eau.fr. Pour signaler un bug de l'application, prière d'utiliser le lien "Signaler un problème" présent dans le menu principal de l'application ou écrire directement à bug@cassiopee.g-eau.fr Pour les questions concernant la conception des ouvrages de franchissements ichtyocompatibles pour la montaison (passes à bassins, à ralentisseurs, à macro-rugosités) et la dévalaison, adressez-vous à Sylvain Richard, pôle OFB-IMFT Écohydraulique, sylvain.richard@imft.fr. + +## Citer Cassiopée + +Si vous utilisez Cassiopée dans votre travail, n'oubliez pas de mentionner le logiciel en utilisant la référence suivante : + +*Dorchies, David; Grand, François; Chouet, Mathias; Cassan, Ludovic; Courret, Dominique; Richard, Sylvain, 2022, "Cassiopée: tools for designing fish crossing devices for upstream and downstream migrations, and hydraulic calculation tools for environmental and agricultural engineering. Version 4.16.0", <https://doi.org/10.15454/TLO5LX>, Recherche Data Gouv, V1* -- GitLab From 655def7e4cf8e0fcf536bd0e6458b8cb8746e8b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 13 Oct 2022 10:54:20 +0200 Subject: [PATCH 002/285] refactor: FieldSet class: rename getPropValue to getNubPropValue, setPropValue to setNubPropValue refs #483 --- .../fieldset-container.component.ts | 4 ++-- src/app/formulaire/elements/fieldset.ts | 22 +++++++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/app/components/fieldset-container/fieldset-container.component.ts b/src/app/components/fieldset-container/fieldset-container.component.ts index aa9c6639d..f612f362a 100644 --- a/src/app/components/fieldset-container/fieldset-container.component.ts +++ b/src/app/components/fieldset-container/fieldset-container.component.ts @@ -89,8 +89,8 @@ export class FieldsetContainerComponent implements DoCheck, AfterViewInit { const prms = after.backupParameters(); // replace in-place to change properties (overkill) // @WTF why only those two ? - newFs.setPropValue("structureType", after.properties.getPropValue("structureType")); - newFs.setPropValue("loiDebit", after.properties.getPropValue("loiDebit")); + newFs.setNubPropValue("structureType", after.properties.getPropValue("structureType")); + newFs.setNubPropValue("loiDebit", after.properties.getPropValue("loiDebit")); // au cas où un des paramètres du fieldset source est en mode calcul, // on met le paramètre copié en mode fixé (nghyd#567) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index b73ff379a..3b10ef25e 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -140,9 +140,11 @@ export class FieldSet extends FormulaireElement implements Observer { } /** + * get associated nub property value + * @param key property name * @param inSection if true, will look for the required property in the Nub's section (children[0]) */ - private getPropValue(key: string, inSection: boolean = false): any { + private getNubPropValue(key: string, inSection: boolean = false): any { if (inSection) { return this.sectionProperties.getPropValue(key); } else { @@ -150,7 +152,13 @@ export class FieldSet extends FormulaireElement implements Observer { } } - public setPropValue(key: string, val: any): boolean { + /** + * assign associated nub property + * @param key nub property name + * @param val value to assign with + * @returns true if property value has changed + */ + public setNubPropValue(key: string, val: any): boolean { return this.properties.setPropValue(key, val, this); } @@ -259,7 +267,7 @@ export class FieldSet extends FormulaireElement implements Observer { private setSelectValueFromProperty(selectId: string, inSection: boolean = false) { const selectField: SelectField = this.getFormulaireNodeById(selectId) as SelectField; if (selectField) { - let propVal: any = this.getPropValue(selectField.associatedProperty, inSection); + let propVal: any = this.getNubPropValue(selectField.associatedProperty, inSection); if (propVal === undefined) { propVal = ""; // clodo bullet-proof loading } @@ -288,7 +296,7 @@ export class FieldSet extends FormulaireElement implements Observer { const ct: string = json["calcType"]; const currentCt = this.properties.getPropValue("calcType"); const calc_type: CalculatorType = currentCt ? currentCt : (ct ? CalculatorType[ct] : this.parentForm.calculatorType); - this.setPropValue("calcType", calc_type); + this.setNubPropValue("calcType", calc_type); // parse fields once, so that SelectField elements are present // when setting default properties below @@ -313,7 +321,7 @@ export class FieldSet extends FormulaireElement implements Observer { if (enumClass) { formalValue = enumClass[defaultValue]; } - this.setPropValue(prop, formalValue); + this.setNubPropValue(prop, formalValue); } } } @@ -401,9 +409,9 @@ export class FieldSet extends FormulaireElement implements Observer { const prop = (fe as SelectField).associatedProperty; // for multiple select if (Array.isArray(data.value)) { - this.setPropValue(prop, data.value.map((v: any) => v.value)); + this.setNubPropValue(prop, data.value.map((v: any) => v.value)); } else { - this.setPropValue(prop, data.value.value); + this.setNubPropValue(prop, data.value.value); } } } -- GitLab From 557c397820c5c0bfd7d7258b9ec0935f0d319525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 13 Oct 2022 10:58:19 +0200 Subject: [PATCH 003/285] refactor: SelectField: rename getSelectedEntryFromValue to getEntryFromValue refs #483 --- src/app/formulaire/elements/fieldset.ts | 2 +- src/app/formulaire/elements/select-field.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 3b10ef25e..65200665a 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -271,7 +271,7 @@ export class FieldSet extends FormulaireElement implements Observer { if (propVal === undefined) { propVal = ""; // clodo bullet-proof loading } - const selectElement = selectField.getSelectedEntryFromValue(propVal); + const selectElement = selectField.getEntryFromValue(propVal); try { selectField.setValue(selectElement); } catch (e) { diff --git a/src/app/formulaire/elements/select-field.ts b/src/app/formulaire/elements/select-field.ts index b0833fb61..ce08ddefd 100644 --- a/src/app/formulaire/elements/select-field.ts +++ b/src/app/formulaire/elements/select-field.ts @@ -98,7 +98,7 @@ export class SelectField extends Field { */ protected afterParseConfig() { } - public getSelectedEntryFromValue(val: any): SelectEntry { + public getEntryFromValue(val: any): SelectEntry { for (const se of this._entries) { if (se.value === val) { return se; -- GitLab From 4db193e86c5c9f6731768cc3ad86b3a9b35dbff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 19 Oct 2022 10:05:04 +0200 Subject: [PATCH 004/285] update jalhyd_branch to 328-fusionner-les-select-avec-source-et-les-select_custom refs #483 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index 1f7391f92..d9cf99b69 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -master +328-fusionner-les-select-avec-source-et-les-select_custom -- GitLab From 566b9c54f85b1fa74cbe7e77ad0336841498d647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 17 Oct 2022 13:12:19 +0200 Subject: [PATCH 005/285] refactor: merge SelectField and SelectFieldCustom classes, split select code into specific classes refs #483 --- src/app/calculators/bief/config.json | 2 +- src/app/calculators/cloisons/config.json | 6 +- src/app/calculators/courberemous/config.json | 2 - src/app/calculators/dever/config.json | 6 +- .../calculators/parallelstructure/config.json | 6 +- src/app/calculators/prebarrage/config.json | 12 +- src/app/calculators/solveur/config.json | 11 +- src/app/calculators/verificateur/config.json | 10 +- .../field-set/field-set.component.ts | 2 +- .../generic-select.component.html | 2 +- .../select-field-line.component.ts | 9 +- .../formulaire/definition/form-definition.ts | 4 +- .../formulaire/definition/form-fixedvar.ts | 7 +- .../definition/form-parallel-structures.ts | 2 +- .../formulaire/definition/form-pb-cloison.ts | 4 +- src/app/formulaire/definition/form-solveur.ts | 7 +- .../definition/form-verificateur.ts | 5 +- src/app/formulaire/elements/fieldset.ts | 27 +- .../elements/select-field-custom.ts | 343 ------------------ src/app/formulaire/elements/select-field.ts | 244 ------------- .../elements/{ => select}/select-entry.ts | 0 .../select/select-field-device-loi-debit.ts | 42 +++ .../select-field-device-structure-type.ts | 32 ++ .../select/select-field-downstream-basin.ts | 53 +++ .../elements/select/select-field-factory.ts | 66 ++++ .../elements/select/select-field-nub-prop.ts | 38 ++ .../select/select-field-remous-target.ts | 34 ++ .../select/select-field-searched-param.ts | 63 ++++ .../select-field-solver-targeted-result.ts | 64 ++++ .../select/select-field-solveur-target.ts | 62 ++++ .../select/select-field-species-list.ts | 73 ++++ .../select/select-field-target-pass.ts | 62 ++++ .../select/select-field-upstream-basin.ts | 53 +++ .../elements/select/select-field.ts | 268 ++++++++++++++ src/app/services/formulaire.service.ts | 2 +- 35 files changed, 947 insertions(+), 676 deletions(-) delete mode 100644 src/app/formulaire/elements/select-field-custom.ts delete mode 100644 src/app/formulaire/elements/select-field.ts rename src/app/formulaire/elements/{ => select}/select-entry.ts (100%) create mode 100644 src/app/formulaire/elements/select/select-field-device-loi-debit.ts create mode 100644 src/app/formulaire/elements/select/select-field-device-structure-type.ts create mode 100644 src/app/formulaire/elements/select/select-field-downstream-basin.ts create mode 100644 src/app/formulaire/elements/select/select-field-factory.ts create mode 100644 src/app/formulaire/elements/select/select-field-nub-prop.ts create mode 100644 src/app/formulaire/elements/select/select-field-remous-target.ts create mode 100644 src/app/formulaire/elements/select/select-field-searched-param.ts create mode 100644 src/app/formulaire/elements/select/select-field-solver-targeted-result.ts create mode 100644 src/app/formulaire/elements/select/select-field-solveur-target.ts create mode 100644 src/app/formulaire/elements/select/select-field-species-list.ts create mode 100644 src/app/formulaire/elements/select/select-field-target-pass.ts create mode 100644 src/app/formulaire/elements/select/select-field-upstream-basin.ts create mode 100644 src/app/formulaire/elements/select/select-field.ts diff --git a/src/app/calculators/bief/config.json b/src/app/calculators/bief/config.json index 95f2ca549..7434f2abc 100644 --- a/src/app/calculators/bief/config.json +++ b/src/app/calculators/bief/config.json @@ -72,4 +72,4 @@ "selectIds": [ "select_section", "select_regime" ], "help": "hsl/cote_amont_aval.html" } -] \ No newline at end of file +] diff --git a/src/app/calculators/cloisons/config.json b/src/app/calculators/cloisons/config.json index 82ccf331e..2423ef4bc 100644 --- a/src/app/calculators/cloisons/config.json +++ b/src/app/calculators/cloisons/config.json @@ -21,15 +21,11 @@ "fields": [ { "id": "select_structure", - "type": "select", - "property": "structureType", - "source": "device_structure_type" + "type": "select" }, { "id": "select_loidebit", "type": "select", - "property": "loiDebit", - "source": "device_loi_debit", "help": { "OrificeSubmerged": "structures/orifice_noye.html", "WeirSubmergedLarinier": "structures/fente_noyee.html", diff --git a/src/app/calculators/courberemous/config.json b/src/app/calculators/courberemous/config.json index 272de8687..b66d709bb 100644 --- a/src/app/calculators/courberemous/config.json +++ b/src/app/calculators/courberemous/config.json @@ -72,8 +72,6 @@ { "id": "select_target", "type": "select", - "property": "varCalc", - "source": "remous_target", "help": { "B": "hsl/section_parametree.html#largeur-au-miroir-surface-et-perimetre-mouille", "P": "hsl/section_parametree.html#largeur-au-miroir-surface-et-perimetre-mouille", diff --git a/src/app/calculators/dever/config.json b/src/app/calculators/dever/config.json index ce6bea142..6b502f27a 100644 --- a/src/app/calculators/dever/config.json +++ b/src/app/calculators/dever/config.json @@ -19,15 +19,11 @@ "fields": [ { "id": "select_structure", - "type": "select", - "property": "structureType", - "source": "device_structure_type" + "type": "select" }, { "id": "select_loidebit", "type": "select", - "property": "loiDebit", - "source": "device_loi_debit", "help": { "WeirFree": "structures/seuil_denoye.html", "TriangularWeirFree": "structures/dever_triang.html", diff --git a/src/app/calculators/parallelstructure/config.json b/src/app/calculators/parallelstructure/config.json index 26c3cf9a4..d265d9a66 100644 --- a/src/app/calculators/parallelstructure/config.json +++ b/src/app/calculators/parallelstructure/config.json @@ -18,15 +18,11 @@ "fields": [ { "id": "select_structure", - "type": "select", - "property": "structureType", - "source": "device_structure_type" + "type": "select" }, { "id": "select_loidebit", "type": "select", - "property": "loiDebit", - "source": "device_loi_debit", "help": { "KIVI": "structures/kivi.html", "WeirVillemonte": "structures/kivi.html", diff --git a/src/app/calculators/prebarrage/config.json b/src/app/calculators/prebarrage/config.json index 7dada6df9..1b0431549 100644 --- a/src/app/calculators/prebarrage/config.json +++ b/src/app/calculators/prebarrage/config.json @@ -61,15 +61,11 @@ "fields": [ { "id": "select_structure", - "type": "select", - "property": "structureType", - "source": "device_structure_type" + "type": "select" }, { "id": "select_loidebit", "type": "select", - "property": "loiDebit", - "source": "device_loi_debit", "help": { "KIVI": "structures/kivi.html", "WeirVillemonte": "structures/kivi.html", @@ -171,13 +167,11 @@ "fields": [ { "id": "select_upstream_basin", - "type": "select_custom", - "source": "upstream_basin" + "type": "select" }, { "id": "select_downstream_basin", - "type": "select_custom", - "source": "downstream_basin" + "type": "select" } ] }, diff --git a/src/app/calculators/solveur/config.json b/src/app/calculators/solveur/config.json index 71a23177b..99d215264 100644 --- a/src/app/calculators/solveur/config.json +++ b/src/app/calculators/solveur/config.json @@ -5,15 +5,11 @@ "fields": [ { "id": "select_target_nub", - "type": "select_custom", - "source": "solveur_target" + "type": "select" }, { "id": "select_target_result", - "type": "select", - "property": "targettedResult", - "source": "solveur_targetted_result", - "default": "" + "type": "select" }, "Ytarget" ] @@ -24,8 +20,7 @@ "fields": [ { "id": "select_searched_param", - "type": "select_custom", - "source": "solveur_searched" + "type": "select" }, "Xinit" ] diff --git a/src/app/calculators/verificateur/config.json b/src/app/calculators/verificateur/config.json index 438d2bf32..07f6f672c 100644 --- a/src/app/calculators/verificateur/config.json +++ b/src/app/calculators/verificateur/config.json @@ -5,9 +5,7 @@ "fields": [ { "id": "select_target_pass", - "type": "select_custom", - "source": "verificateur_target", - "messageWhenEmpty": "INFO_VERIF_CREATE_PASS_FRIST" + "type": "select" } ] }, @@ -16,10 +14,8 @@ "type": "fieldset", "fields": [ { - "type": "select_custom", - "id": "select_species_list", - "source": "verificateur_species", - "multiple": true + "type": "select", + "id": "select_species_list" } ] }, diff --git a/src/app/components/field-set/field-set.component.ts b/src/app/components/field-set/field-set.component.ts index 293fce6e2..448d40a7d 100644 --- a/src/app/components/field-set/field-set.component.ts +++ b/src/app/components/field-set/field-set.component.ts @@ -5,7 +5,7 @@ import { FieldSet } from "../../formulaire/elements/fieldset"; import { ParamFieldLineComponent } from "../param-field-line/param-field-line.component"; import { Field } from "../../formulaire/elements/field"; import { InputField } from "../../formulaire/elements/input-field"; -import { SelectField } from "../../formulaire/elements/select-field"; +import { SelectField } from "../../formulaire/elements/select/select-field"; import { FormulairePab } from "../../formulaire/definition/form-pab"; import { SelectFieldLineComponent } from "../select-field-line/select-field-line.component"; import { FieldsetContainer } from "../../formulaire/elements/fieldset-container"; diff --git a/src/app/components/generic-select/generic-select.component.html b/src/app/components/generic-select/generic-select.component.html index 9c6880e13..7ce918d76 100644 --- a/src/app/components/generic-select/generic-select.component.html +++ b/src/app/components/generic-select/generic-select.component.html @@ -23,4 +23,4 @@ </mat-form-field> <div *ngIf="messageWhenEmpty" class="message-when-empty"> {{ messageWhenEmpty }} -</div> \ No newline at end of file +</div> diff --git a/src/app/components/select-field-line/select-field-line.component.ts b/src/app/components/select-field-line/select-field-line.component.ts index eccc37a99..2b8cb3a03 100644 --- a/src/app/components/select-field-line/select-field-line.component.ts +++ b/src/app/components/select-field-line/select-field-line.component.ts @@ -1,10 +1,9 @@ import { Component, Input, OnInit } from "@angular/core"; -import { SelectField } from "../../formulaire/elements/select-field"; -import { SelectEntry } from "../../formulaire/elements/select-entry"; +import { SelectField } from "../../formulaire/elements/select/select-field"; +import { SelectEntry } from "../../formulaire/elements/select/select-entry"; import { I18nService } from "../../services/internationalisation.service"; import { ApplicationSetupService } from "../../services/app-setup.service"; -import { SelectFieldCustom } from "../../formulaire/elements/select-field-custom"; import { decodeHtml } from "../../util"; @Component({ @@ -124,8 +123,6 @@ export class SelectFieldLineComponent implements OnInit { // called every time we navigate to the module ngOnInit(): void { - if (this._select instanceof SelectFieldCustom) { - this._select.updateEntries(); - } + this._select.updateEntries(); } } diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index 814db2e70..cc5837883 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -24,8 +24,8 @@ import { TopFormulaireElementIterator } from "../form-iterator/top-element-itera import { CalculatorResults } from "../../results/calculator-results"; import { ServiceFactory } from "../../services/service-factory"; import { PabTable } from "../elements/pab-table"; -import { SelectEntry } from "../elements/select-entry"; -import { SelectField } from "../elements/select-field"; +import { SelectEntry } from "../elements/select/select-entry"; +import { SelectField } from "../elements/select/select-field"; /** * classe de base pour tous les formulaires diff --git a/src/app/formulaire/definition/form-fixedvar.ts b/src/app/formulaire/definition/form-fixedvar.ts index 575f7cb10..9289094a7 100644 --- a/src/app/formulaire/definition/form-fixedvar.ts +++ b/src/app/formulaire/definition/form-fixedvar.ts @@ -2,12 +2,11 @@ import { FormulaireDefinition } from "./form-definition"; import { FixedResults } from "../../results/fixed-results"; import { VarResults } from "../../results/var-results"; import { ChartType } from "../../results/chart-type"; -import { CalculatorResults } from "../../results/calculator-results"; -import { ParamRadioConfig, NgParameter } from "../elements/ngparam"; +import { NgParameter } from "../elements/ngparam"; import { FieldSet } from "../elements/fieldset"; import { FormulaireNode } from "../elements/formulaire-node"; -import { SelectFieldCustom } from "../elements/select-field-custom"; +import { SelectField } from "../elements/select/select-field"; import { Nub, IObservable, VariatedDetails } from "jalhyd"; export class FormulaireFixedVar extends FormulaireDefinition { @@ -95,7 +94,7 @@ export class FormulaireFixedVar extends FormulaireDefinition { sel.addObserver(this); if (firstNotif) { // force 1st observation - (sel as SelectFieldCustom).notifyValueChanged(); + (sel as SelectField).notifyValueChanged(); } } } diff --git a/src/app/formulaire/definition/form-parallel-structures.ts b/src/app/formulaire/definition/form-parallel-structures.ts index 9e4dd86d6..d25b4df33 100644 --- a/src/app/formulaire/definition/form-parallel-structures.ts +++ b/src/app/formulaire/definition/form-parallel-structures.ts @@ -2,7 +2,7 @@ import { Structure, Nub, ParallelStructure, StructureProperties, Props, Session, import { FieldsetContainer } from "../elements/fieldset-container"; import { FieldSet } from "../elements/fieldset"; -import { SelectField } from "../elements/select-field"; +import { SelectField } from "../elements/select/select-field"; import { NgParameter } from "../elements/ngparam"; import { FieldsetTemplate } from "../elements/fieldset-template"; import { FormulaireNode } from "../elements/formulaire-node"; diff --git a/src/app/formulaire/definition/form-pb-cloison.ts b/src/app/formulaire/definition/form-pb-cloison.ts index 02934c401..25910c87d 100644 --- a/src/app/formulaire/definition/form-pb-cloison.ts +++ b/src/app/formulaire/definition/form-pb-cloison.ts @@ -5,7 +5,7 @@ import { FieldSet } from "../elements/fieldset"; import { FormulaireNode } from "../elements/formulaire-node"; import { FieldsetContainer } from "../elements/fieldset-container"; import { FormulairePrebarrage } from "./form-prebarrage"; -import { SelectFieldCustom } from "../elements/select-field-custom"; +import { SelectField } from "../elements/select/select-field"; import { ServiceFactory } from "app/services/service-factory"; export class FormulairePbCloison extends FormulaireParallelStructure { @@ -41,7 +41,7 @@ export class FormulairePbCloison extends FormulaireParallelStructure { } } - if (sender instanceof SelectFieldCustom) { + if (sender instanceof SelectField) { const nub = this._currentNub as PbCloison; const pb = nub.parent; const emptyFields: boolean = ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit; diff --git a/src/app/formulaire/definition/form-solveur.ts b/src/app/formulaire/definition/form-solveur.ts index 481ea5f6d..f658c98ee 100644 --- a/src/app/formulaire/definition/form-solveur.ts +++ b/src/app/formulaire/definition/form-solveur.ts @@ -1,9 +1,8 @@ import { IObservable, ParamDefinition, Nub } from "jalhyd"; -import { SelectFieldCustom } from "../elements/select-field-custom"; import { NgParameter } from "../elements/ngparam"; import { FormulaireFixedVar } from "./form-fixedvar"; -import { SelectField } from "../elements/select-field"; +import { SelectField } from "../elements/select/select-field"; import { FieldSet } from "../elements/fieldset"; /** @@ -52,7 +51,7 @@ export class FormulaireSolveur extends FormulaireFixedVar { this.reset(); } - if (sender instanceof SelectFieldCustom) { + if (sender instanceof SelectField) { if (sender.id === "select_target_nub" && data.action === "select") { // update Solveur property: Nub to calculate try { @@ -95,7 +94,7 @@ export class FormulaireSolveur extends FormulaireFixedVar { * Re-populate searched parameter selector with fresh entries */ private refreshParameterEntries() { - const pSel = this.getFormulaireNodeById("select_searched_param") as SelectFieldCustom; + const pSel = this.getFormulaireNodeById("select_searched_param") as SelectField; if (pSel) { pSel.updateEntries(); // reflect changes in GUI diff --git a/src/app/formulaire/definition/form-verificateur.ts b/src/app/formulaire/definition/form-verificateur.ts index 3bcd463a6..893754665 100644 --- a/src/app/formulaire/definition/form-verificateur.ts +++ b/src/app/formulaire/definition/form-verificateur.ts @@ -1,9 +1,8 @@ import { IObservable, Nub, Verificateur, Result, VariatedDetails } from "jalhyd"; -import { SelectFieldCustom } from "../elements/select-field-custom"; +import { SelectField } from "../elements/select/select-field"; import { FormulaireFixedVar } from "./form-fixedvar"; import { VerificateurResults } from "../../results/verificateur-results"; -import { CalculatorResults } from "../../results/calculator-results"; import { ServiceFactory } from "../../services/service-factory"; /** @@ -94,7 +93,7 @@ export class FormulaireVerificateur extends FormulaireFixedVar { this.reset(); } - if (sender instanceof SelectFieldCustom) { + if (sender instanceof SelectField) { this.reset(); // reset results if (sender.id === "select_target_pass" && data.action === "select") { // update Verificateur property: Pass to check diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 65200665a..4a67910e4 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -9,12 +9,12 @@ import { import { FormulaireElement } from "./formulaire-element"; import { Field } from "./field"; -import { SelectField } from "./select-field"; +import { SelectField } from "./select/select-field"; import { NgParameter, ParamRadioConfig } from "./ngparam"; import { FieldsetContainer } from "./fieldset-container"; -import { SelectFieldCustom } from "./select-field-custom"; +import { SelectFieldFactory } from "./select/select-field-factory"; import { FormulaireFixedVar } from "../definition/form-fixedvar"; -import { SelectEntry } from "./select-entry"; +import { SelectEntry } from "./select/select-entry"; import { FormulaireNode } from "./formulaire-node"; import { ServiceFactory } from "app/services/service-factory"; @@ -109,18 +109,7 @@ export class FieldSet extends FormulaireElement implements Observer { } private parse_select(json: {}): SelectField { - const res: SelectField = new SelectField(this); - res.parseConfig(json); - res.addObserver(this); - return res; - } - - private parse_select_custom(json: {}): SelectField { - const source = json["source"]; - if (source === undefined || source === "") { - throw new Error(`Fieldset.parse_select_custom(): "source" must not be empty`); - } - const res: SelectField = new SelectFieldCustom(this); + const res: SelectField = SelectFieldFactory.newSelectField(json, this); res.parseConfig(json); res.addObserver(this); return res; @@ -225,12 +214,6 @@ export class FieldSet extends FormulaireElement implements Observer { param = this.parse_select(field); this.addField(param); break; - - case "select_custom": - param = this.parse_select_custom(field); - this.addField(param); - break; - } } } @@ -311,7 +294,7 @@ export class FieldSet extends FormulaireElement implements Observer { const fe = this.getFormulaireNodeById(sId); if (fe) { const prop = (fe as SelectField).associatedProperty; - const defaultValue = (fe as SelectField).defaultValue; + const defaultValue = (fe as SelectField).configDefaultValue; // Sets Nub default property, unless this property is already set const currentValue = this.properties.getPropValue(prop); if (defaultValue !== undefined && currentValue === undefined) { diff --git a/src/app/formulaire/elements/select-field-custom.ts b/src/app/formulaire/elements/select-field-custom.ts deleted file mode 100644 index 5c395281e..000000000 --- a/src/app/formulaire/elements/select-field-custom.ts +++ /dev/null @@ -1,343 +0,0 @@ -import { SelectEntry } from "./select-entry"; -import { ServiceFactory } from "../../services/service-factory"; -import { SelectField } from "./select-field"; -import { decodeHtml, arraysAreEqual } from "../../util"; - -import { FishSpecies, Session, Solveur, FishPass, CalculatorType, Verificateur, Nub, PbCloison, PreBarrage, acSection } from "jalhyd"; - -import { sprintf } from "sprintf-js"; - -/** - * A select field that populates itself with custom stuff (ex: references to Nubs, Parameters…) - */ -export class SelectFieldCustom extends SelectField { - - /** - * Loads UI with the value held by the model - */ - protected initSelectedValue() { - const nub = this.parentForm.currentNub; - - switch (this.source) { - - case "solveur_target": // Solveur, module cible (à calculer) - const ntc = (nub as Solveur).nubToCalculate; - if (ntc !== undefined) { - this.setValueFromId(this._entriesBaseId + ntc.uid); - } - break; - - case "solveur_searched": // Solveur, paramètre recherché (à faire varier) - const sp = (nub as Solveur).searchedParameter; - if (sp !== undefined) { - let parentNubUid; - const parentNub = sp.getParentComputeNode(false); - if (parentNub instanceof acSection) { - parentNubUid = parentNub.uid; - } - else { - parentNubUid = sp.nubUid - } - this.setValueFromId(this._entriesBaseId + parentNubUid + "_" + sp.symbol); - } - break; - - case "verificateur_target": // Vérificateur, passe cible (à vérifier) - const ntv = (nub as Verificateur).nubToVerify; - if (ntv !== undefined) { - this.setValueFromId(this._entriesBaseId + ntv.uid); - } - break; - - case "verificateur_species": // Vérificateur, liste d'espèces (choix multiple) - const sl = (nub as Verificateur).speciesList; - if (sl !== undefined) { - this.setValueFromId(sl.map((s) => { - const spgId = s.substring(s.lastIndexOf("_") + 1); - return this._entriesBaseId + spgId; - })); - } - break; - - case "upstream_basin": // PbCloisons, bassin amont - const ub = (nub as PbCloison).bassinAmont; - // console.log("-- load UB", ub, this._entriesBaseId + ub?.uid); - this.setValueFromId(this._entriesBaseId + (ub ? ub.uid : "none")); - break; - - case "downstream_basin": // PbCloisons, bassin aval - const db = (nub as PbCloison).bassinAval; - // console.log("-- load DB", db, this._entriesBaseId + db?.uid); - this.setValueFromId(this._entriesBaseId + (db ? db.uid : "none")); - break; - } - } - - /** - * Populates entries with available options - */ - protected populate() { - const fs = ServiceFactory.formulaireService; - let candidateNubs: any[]; - switch (this.source) { - - case "solveur_target": // Solveur, module cible (à calculer) - // find all Nubs having at least one link to another Nub's result - candidateNubs = - Session.getInstance().getDownstreamNubs().concat( - Session.getInstance().getUpstreamNubsHavingExtraResults() - ).filter( - (element, index, self) => self.findIndex((e) => e.uid === element.uid) === index - ); - for (const cn of candidateNubs) { - const nub = fs.getFormulaireFromId(cn.uid); - if (nub) { - const calc = nub.calculatorName; - let label = calc; - // calculated param - if (cn.calculatedParam !== undefined) { - const varName = fs.expandVariableName(cn.calcType, cn.calculatedParam.symbol); - label += ` / ${varName} (${cn.calculatedParam.symbol})`; - } - this.addEntry(new SelectEntry(this._entriesBaseId + cn.uid, cn.uid, decodeHtml(label))); - } else { - // silent fail, this Solveur nub was probably loaded before all the candidate nubs are done loading - } - } - break; - - case "solveur_searched": // Solveur, paramètre recherché (à faire varier) - // find all non-calculated, non-linked parameters of all Nubs that - // the current "target" Nub depends on (if any) - const solv = this.parentForm.currentNub as Solveur; - const ntc: Nub = solv.nubToCalculate; - const searchableParams = Solveur.getDependingNubsSearchableParams( - ntc, - solv.targettedResult !== undefined && solv.targettedResult !== "" - ); - for (const p of searchableParams) { - if (p.visible) { - const calc = fs.getFormulaireFromId(p.originNub.uid).calculatorName; - const varName = fs.expandVariableName(p.originNub.calcType, p.symbol); - const label = `${p.symbol} - ${varName} (${calc})`; - this.addEntry(new SelectEntry(this._entriesBaseId + p.getParentComputeNode(false).uid + "_" + p.symbol, p, decodeHtml(label))); - } - } - break; - - case "verificateur_target": // Vérificateur, passe cible (à vérifier) - // find all Nubs of type FishPass - candidateNubs = Session.getInstance().getAllNubs().filter((element) => { - return ( - (element instanceof FishPass) - && element.calcType !== CalculatorType.Par // ParSimulation extends Par @TODO find something better - ); - }); - for (const cn of candidateNubs) { - const nub = fs.getFormulaireFromId(cn.uid); - if (nub) { - const label = nub.calculatorName + " (" + fs.getLocalisedTitleFromCalculatorType(nub.calculatorType) + ")"; - this.addEntry(new SelectEntry(this._entriesBaseId + cn.uid, cn.uid, decodeHtml(label))); - } else { - // silent fail, this Verificateur nub was probably loaded before all the candidate nubs are done loading - } - } - break; - - case "verificateur_species": - // add UIDs of all Espece type Nubs in the session - const especeNubs = Session.getInstance().getAllNubs().filter((element) => element.calcType === CalculatorType.Espece); - for (const en of especeNubs) { - const form = ServiceFactory.formulaireService.getFormulaireFromNubId(en.uid); - this.addEntry( - new SelectEntry( - this._entriesBaseId + en.uid, - en.uid, - sprintf( - ServiceFactory.i18nService.localizeText("INFO_VERIFICATEUR_CUSTOM_SPECIES"), - form ? form.calculatorName : "*** form not loaded yet ***" - ) - ) - ); - } - // add all FishSpecies - for (let j = 1; j < Object.keys(FishSpecies).length / 2; j++) { // exclude "0" (SPECIES_CUSTOM) - const spgId = FishSpecies[j].substring(FishSpecies[j].lastIndexOf("_") + 1); - this.addEntry( - new SelectEntry( - this._entriesBaseId + spgId, - FishSpecies[j], - ServiceFactory.i18nService.localizeText("INFO_ENUM_" + FishSpecies[j]) - ) - ); - } - break; - - case "upstream_basin": // PbCloisons, bassin amont - const pbWallU = this.parentForm.currentNub as PbCloison; - const preBarrageU = pbWallU.parent as PreBarrage; - const posDb = pbWallU.bassinAval?.findPositionInParent(); - // river upstream - this.addEntry( - new SelectEntry( - this._entriesBaseId + "none", - undefined, - ServiceFactory.i18nService.localizeText("INFO_LIB_AMONT") - ) - ); - // all available basins, depending on current downstream basin - for (const b of preBarrageU.bassins) { - const pos = b.findPositionInParent(); - if (posDb === undefined || pos < posDb) { - this.addEntry( - new SelectEntry( - this._entriesBaseId + b.uid, - b.uid, - ServiceFactory.i18nService.localizeMessage(b.description) - ) - ); - } - } - break; - - case "downstream_basin": // PbCloisons, bassin aval - const pbWallD = this.parentForm.currentNub as PbCloison; - const preBarrageD = pbWallD.parent as PreBarrage; - const posUb = pbWallD.bassinAmont?.findPositionInParent(); - // all available basins, depending on current upstream basin - for (const b of preBarrageD.bassins) { - const pos = b.findPositionInParent(); - if (posUb === undefined || pos > posUb) { - this.addEntry( - new SelectEntry( - this._entriesBaseId + b.uid, - b.uid, - ServiceFactory.i18nService.localizeMessage(b.description) - ) - ); - } - } - // river downstream - this.addEntry( - new SelectEntry( - this._entriesBaseId + "none", - undefined, - ServiceFactory.i18nService.localizeText("INFO_LIB_AVAL") - ) - ); - break; - } - } - - protected setDefaultValue() { - // default to first available entry if any - if (this._entries.length > 0) { - if (this._multiple) { - this.setValue([this._entries[0]]); - } else { - this.setValue(this._entries[0]); - } - } else { - // notify observers that no value is selected anymore - this.notifyValueChanged(); - } - } - - /** - * Once config is parsed, init original value from model - * (needs config, for this._entriesBaseId to be set) - */ - protected afterParseConfig() { - this.populate(); - this.initSelectedValue(); - } - - /** - * Reloads available entries, trying to keep the current selected - * value; does not notify observers if value did not change - */ - public updateEntries() { - // store previous selected entry - const pse = this._selectedEntry; - // empty - this.clearEntries(); - // populate - this.populate(); - // if no entry is available anymore, unset value - if (this.entries.length === 0) { - if (this.multiple) { - super.setValue([]); - } else { - super.setValue(undefined); - } - } else { - // keep previously selected entry(ies) if possible - if (pse) { - if (!Array.isArray(pse) && pse.id) { - this.setValueFromId(pse.id); - } else if (Array.isArray(pse) && pse.length > 0) { - this.setValueFromId(pse.map((e) => e.id)); - } else { - this.setDefaultValue(); - } - } else { - this.setDefaultValue(); - } - } - } - - /** - * Updates selectedValue; notifies observers only if - * value.id has changed - */ - public setValue(v: SelectEntry | SelectEntry[]) { - const previousSelectedEntry = this._selectedEntry; - this._selectedEntry = v; - // if value changed - const valueChanged = ( - !previousSelectedEntry - || ( - !Array.isArray(previousSelectedEntry) - && !Array.isArray(v) - && previousSelectedEntry.id !== v.id - ) - || ( - Array.isArray(previousSelectedEntry) - && Array.isArray(v) - && !arraysAreEqual(previousSelectedEntry, v, "id", true) - ) - ); - if (valueChanged) { - this.notifyValueChanged(); - } - } - - /** - * Sets value from given ID(s); if it was not found, sets the - * first available entry as selectedValue - */ - public setValueFromId(id: string | string[]) { - let found = false; - const entries = []; - if (this._multiple && Array.isArray(id)) { - for (const e of this._entries) { - if (id.includes(e.id)) { - entries.push(e); - found = true; - } - } - this.setValue(entries); - } else { - for (const e of this._entries) { - if (e.id === id) { - found = true; - this.setValue(e); - } - } - } - if (!found) { - this.setDefaultValue(); - } - } - -} diff --git a/src/app/formulaire/elements/select-field.ts b/src/app/formulaire/elements/select-field.ts deleted file mode 100644 index ce08ddefd..000000000 --- a/src/app/formulaire/elements/select-field.ts +++ /dev/null @@ -1,244 +0,0 @@ -import { - CourbeRemous, - Nub, - ParallelStructure, - StructureType, - LoiDebit, - Session, - Solveur, - StructureProperties - } from "jalhyd"; - -import { Field } from "./field"; -import { SelectEntry } from "./select-entry"; -import { FormulaireNode } from "./formulaire-node"; -import { FormulaireDefinition } from "../definition/form-definition"; -import { ServiceFactory } from "../../services/service-factory"; - -export class SelectField extends Field { - - /** string to build the select entries IDs from */ - protected _entriesBaseId: string; - - protected _entries: SelectEntry[]; - - protected _selectedEntry: SelectEntry | SelectEntry[]; - - /** name of the Nub property associated to this field, if any */ - protected _associatedProperty: string; - - /** default value for this field */ - protected _defaultValue: string; - - /** if true, user can select multiple values */ - protected _multiple = false; - - /** if true, select box is grayed out */ - public disabled = false; - - /** source identifier for populating with available values */ - protected source: string; - - /** - * message to display below the select field when no option is selected, - * if this message is defined and not empty - */ - protected _messageWhenEmpty: string; - - constructor(parent: FormulaireNode) { - super(parent); - this.clearEntries(); - } - - public get entriesBaseId(): string { - return this._entriesBaseId; - } - - public get entries() { - return this._entries; - } - - public get associatedProperty(): string { - return this._associatedProperty; - } - - public get defaultValue(): string { - return this._defaultValue; - } - - public get multiple(): boolean { - return this._multiple; - } - - public get messageWhenEmpty(): string { - let msg: string; - if (this._selectedEntry === undefined && this._messageWhenEmpty) { - msg = ServiceFactory.i18nService.localizeText(this._messageWhenEmpty); - } - return msg; - } - - public clearEntries() { - this._entries = []; - } - - public addEntry(e: SelectEntry) { - this._entries.push(e); - if (! this._selectedEntry) { - if (this._multiple) { - this.setValue([ e ]); - } else { - this.setValue(e); - } - } - } - - /** - * Triggered at the end of parseConfig() - */ - protected afterParseConfig() { } - - public getEntryFromValue(val: any): SelectEntry { - for (const se of this._entries) { - if (se.value === val) { - return se; - } - } - } - - public getValue(): SelectEntry | SelectEntry[] { - return this._selectedEntry; - } - - public setValue(v: SelectEntry | SelectEntry[]) { - if (this._selectedEntry !== v) { - this._selectedEntry = v; - this.notifyValueChanged(); - } - } - - public notifyValueChanged() { - this.notifyObservers({ - "action": "select", - "value": this._selectedEntry - }, this); - } - - public updateLocalisation() { - super.updateLocalisation(); - for (const e of this._entries) { - if (this.source === "solveur_targetted_result") { - // @WARNING clodo hack for Solveur - // 1. calculated param - const nub: Nub = (this.parentForm as FormulaireDefinition).currentNub; - const ntc = (nub as Solveur).nubToCalculate; - if (e.value !== undefined && ntc !== undefined) { - if (e.value === "" && ntc.calculatedParam !== undefined) { - const varName = ServiceFactory.formulaireService.expandVariableName(ntc.calcType, ntc.calculatedParam.symbol); - e.label = `${varName} (${ntc.calculatedParam.symbol})`; - } else { - // 2. extra results - const varName = ServiceFactory.formulaireService.expandVariableName(ntc.calcType, e.value); - e.label = `${varName} (${e.value})`; - } - } - } else { - // general case - const aId = e.id.split("_"); - const trad = ServiceFactory.formulaireService.localizeText( - `${aId[1].toUpperCase()}_${aId[2]}`, - this.parentForm.currentNub.calcType - ); - e.label = trad; - } - } - } - - public parseConfig(field: {}, data?: {}) { - this._confId = field["id"]; - this._entriesBaseId = this._confId + "_"; - this._helpLink = field["help"]; - this._associatedProperty = field["property"]; - this._defaultValue = field["default"]; - this._messageWhenEmpty = field["messageWhenEmpty"]; - if (field["multiple"] !== undefined) { - this._multiple = field["multiple"]; - } - this.source = field["source"]; - - this.loadEntriesFromSource(); - - this.afterParseConfig(); - } - - /** - * Adds available entries to the selector, depending on the "source" identifier - */ - protected loadEntriesFromSource() { - const nub: Nub = (this.parentForm as FormulaireDefinition).currentNub; - // ad-hoc cases - switch (this.source) { - // driven by string[], not enum (easier for variable names) - case "remous_target": - this.addEntry(new SelectEntry(this._entriesBaseId + "none", "")); - for (const at of CourbeRemous.availableTargets) { - const e: SelectEntry = new SelectEntry(this._entriesBaseId + at, at); - this.addEntry(e); - } - break; - - // driven by string[], not enum - case "solveur_targetted_result": - // @WARNING for localisation, @see hack in this.updateLocalisation() - // 1. calculated param - const ntc = (nub as Solveur).nubToCalculate; - if (ntc?.calculatedParam !== undefined) { // some nubs have no calculatedParam, for ex. SectionParam - this.addEntry(new SelectEntry(this._entriesBaseId + "none", "")); - } - // 2. extra results - if (ntc?.resultsFamilies !== undefined) { - for (const er of Object.keys(ntc.resultsFamilies)) { - const e: SelectEntry = new SelectEntry(this._entriesBaseId + er, er); - this.addEntry(e); - } - } - break; - - // possible values depend on CalcType - case "device_structure_type": - for (const st in (nub as ParallelStructure).getLoisAdmissibles()) { - const e: SelectEntry = new SelectEntry(this._entriesBaseId + st, StructureType[st]); - this.addEntry(e); - } - break; - - // possible values depend on CalcType - case "device_loi_debit": - // get current structure type from appropriate Nub child - const child = nub.getChildren()[this.parent.indexAsKid()]; - const la = (nub as ParallelStructure).getLoisAdmissibles(); - const loiDebit = child.properties.getPropValue("loiDebit"); - const stCode = StructureProperties.findCompatibleStructure(loiDebit, nub as ParallelStructure); - const stName = StructureType[stCode]; - if (la[stName] !== undefined) { - for (const ld of la[stName]) { - const e: SelectEntry = new SelectEntry(this._entriesBaseId + LoiDebit[ld], ld); - this.addEntry(e); - } - } - break; - - // general case : property values taken from an enum - default: - // find enum associated to property - const enumClass = Session.enumFromProperty[this._associatedProperty]; - if (enumClass !== undefined) { - // add one select entry per enum entry, in the enum order - for (let j = 0; j < Object.keys(enumClass).length / 2; j++) { - this.addEntry(new SelectEntry(this._entriesBaseId + j, j)); - } - } - } - } - -} diff --git a/src/app/formulaire/elements/select-entry.ts b/src/app/formulaire/elements/select/select-entry.ts similarity index 100% rename from src/app/formulaire/elements/select-entry.ts rename to src/app/formulaire/elements/select/select-entry.ts diff --git a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts new file mode 100644 index 000000000..15194174f --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts @@ -0,0 +1,42 @@ +import { LoiDebit, ParallelStructure, StructureProperties, StructureType } from "jalhyd"; +import { SelectField } from "./select-field"; +import { SelectEntry } from "./select-entry"; + +/* + "id": "select_loidebit", + "type": "select", + "property": "loiDebit", + "source": "device_loi_debit", + "help": { +*/ + +export class SelectFieldDeviceLoiDebit extends SelectField { + protected populate() { + // possible values depend on CalcType + + // get current structure type from appropriate Nub child + const child = this.nub.getChildren()[this.parent.indexAsKid()]; + const la = (this.nub as ParallelStructure).getLoisAdmissibles(); + const loiDebit = child.properties.getPropValue("loiDebit"); + const stCode = StructureProperties.findCompatibleStructure(loiDebit, this.nub as ParallelStructure); + const stName = StructureType[stCode]; + if (la[stName] !== undefined) { + for (const ld of la[stName]) { + const e: SelectEntry = new SelectEntry(this._entriesBaseId + LoiDebit[ld], ld); + this.addEntry(e); + } + } + } + + protected initSelectedValue() { + this.findAndSetDefaultValue(); + } + + public get associatedProperty(): string { + return "loiDebit"; + } + + public get configDefaultValue(): string { + return undefined; + } +} \ No newline at end of file diff --git a/src/app/formulaire/elements/select/select-field-device-structure-type.ts b/src/app/formulaire/elements/select/select-field-device-structure-type.ts new file mode 100644 index 000000000..b818eedf5 --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-device-structure-type.ts @@ -0,0 +1,32 @@ +import { ParallelStructure, StructureType } from "jalhyd"; +import { SelectField } from "./select-field"; +import { SelectEntry } from "./select-entry"; + +/* + "id": "select_structure", + "type": "select", + "property": "structureType", + "source": "device_structure_type" +*/ + +export class SelectFieldDeviceStructureType extends SelectField { + protected populate() { + // possible values depend on CalcType + for (const st in (this.nub as ParallelStructure).getLoisAdmissibles()) { + const e: SelectEntry = new SelectEntry(this._entriesBaseId + st, StructureType[st]); + this.addEntry(e); + } + } + + protected initSelectedValue() { + this.findAndSetDefaultValue(); + } + + public get associatedProperty(): string { + return "structureType"; + } + + public get configDefaultValue(): string { + return undefined; + } +} \ No newline at end of file diff --git a/src/app/formulaire/elements/select/select-field-downstream-basin.ts b/src/app/formulaire/elements/select/select-field-downstream-basin.ts new file mode 100644 index 000000000..77fcab4bd --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-downstream-basin.ts @@ -0,0 +1,53 @@ +import { ServiceFactory } from "app/services/service-factory"; +import { PbCloison, PreBarrage } from "jalhyd"; +import { SelectEntry } from "./select-entry"; +import { SelectField } from "./select-field"; + +/* + "id": "select_downstream_basin", + "type": "select_custom", + "source": "downstream_basin" +*/ + +// PbCloisons, bassin aval +export class SelectFieldDownstreamBasin extends SelectField { + protected populate() { + const pbWallD = this.parentForm.currentNub as PbCloison; + const preBarrageD = pbWallD.parent as PreBarrage; + const posUb = pbWallD.bassinAmont?.findPositionInParent(); + // all available basins, depending on current upstream basin + for (const b of preBarrageD.bassins) { + const pos = b.findPositionInParent(); + if (posUb === undefined || pos > posUb) { + this.addEntry( + new SelectEntry( + this._entriesBaseId + b.uid, + b.uid, + ServiceFactory.i18nService.localizeMessage(b.description) + ) + ); + } + } + // river downstream + this.addEntry( + new SelectEntry( + this._entriesBaseId + "none", + undefined, + ServiceFactory.i18nService.localizeText("INFO_LIB_AVAL") + ) + ); + } + + protected initSelectedValue() { + const db = (this.nub as PbCloison).bassinAval; + this.setValueFromId(this._entriesBaseId + (db ? db.uid : "none")); + } + + public get associatedProperty(): string { + return undefined; + } + + public get configDefaultValue(): string { + return undefined; + } +} diff --git a/src/app/formulaire/elements/select/select-field-factory.ts b/src/app/formulaire/elements/select/select-field-factory.ts new file mode 100644 index 000000000..38e8e7b49 --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-factory.ts @@ -0,0 +1,66 @@ +import { FormulaireNode } from "../formulaire-node"; +import { SelectField } from "./select-field"; +import { SelectFieldDeviceLoiDebit } from "./select-field-device-loi-debit"; +import { SelectFieldDeviceStructureType } from "./select-field-device-structure-type"; +import { SelectFieldRemousTarget } from "./select-field-remous-target"; +import { SelectFieldSolverTargetedResult } from "./select-field-solver-targeted-result"; +import { SelectFieldUpstreamBasin } from "./select-field-upstream-basin"; +import { SelectFieldDownstreamBasin } from "./select-field-downstream-basin"; +import { SelectFieldSolverTarget } from "./select-field-solveur-target"; +import { SelectFieldSearchedParam } from "./select-field-searched-param"; +import { SelectFieldSpeciesList } from "./select-field-species-list"; +import { SelectFieldTargetPass } from "./select-field-target-pass"; +import { SelectFieldNubProperty } from "./select-field-nub-prop"; + +export class SelectFieldFactory { + public static newSelectField(json: {}, parent: FormulaireNode): SelectField { + switch (json["id"]) { + case "select_downstream_basin": + return new SelectFieldDownstreamBasin(parent); + + case "select_loidebit": + return new SelectFieldDeviceLoiDebit(parent); + + case "select_searched_param": + return new SelectFieldSearchedParam(parent); + + case "select_species_list": + return new SelectFieldSpeciesList(parent); + + case "select_structure": + return new SelectFieldDeviceStructureType(parent); + + case "select_target": + return new SelectFieldRemousTarget(parent); + + case "select_target_nub": + return new SelectFieldSolverTarget(parent); + + case "select_target_pass": + return new SelectFieldTargetPass(parent); + + case "select_target_result": + return new SelectFieldSolverTargetedResult(parent); + + case "select_upstream_basin": + return new SelectFieldUpstreamBasin(parent); + + case "select_divingjetsupported": + case "select_gridprofile": + case "select_gridtype": + case "select_material": + case "select_operation": + case "select_partype": + case "select_passtype": + case "select_regime": + case "select_resolution": + case "select_section": + case "select_sppoperation": + case "select_unit": + return new SelectFieldNubProperty(parent, json); + + default: + throw new Error("unknown select id ${id}"); + } + } +} \ No newline at end of file diff --git a/src/app/formulaire/elements/select/select-field-nub-prop.ts b/src/app/formulaire/elements/select/select-field-nub-prop.ts new file mode 100644 index 000000000..eca0463b3 --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-nub-prop.ts @@ -0,0 +1,38 @@ +import { Session } from "jalhyd"; +import { FormulaireNode } from "../formulaire-node"; +import { SelectEntry } from "./select-entry"; +import { SelectField } from "./select-field"; + +/* + par exemple : + "id": "select_regime", + "type": "select", + "property": "regime", + "default": "Fluvial" + +*/ + +// nub property values taken from an enum +// "standard" select that normally does not require customisation +export class SelectFieldNubProperty extends SelectField { + constructor(parent: FormulaireNode, json: {}) { + super(parent); + this._associatedProperty = json["property"]; + this._configDefaultValue = json["default"]; + } + + protected populate() { + // find enum associated to property + const enumClass = Session.enumFromProperty[this._associatedProperty]; + if (enumClass !== undefined) { + // add one select entry per enum entry, in the enum order + for (let j = 0; j < Object.keys(enumClass).length / 2; j++) { + this.addEntry(new SelectEntry(this._entriesBaseId + j, j)); + } + } + } + + protected initSelectedValue() { + this.findAndSetDefaultValue(); + } +} \ No newline at end of file diff --git a/src/app/formulaire/elements/select/select-field-remous-target.ts b/src/app/formulaire/elements/select/select-field-remous-target.ts new file mode 100644 index 000000000..6d0f2c506 --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-remous-target.ts @@ -0,0 +1,34 @@ +import { CourbeRemous } from "jalhyd"; +import { SelectField } from "./select-field"; +import { SelectEntry } from "./select-entry"; + +/* + "id": "select_target", + "type": "select", + "property": "varCalc", + "source": "remous_target", + "help": { +*/ + +export class SelectFieldRemousTarget extends SelectField { + protected populate() { + // driven by string[], not enum (easier for variable names) + this.addEntry(new SelectEntry(this._entriesBaseId + "none", "")); + for (const at of CourbeRemous.availableTargets) { + const e: SelectEntry = new SelectEntry(this._entriesBaseId + at, at); + this.addEntry(e); + } + } + + protected initSelectedValue() { + this.findAndSetDefaultValue(); + } + + public get associatedProperty(): string { + return "varCalc"; + } + + public get configDefaultValue(): string { + return undefined; + } +} \ No newline at end of file diff --git a/src/app/formulaire/elements/select/select-field-searched-param.ts b/src/app/formulaire/elements/select/select-field-searched-param.ts new file mode 100644 index 000000000..5380e1238 --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-searched-param.ts @@ -0,0 +1,63 @@ +import { ServiceFactory } from "app/services/service-factory"; +import { decodeHtml } from "app/util"; +import { acSection, Nub, Solveur } from "jalhyd"; +import { SelectEntry } from "./select-entry"; +import { SelectField } from "./select-field"; + +/* + "id": "select_searched_param", + "type": "select_custom", + "source": "solveur_searched" +*/ + +// Solveur, paramètre recherché (à faire varier) +export class SelectFieldSearchedParam extends SelectField { + protected populate() { + const fs = ServiceFactory.formulaireService; + + // find all non-calculated, non-linked parameters of all Nubs that + // the current "target" Nub depends on (if any) + const solv = this.parentForm.currentNub as Solveur; + const ntc: Nub = solv.nubToCalculate; + const searchableParams = Solveur.getDependingNubsSearchableParams( + ntc, + solv.targettedResult !== undefined && solv.targettedResult !== "" + ); + for (const p of searchableParams) { + if (p.visible) { + const calc = fs.getFormulaireFromId(p.originNub.uid).calculatorName; + const varName = fs.expandVariableName(p.originNub.calcType, p.symbol); + const label = `${p.symbol} - ${varName} (${calc})`; + this.addEntry(new SelectEntry(this._entriesBaseId + p.getParentComputeNode(false).uid + "_" + p.symbol, p, decodeHtml(label))); + } + } + } + + protected initSelectedValue() { + const sp = (this.nub as Solveur).searchedParameter; + if (sp !== undefined) { + let parentNubUid; + const parentNub = sp.getParentComputeNode(false); + if (parentNub instanceof acSection) { + parentNubUid = parentNub.uid; + } + else { + parentNubUid = sp.nubUid + } + this.setValueFromId(this._entriesBaseId + parentNubUid + "_" + sp.symbol); + } + } + + public get associatedProperty(): string { + return undefined; + } + + public get configDefaultValue(): string { + return undefined; + } + + public updateLocalisation() { + // do not override localisation done in populate() + // ie. avoid what is done by SelectField.updateLocalisation() + } +} diff --git a/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts b/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts new file mode 100644 index 000000000..2b10da827 --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts @@ -0,0 +1,64 @@ +import { FormulaireDefinition } from "app/formulaire/definition/form-definition"; +import { ServiceFactory } from "app/services/service-factory"; +import { Nub, Solveur } from "jalhyd"; +import { FormulaireElement } from "../formulaire-element"; +import { SelectField } from "./select-field"; +import { SelectEntry } from "./select-entry"; + +/* + "id": "select_target_result", + "type": "select", + "property": "targettedResult", + "source": "solveur_targetted_result", + "default": "" +*/ +export class SelectFieldSolverTargetedResult extends SelectField { + + protected populate() { + // @WARNING for localisation, @see hack in this.updateLocalisation() + // 1. calculated param + const ntc = (this.nub as Solveur).nubToCalculate; + if (ntc?.calculatedParam !== undefined) { // some nubs have no calculatedParam, for ex. SectionParam + this.addEntry(new SelectEntry(this._entriesBaseId + "none", "")); + } + // 2. extra results + if (ntc?.resultsFamilies !== undefined) { + for (const er of Object.keys(ntc.resultsFamilies)) { + const e: SelectEntry = new SelectEntry(this._entriesBaseId + er, er); + this.addEntry(e); + } + } + } + + protected initSelectedValue() { + this.findAndSetDefaultValue(); + } + + public get configDefaultValue(): string { + return ""; + } + + public get associatedProperty(): string { + return "targettedResult"; + } + + public updateLocalisation() { + FormulaireElement.prototype.updateLocalisation.call(this); + for (const e of this._entries) { + // @WARNING clodo hack for Solveur + // 1. calculated param + const nub: Nub = (this.parentForm as FormulaireDefinition).currentNub; + const ntc = (nub as Solveur).nubToCalculate; + if (e.value !== undefined && ntc !== undefined) { + if (e.value === "" && ntc.calculatedParam !== undefined) { + const varName = ServiceFactory.formulaireService.expandVariableName(ntc.calcType, ntc.calculatedParam.symbol); + e.label = `${varName} (${ntc.calculatedParam.symbol})`; + } else { + // 2. extra results + const varName = ServiceFactory.formulaireService.expandVariableName(ntc.calcType, e.value); + e.label = `${varName} (${e.value})`; + } + } + } + } +} \ No newline at end of file diff --git a/src/app/formulaire/elements/select/select-field-solveur-target.ts b/src/app/formulaire/elements/select/select-field-solveur-target.ts new file mode 100644 index 000000000..64d37dc33 --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-solveur-target.ts @@ -0,0 +1,62 @@ +/* + "id": "select_target_nub", + "type": "select_custom", + "source": "solveur_target" +*/ + +import { ServiceFactory } from "app/services/service-factory"; +import { decodeHtml } from "../../../util"; +import { Session, Solveur } from "jalhyd"; +import { SelectEntry } from "./select-entry"; +import { SelectField } from "./select-field"; + +// Solveur, module cible (à calculer) +export class SelectFieldSolverTarget extends SelectField { + protected populate() { + + const fs = ServiceFactory.formulaireService; + + // find all Nubs having at least one link to another Nub's result + const candidateNubs: any[] = + Session.getInstance().getDownstreamNubs().concat( + Session.getInstance().getUpstreamNubsHavingExtraResults() + ).filter( + (element, index, self) => self.findIndex((e) => e.uid === element.uid) === index + ); + for (const cn of candidateNubs) { + const nub = fs.getFormulaireFromId(cn.uid); + if (nub) { + const calc = nub.calculatorName; + let label = calc; + // calculated param + if (cn.calculatedParam !== undefined) { + const varName = fs.expandVariableName(cn.calcType, cn.calculatedParam.symbol); + label += ` / ${varName} (${cn.calculatedParam.symbol})`; + } + this.addEntry(new SelectEntry(this._entriesBaseId + cn.uid, cn.uid, decodeHtml(label))); + } else { + // silent fail, this Solveur nub was probably loaded before all the candidate nubs are done loading + } + } + } + + protected initSelectedValue() { + const ntc = (this.nub as Solveur).nubToCalculate; + if (ntc !== undefined) { + this.setValueFromId(this._entriesBaseId + ntc.uid); + } + } + + public get associatedProperty(): string { + return undefined; + } + + public get configDefaultValue(): string { + return undefined; + } + + public updateLocalisation() { + // do not override localisation done in populate() + // ie. avoid what is done by SelectField.updateLocalisation() + } +} \ No newline at end of file diff --git a/src/app/formulaire/elements/select/select-field-species-list.ts b/src/app/formulaire/elements/select/select-field-species-list.ts new file mode 100644 index 000000000..bcdbbee79 --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-species-list.ts @@ -0,0 +1,73 @@ +/* +"type": "select_custom", +"id": "select_species_list", +"source": "verificateur_species", +"multiple": true +*/ + +import { ServiceFactory } from "app/services/service-factory"; +import { CalculatorType, FishSpecies, Session, Verificateur } from "jalhyd"; +import { sprintf } from "sprintf-js"; +import { FormulaireNode } from "../formulaire-node"; +import { SelectEntry } from "./select-entry"; +import { SelectField } from "./select-field"; + +// Vérificateur, liste d'espèces (choix multiple) +export class SelectFieldSpeciesList extends SelectField { + constructor(parent: FormulaireNode) { + super(parent); + this._multiple = true; + } + + protected populate() { + // add UIDs of all Espece type Nubs in the session + const especeNubs = Session.getInstance().getAllNubs().filter((element) => element.calcType === CalculatorType.Espece); + for (const en of especeNubs) { + const form = ServiceFactory.formulaireService.getFormulaireFromNubId(en.uid); + this.addEntry( + new SelectEntry( + this._entriesBaseId + en.uid, + en.uid, + sprintf( + ServiceFactory.i18nService.localizeText("INFO_VERIFICATEUR_CUSTOM_SPECIES"), + form ? form.calculatorName : "*** form not loaded yet ***" + ) + ) + ); + } + // add all FishSpecies + for (let j = 1; j < Object.keys(FishSpecies).length / 2; j++) { // exclude "0" (SPECIES_CUSTOM) + const spgId = FishSpecies[j].substring(FishSpecies[j].lastIndexOf("_") + 1); + this.addEntry( + new SelectEntry( + this._entriesBaseId + spgId, + FishSpecies[j], + ServiceFactory.i18nService.localizeText("INFO_ENUM_" + FishSpecies[j]) + ) + ); + } + } + + protected initSelectedValue() { + const sl = (this.nub as Verificateur).speciesList; + if (sl !== undefined) { + this.setValueFromId(sl.map((s) => { + const spgId = s.substring(s.lastIndexOf("_") + 1); + return this._entriesBaseId + spgId; + })); + } + } + + public get associatedProperty(): string { + return undefined; + } + + public get configDefaultValue(): string { + return undefined; + } + + public updateLocalisation() { + // do not override localisation done in populate() + // ie. avoid what is done by SelectField.updateLocalisation() + } +} \ No newline at end of file diff --git a/src/app/formulaire/elements/select/select-field-target-pass.ts b/src/app/formulaire/elements/select/select-field-target-pass.ts new file mode 100644 index 000000000..36430d217 --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-target-pass.ts @@ -0,0 +1,62 @@ +import { ServiceFactory } from "app/services/service-factory"; +import { decodeHtml } from "app/util"; +import { CalculatorType, FishPass, Session, Verificateur } from "jalhyd"; +import { FormulaireElement } from "../formulaire-element"; +import { FormulaireNode } from "../formulaire-node"; +import { SelectEntry } from "./select-entry"; +import { SelectField } from "./select-field"; + +/* + "id": "select_target_pass", + "type": "select_custom", + "source": "verificateur_target", + "messageWhenEmpty": "INFO_VERIF_CREATE_PASS_FRIST" +*/ + +// Vérificateur, passe cible (à vérifier) +export class SelectFieldTargetPass extends SelectField { + constructor(parent: FormulaireNode) { + super(parent); + this._messageWhenEmpty = "INFO_VERIF_CREATE_PASS_FRIST"; + } + + protected populate() { + const fs = ServiceFactory.formulaireService; + // find all Nubs of type FishPass + const candidateNubs: any[] = Session.getInstance().getAllNubs().filter((element) => { + return ( + (element instanceof FishPass) + && element.calcType !== CalculatorType.Par // ParSimulation extends Par @TODO find something better + ); + }); + for (const cn of candidateNubs) { + const nub = fs.getFormulaireFromId(cn.uid); + if (nub) { + const label = nub.calculatorName + " (" + fs.getLocalisedTitleFromCalculatorType(nub.calculatorType) + ")"; + this.addEntry(new SelectEntry(this._entriesBaseId + cn.uid, cn.uid, decodeHtml(label))); + } else { + // silent fail, this Verificateur nub was probably loaded before all the candidate nubs are done loading + } + } + } + + protected initSelectedValue() { + const ntv = (this.nub as Verificateur).nubToVerify; + if (ntv !== undefined) { + this.setValueFromId(this._entriesBaseId + ntv.uid); + } + } + + public get associatedProperty(): string { + return undefined; + } + + public get configDefaultValue(): string { + return undefined; + } + + public updateLocalisation() { + // do not override localisation done in populate() + // ie. avoid what is done by SelectField.updateLocalisation() + } +} \ No newline at end of file diff --git a/src/app/formulaire/elements/select/select-field-upstream-basin.ts b/src/app/formulaire/elements/select/select-field-upstream-basin.ts new file mode 100644 index 000000000..06e335f5c --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-upstream-basin.ts @@ -0,0 +1,53 @@ +import { ServiceFactory } from "app/services/service-factory"; +import { PbCloison, PreBarrage } from "jalhyd"; +import { SelectEntry } from "./select-entry"; +import { SelectField } from "./select-field"; + +/* + "id": "select_upstream_basin", + "type": "select_custom", + "source": "upstream_basin" +*/ + +// PbCloisons, bassin amont +export class SelectFieldUpstreamBasin extends SelectField { + protected populate() { + const pbWallU = this.parentForm.currentNub as PbCloison; + const preBarrageU = pbWallU.parent as PreBarrage; + const posDb = pbWallU.bassinAval?.findPositionInParent(); + // river upstream + this.addEntry( + new SelectEntry( + this._entriesBaseId + "none", + undefined, + ServiceFactory.i18nService.localizeText("INFO_LIB_AMONT") + ) + ); + // all available basins, depending on current downstream basin + for (const b of preBarrageU.bassins) { + const pos = b.findPositionInParent(); + if (posDb === undefined || pos < posDb) { + this.addEntry( + new SelectEntry( + this._entriesBaseId + b.uid, + b.uid, + ServiceFactory.i18nService.localizeMessage(b.description) + ) + ); + } + } + } + + protected initSelectedValue() { + const ub = (this.nub as PbCloison).bassinAmont; + this.setValueFromId(this._entriesBaseId + (ub ? ub.uid : "none")); + } + + public get associatedProperty(): string { + return undefined; + } + + public get configDefaultValue(): string { + return undefined; + } +} \ No newline at end of file diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts new file mode 100644 index 000000000..c6e2024ed --- /dev/null +++ b/src/app/formulaire/elements/select/select-field.ts @@ -0,0 +1,268 @@ +import { Field } from "../field"; +import { SelectEntry } from "./select-entry"; +import { arraysAreEqual } from "../../../util"; +import { FormulaireNode } from "../formulaire-node"; +import { ServiceFactory } from "app/services/service-factory"; +import { FormulaireDefinition } from "../../definition/form-definition"; +import { Nub } from "jalhyd"; + +export abstract class SelectField extends Field { + + /** + * select options + */ + protected _entries: SelectEntry[]; + + /** + * currently selected option + */ + protected _selectedEntry: SelectEntry | SelectEntry[]; + + /** if true, user can select multiple values */ + protected _multiple = false; + + /** if true, select box is grayed out */ + public disabled = false; + + /** string to build the select entries IDs from */ + protected _entriesBaseId: string; + + /** name of the Nub property associated to this field, if any */ + protected _associatedProperty: string; + + /** default value (from configuration) for this field */ + protected _configDefaultValue: string; + + /** + * message to display below the select field when no option is selected, + * if this message is defined and not empty + */ + protected _messageWhenEmpty: string; + + constructor(parent: FormulaireNode) { + super(parent); + this.clearEntries(); + } + + /** + * associated nub + */ + protected get nub(): Nub { + return (this.parentForm as FormulaireDefinition).currentNub; + } + + public getValue(): SelectEntry | SelectEntry[] { + return this._selectedEntry; + } + + /** + * Updates _selectedEntry; notifies observers only if + * value.id has changed + */ + public setValue(v: SelectEntry | SelectEntry[]) { + // if multiple is true, value must be an array + if (this._multiple && !Array.isArray(v)) { + throw new Error("select value is not an array"); + } + + const previousSelectedEntry = this._selectedEntry; + this._selectedEntry = v; + + // if old and new values are not both undefined + if (!(previousSelectedEntry === undefined && v === undefined)) { + // if value changed + const valueChanged = ( + (previousSelectedEntry === undefined && v !== undefined) + || ( + !Array.isArray(previousSelectedEntry) + && !Array.isArray(v) + && previousSelectedEntry.id !== v.id + ) + || ( + Array.isArray(previousSelectedEntry) + && Array.isArray(v) + && !arraysAreEqual(previousSelectedEntry, v, "id", true) + ) + ); + if (valueChanged) { + this.notifyValueChanged(); + } + } + } + + public notifyValueChanged() { + this.notifyObservers({ + "action": "select", + "value": this._selectedEntry + }, this); + } + + /** + * Sets value from given entry id(s); if it was not found, sets the + * first available entry as selectedValue + */ + protected setValueFromId(id: string | string[]) { + let found = false; + const entries = []; + if (Array.isArray(id)) { + for (const e of this._entries) { + if (id.includes(e.id)) { + entries.push(e); + found = true; + } + } + this.setValue(entries); + } else { + for (const e of this._entries) { + if (e.id === id) { + found = true; + this.setValue(e); + } + } + } + if (!found) { + this.findAndSetDefaultValue(); + } + } + + /** + * try to find a default value to select + */ + protected findAndSetDefaultValue() { + // default to first available entry if any + if (this._entries.length > 0) { + if (this._multiple) { + this.setValue([this._entries[0]]); + } else { + this.setValue(this._entries[0]); + } + } else { + // notify observers that no value is selected anymore + this.notifyValueChanged(); + } + } + + public parseConfig(field: {}, data?: {}) { + this._confId = field["id"]; + this._entriesBaseId = this._confId + "_"; + this._helpLink = field["help"]; + this.afterParseConfig(); + } + + /** + * Once config is parsed, init original value from model + * (needs config for this._entriesBaseId to be set). + * Triggered at the end of parseConfig() + */ + protected afterParseConfig() { + this.populate(); + this.initSelectedValue(); + } + + /** + * fill select with options + */ + protected abstract populate(); + + /** + * initialise select (loads UI with the value held by the model) + */ + protected abstract initSelectedValue(); + + /** + * associated nub property + */ + public get associatedProperty(): string { + return this._associatedProperty; + } + + /** + * default value from configuration + */ + public get configDefaultValue(): string { + return this._configDefaultValue; + } + + private clearEntries() { + this._entries = []; + } + + public get entries() { + return this._entries; + } + + protected addEntry(e: SelectEntry) { + this._entries.push(e); + } + + public getEntryFromValue(val: any): SelectEntry { + for (const se of this._entries) { + if (se.value === val) { + return se; + } + } + } + + /** + * Reloads available entries, trying to keep the current selected + * value; does not notify observers if value did not change + */ + public updateEntries() { + // store previous selected entry + const pse = this._selectedEntry; + // empty + this.clearEntries(); + // populate + this.populate(); + this.updateLocalisation(); + // if no entry is available anymore, unset value + if (this._entries.length === 0) { + if (this._multiple) { + this.setValue([]); + } else { + this.setValue(undefined); + } + } else { + // keep previously selected entry(ies) if possible + if (pse) { + if (!Array.isArray(pse) && pse.id) { + this.setValueFromId(pse.id); + } else if (Array.isArray(pse) && pse.length > 0) { + this.setValueFromId(pse.map((e) => e.id)); + } else { + this.findAndSetDefaultValue(); + } + } else { + this.findAndSetDefaultValue(); + } + } + } + + public get entriesBaseId(): string { + return this._entriesBaseId; + } + + public get messageWhenEmpty(): string { + let msg: string; + if (this._selectedEntry === undefined && this._messageWhenEmpty) { + msg = ServiceFactory.i18nService.localizeText(this._messageWhenEmpty); + } + return msg; + } + + public get multiple(): boolean { + return this._multiple; + } + + public updateLocalisation() { + super.updateLocalisation(); + for (const e of this._entries) { + const aId = e.id.split("_"); + const trad = ServiceFactory.formulaireService.localizeText( + `${aId[1].toUpperCase()}_${aId[2]}`, + this.parentForm.currentNub.calcType + ); + e.label = trad; + } + } +} diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 4c9e42baa..83020d527 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -32,7 +32,7 @@ import { NotificationsService } from "./notifications.service"; import { FormulaireDefinition } from "../formulaire/definition/form-definition"; import { FormulaireElement } from "../formulaire/elements/formulaire-element"; import { InputField } from "../formulaire/elements/input-field"; -import { SelectField } from "../formulaire/elements/select-field"; +import { SelectField } from "../formulaire/elements/select/select-field"; import { FormulaireSectionParametree } from "../formulaire/definition/form-section-parametree"; import { FormulaireCourbeRemous } from "../formulaire/definition/form-courbe-remous"; import { FormulaireParallelStructure } from "../formulaire/definition/form-parallel-structures"; -- GitLab From faa6e21cc9e3f6a310fee8759ed222e89b680f03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 17 Oct 2022 14:14:43 +0200 Subject: [PATCH 006/285] refactor: select component: remove unused disabled flag refs #483 --- .../components/generic-select/generic-select.component.html | 3 +-- .../select-field-line/select-field-line.component.ts | 4 ---- src/app/formulaire/elements/select/select-field.ts | 3 --- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/app/components/generic-select/generic-select.component.html b/src/app/components/generic-select/generic-select.component.html index 7ce918d76..0a75a714e 100644 --- a/src/app/components/generic-select/generic-select.component.html +++ b/src/app/components/generic-select/generic-select.component.html @@ -1,6 +1,5 @@ <mat-form-field> - <mat-select [id]="selectId" [placeholder]="label" [(value)]="selectedValue" [multiple]="isMultiple" - [disabled]="isDisabled"> + <mat-select [id]="selectId" [placeholder]="label" [(value)]="selectedValue" [multiple]="isMultiple"> <mat-select-trigger *ngIf="isMultiple"> {{ selectedValue && selectedValue[0] ? entryLabel(selectedValue[0]) : '' }} <span *ngIf="selectedValue?.length > 1" class="multiple-selection-label"> diff --git a/src/app/components/select-field-line/select-field-line.component.ts b/src/app/components/select-field-line/select-field-line.component.ts index 2b8cb3a03..c6b2474a0 100644 --- a/src/app/components/select-field-line/select-field-line.component.ts +++ b/src/app/components/select-field-line/select-field-line.component.ts @@ -34,10 +34,6 @@ export class SelectFieldLineComponent implements OnInit { return this._select.multiple; } - public get isDisabled(): boolean { - return this._select.disabled; - } - public get entries(): SelectEntry[] { if (! this._select) { return []; diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index c6e2024ed..e90449882 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -21,9 +21,6 @@ export abstract class SelectField extends Field { /** if true, user can select multiple values */ protected _multiple = false; - /** if true, select box is grayed out */ - public disabled = false; - /** string to build the select entries IDs from */ protected _entriesBaseId: string; -- GitLab From 9a6ca6cfaf569f4b054f8449aac170a2c66d1ab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 17 Oct 2022 16:01:19 +0200 Subject: [PATCH 007/285] test(e2e): check that select default value from configuration is honored refs #483 --- e2e/select-default-value.e2e-spec.ts | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 e2e/select-default-value.e2e-spec.ts diff --git a/e2e/select-default-value.e2e-spec.ts b/e2e/select-default-value.e2e-spec.ts new file mode 100644 index 000000000..8796f19ac --- /dev/null +++ b/e2e/select-default-value.e2e-spec.ts @@ -0,0 +1,42 @@ +import { browser } from "protractor"; +import { CalculatorPage } from "./calculator.po"; +import { ListPage } from "./list.po"; +import { Navbar } from "./navbar.po"; +import { PreferencesPage } from "./preferences.po"; + +describe("check the select default value - ", () => { + let prefPage: PreferencesPage; + let listPage: ListPage; + let calcPage: CalculatorPage; + let navBar: Navbar; + + beforeAll(() => { + prefPage = new PreferencesPage(); + listPage = new ListPage(); + calcPage = new CalculatorPage(); + navBar = new Navbar(); + }); + + beforeEach(async () => { + // disable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await prefPage.disableEvilEmptyFields(); + await browser.sleep(200); + + await prefPage.changeLanguage(1); // fr + await browser.sleep(200); + }); + + it("in the 'backwater curve' calculator", async () => { + // open backwater curve calculator + await navBar.clickNewCalculatorButton(); + await listPage.clickMenuEntryForCalcType(4); + await browser.sleep(200); + + // in the calculator configuration file, the default resolution method is 'Trapezes'. + // let's check this... + const sel_section = calcPage.getSelectById("select_resolution"); + const val = await calcPage.getSelectValueText(sel_section); + expect(val).toBe("Intégration par trapèzes"); + }); +}); -- GitLab From bfdae695d130d2aecce8456da0597063a13f3d70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 18 Oct 2022 09:51:01 +0200 Subject: [PATCH 008/285] fix: select default from configuration value not honored refs #483 --- src/app/formulaire/elements/fieldset.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 4a67910e4..1190098be 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -309,8 +309,6 @@ export class FieldSet extends FormulaireElement implements Observer { } } } - - this.updateFields(); } public getNodeParameter(symbol: string): NgParameter { -- GitLab From f5eba4f51b651ce8f6ac61432b15a3ed9a91b51d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 17 Oct 2022 16:27:09 +0200 Subject: [PATCH 009/285] refactor: SelectFieldNubProperty: move configuration parsing out of constructor refs #483 --- src/app/formulaire/elements/fieldset.ts | 1 + .../formulaire/elements/select/select-field-factory.ts | 4 ++-- .../formulaire/elements/select/select-field-nub-prop.ts | 8 ++++++-- src/app/formulaire/elements/select/select-field.ts | 4 ++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 1190098be..89a696bf0 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -111,6 +111,7 @@ export class FieldSet extends FormulaireElement implements Observer { private parse_select(json: {}): SelectField { const res: SelectField = SelectFieldFactory.newSelectField(json, this); res.parseConfig(json); + res.afterParseConfig(); res.addObserver(this); return res; } diff --git a/src/app/formulaire/elements/select/select-field-factory.ts b/src/app/formulaire/elements/select/select-field-factory.ts index 38e8e7b49..c7ae60316 100644 --- a/src/app/formulaire/elements/select/select-field-factory.ts +++ b/src/app/formulaire/elements/select/select-field-factory.ts @@ -57,10 +57,10 @@ export class SelectFieldFactory { case "select_section": case "select_sppoperation": case "select_unit": - return new SelectFieldNubProperty(parent, json); + return new SelectFieldNubProperty(parent); default: throw new Error("unknown select id ${id}"); } } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field-nub-prop.ts b/src/app/formulaire/elements/select/select-field-nub-prop.ts index eca0463b3..df62610a8 100644 --- a/src/app/formulaire/elements/select/select-field-nub-prop.ts +++ b/src/app/formulaire/elements/select/select-field-nub-prop.ts @@ -15,8 +15,12 @@ import { SelectField } from "./select-field"; // nub property values taken from an enum // "standard" select that normally does not require customisation export class SelectFieldNubProperty extends SelectField { - constructor(parent: FormulaireNode, json: {}) { + constructor(parent: FormulaireNode) { super(parent); + } + + public parseConfig(json: {}, data?: {}) { + super.parseConfig(json, data); this._associatedProperty = json["property"]; this._configDefaultValue = json["default"]; } @@ -35,4 +39,4 @@ export class SelectFieldNubProperty extends SelectField { protected initSelectedValue() { this.findAndSetDefaultValue(); } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index e90449882..435d042f3 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -143,7 +143,7 @@ export abstract class SelectField extends Field { this._confId = field["id"]; this._entriesBaseId = this._confId + "_"; this._helpLink = field["help"]; - this.afterParseConfig(); + //this.afterParseConfig(); // done in FieldSet.parse_select() } /** @@ -151,7 +151,7 @@ export abstract class SelectField extends Field { * (needs config for this._entriesBaseId to be set). * Triggered at the end of parseConfig() */ - protected afterParseConfig() { + public afterParseConfig() { this.populate(); this.initSelectedValue(); } -- GitLab From 1930e4d61c838777bf245674f1d8bf69993eca4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 18 Oct 2022 17:19:50 +0200 Subject: [PATCH 010/285] refactor: calculator JSON configuration: remove selectIds, customSelectIds refs #483 --- src/app/calculators/bief/config.json | 1 - src/app/calculators/cloisons/config.json | 1 - src/app/calculators/courberemous/config.json | 1 - src/app/calculators/dever/config.json | 1 - src/app/calculators/espece/config.json | 1 - src/app/calculators/grille/config.json | 1 - src/app/calculators/lechaptcalmon/config.json | 1 - .../calculators/macrorugocompound/config.json | 1 - src/app/calculators/par/config.json | 1 - .../calculators/parallelstructure/config.json | 1 - src/app/calculators/parsimulation/config.json | 1 - src/app/calculators/prebarrage/config.json | 14 ----- .../calculators/regimeuniforme/config.json | 1 - .../calculators/sectionparametree/config.json | 1 - src/app/calculators/solveur/config.json | 2 - src/app/calculators/spp/config.json | 1 - src/app/calculators/trigo/config.json | 1 - src/app/calculators/verificateur/config.json | 2 - .../formulaire/definition/form-definition.ts | 8 +++ .../formulaire/definition/form-fixedvar.ts | 34 ++----------- src/app/formulaire/elements/fieldset.ts | 51 +++++++++---------- .../select/select-field-device-loi-debit.ts | 16 +++--- .../select-field-device-structure-type.ts | 16 +++--- .../select/select-field-downstream-basin.ts | 8 --- .../select/select-field-remous-target.ts | 16 +++--- .../select/select-field-searched-param.ts | 8 --- .../select-field-solver-targeted-result.ts | 15 +++--- .../select/select-field-solveur-target.ts | 10 +--- .../select/select-field-species-list.ts | 10 +--- .../select/select-field-target-pass.ts | 10 +--- .../select/select-field-upstream-basin.ts | 10 +--- .../elements/select/select-field.ts | 7 +++ .../deep-selectfield-iterator.ts | 19 +++++++ 33 files changed, 91 insertions(+), 180 deletions(-) create mode 100644 src/app/formulaire/form-iterator/deep-selectfield-iterator.ts diff --git a/src/app/calculators/bief/config.json b/src/app/calculators/bief/config.json index 7434f2abc..584efa828 100644 --- a/src/app/calculators/bief/config.json +++ b/src/app/calculators/bief/config.json @@ -69,7 +69,6 @@ { "type": "options", "defaultNodeType": "SectionRectangle", - "selectIds": [ "select_section", "select_regime" ], "help": "hsl/cote_amont_aval.html" } ] diff --git a/src/app/calculators/cloisons/config.json b/src/app/calculators/cloisons/config.json index 2423ef4bc..e3b2a662d 100644 --- a/src/app/calculators/cloisons/config.json +++ b/src/app/calculators/cloisons/config.json @@ -61,7 +61,6 @@ }, { "type": "options", - "selectIds": [ "select_structure", "select_loidebit" ], "help": "pab/cloisons.html" } ] diff --git a/src/app/calculators/courberemous/config.json b/src/app/calculators/courberemous/config.json index b66d709bb..30bab2879 100644 --- a/src/app/calculators/courberemous/config.json +++ b/src/app/calculators/courberemous/config.json @@ -96,7 +96,6 @@ { "type": "options", "defaultNodeType": "SectionRectangle", - "selectIds": [ "select_resolution", "select_section", "select_target" ], "help": "hsl/courbe_remous.html", "resultsHelp": { "B": "hsl/section_parametree.html#largeur-au-miroir-surface-et-perimetre-mouille", diff --git a/src/app/calculators/dever/config.json b/src/app/calculators/dever/config.json index 6b502f27a..69188b972 100644 --- a/src/app/calculators/dever/config.json +++ b/src/app/calculators/dever/config.json @@ -51,7 +51,6 @@ }, { "type": "options", - "selectIds": [ "select_structure", "select_loidebit" ], "help": "structures/dever.html" } ] \ No newline at end of file diff --git a/src/app/calculators/espece/config.json b/src/app/calculators/espece/config.json index 1b6185a5e..71a6f42f7 100644 --- a/src/app/calculators/espece/config.json +++ b/src/app/calculators/espece/config.json @@ -94,7 +94,6 @@ { "type": "options", "help": "verif/especes_predefinies.html", - "selectIds": [ "select_divingjetsupported" ], "calculateDisabled": true } ] diff --git a/src/app/calculators/grille/config.json b/src/app/calculators/grille/config.json index e964fa9e3..b01502d19 100644 --- a/src/app/calculators/grille/config.json +++ b/src/app/calculators/grille/config.json @@ -96,7 +96,6 @@ }, { "type": "options", - "selectIds": [ "select_gridtype", "select_gridprofile" ], "help": "devalaison/grille.html", "resultsHelp": { "VAPDG": "devalaison/grille.html#vitesse-dapproche-moyenne-pour-le-debit-maximum-turbine-en-soustrayant-la-partie-superieure-eventuellement-obturee", diff --git a/src/app/calculators/lechaptcalmon/config.json b/src/app/calculators/lechaptcalmon/config.json index 431552de8..d655d5ca3 100644 --- a/src/app/calculators/lechaptcalmon/config.json +++ b/src/app/calculators/lechaptcalmon/config.json @@ -28,7 +28,6 @@ }, { "type": "options", - "selectIds": [ "select_material" ], "help": "hyd_en_charge/lechapt-calmon.html" } ] \ No newline at end of file diff --git a/src/app/calculators/macrorugocompound/config.json b/src/app/calculators/macrorugocompound/config.json index 8df7adca3..79290dc66 100644 --- a/src/app/calculators/macrorugocompound/config.json +++ b/src/app/calculators/macrorugocompound/config.json @@ -78,7 +78,6 @@ }, { "type": "options", - "selectIds": [ "select_passtype" ], "help": "pam/macrorugo_complexe.html" } ] diff --git a/src/app/calculators/par/config.json b/src/app/calculators/par/config.json index dc6fcb41e..c7ba05c46 100644 --- a/src/app/calculators/par/config.json +++ b/src/app/calculators/par/config.json @@ -38,7 +38,6 @@ }, { "type": "options", - "selectIds": [ "select_partype" ], "help": "par/calage.html" } ] diff --git a/src/app/calculators/parallelstructure/config.json b/src/app/calculators/parallelstructure/config.json index d265d9a66..87ef99908 100644 --- a/src/app/calculators/parallelstructure/config.json +++ b/src/app/calculators/parallelstructure/config.json @@ -74,7 +74,6 @@ }, { "type": "options", - "selectIds": [ "select_structure", "select_loidebit" ], "help": "structures/lois_ouvrages.html", "resultsHelp": { "ENUM_StructureJetType": "structures/lois_ouvrages.html#type-de-jet" diff --git a/src/app/calculators/parsimulation/config.json b/src/app/calculators/parsimulation/config.json index a5cb2c9de..810625bf6 100644 --- a/src/app/calculators/parsimulation/config.json +++ b/src/app/calculators/parsimulation/config.json @@ -54,7 +54,6 @@ }, { "type": "options", - "selectIds": [ "select_partype" ], "help": "par/simulation.html" } ] diff --git a/src/app/calculators/prebarrage/config.json b/src/app/calculators/prebarrage/config.json index 1b0431549..406711a5e 100644 --- a/src/app/calculators/prebarrage/config.json +++ b/src/app/calculators/prebarrage/config.json @@ -15,10 +15,6 @@ "Z1", "Z2" ] - }, - { - "type": "options", - "selectIds": [ ] } ] }, @@ -41,10 +37,6 @@ "templates": [ "fs_basin" ] - }, - { - "type": "options", - "selectIds": [ ] } ] }, @@ -181,17 +173,11 @@ "templates": [ "fs_ouvrage" ] - }, - { - "type": "options", - "selectIds": [ "select_structure", "select_loidebit" ], - "customSelectIds": [ "select_upstream_basin", "select_downstream_basin" ] } ] }, { "type": "options", - "selectIds": [ ], "upstreamSelectId": "select_upstream", "downstreamSelectId": "select_downstream", "help": "pab/prebarrage.html" diff --git a/src/app/calculators/regimeuniforme/config.json b/src/app/calculators/regimeuniforme/config.json index 14a3239ef..171dc0139 100644 --- a/src/app/calculators/regimeuniforme/config.json +++ b/src/app/calculators/regimeuniforme/config.json @@ -50,7 +50,6 @@ { "type": "options", "defaultNodeType": "SectionRectangle", - "selectIds": [ "select_section" ], "help": "hsl/regime_uniforme.html", "resultsHelp": { "V": "hsl/section_parametree.html#la-vitesse-moyenne-ms" diff --git a/src/app/calculators/sectionparametree/config.json b/src/app/calculators/sectionparametree/config.json index f24b88ca8..4e4ce5e28 100644 --- a/src/app/calculators/sectionparametree/config.json +++ b/src/app/calculators/sectionparametree/config.json @@ -50,7 +50,6 @@ { "type": "options", "defaultNodeType": "SectionRectangle", - "selectIds": [ "select_section" ], "help": "hsl/section_parametree.html", "resultsHelp": { "B": "hsl/section_parametree.html#largeur-au-miroir-surface-et-perimetre-mouille", diff --git a/src/app/calculators/solveur/config.json b/src/app/calculators/solveur/config.json index 99d215264..9c0fd2b31 100644 --- a/src/app/calculators/solveur/config.json +++ b/src/app/calculators/solveur/config.json @@ -27,8 +27,6 @@ }, { "type": "options", - "selectIds": [ "select_target_result" ], - "customSelectIds": [ "select_target_nub", "select_searched_param" ], "targettedResultSelectId": "select_target_result", "help": "maths/solver.html" } diff --git a/src/app/calculators/spp/config.json b/src/app/calculators/spp/config.json index 8506d7c73..e28d38ff8 100644 --- a/src/app/calculators/spp/config.json +++ b/src/app/calculators/spp/config.json @@ -31,7 +31,6 @@ }, { "type": "options", - "selectIds": [ "select_sppoperation" ], "help": "maths/operators.html#somme-et-produit-de-puissances" } ] \ No newline at end of file diff --git a/src/app/calculators/trigo/config.json b/src/app/calculators/trigo/config.json index 3b9f5d97a..264fe9299 100644 --- a/src/app/calculators/trigo/config.json +++ b/src/app/calculators/trigo/config.json @@ -24,7 +24,6 @@ }, { "type": "options", - "selectIds": [ "select_operation", "select_unit" ], "help": "maths/operators.html#fonction-trigonometrique" } ] \ No newline at end of file diff --git a/src/app/calculators/verificateur/config.json b/src/app/calculators/verificateur/config.json index 07f6f672c..7faef08de 100644 --- a/src/app/calculators/verificateur/config.json +++ b/src/app/calculators/verificateur/config.json @@ -21,8 +21,6 @@ }, { "type": "options", - "selectIds": [ "select_pab_jet_type" ], - "customSelectIds": [ "select_target_pass", "select_species_list" ], "help": "verif/principe.html" } ] diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index cc5837883..bcf6eef68 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -26,6 +26,7 @@ import { ServiceFactory } from "../../services/service-factory"; import { PabTable } from "../elements/pab-table"; import { SelectEntry } from "../elements/select/select-entry"; import { SelectField } from "../elements/select/select-field"; +import { DeepSelectFieldIterator } from "../form-iterator/deep-selectfield-iterator"; /** * classe de base pour tous les formulaires @@ -410,6 +411,13 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs return new TopFormulaireElementIterator(this); } + /** + * itère sur tous les SelectField + */ + public get allSelectFields(): IterableIterator<SelectField> { + return new DeepSelectFieldIterator(this); + } + // interface Observer public update(sender: any, data: any) { diff --git a/src/app/formulaire/definition/form-fixedvar.ts b/src/app/formulaire/definition/form-fixedvar.ts index 9289094a7..0a329f489 100644 --- a/src/app/formulaire/definition/form-fixedvar.ts +++ b/src/app/formulaire/definition/form-fixedvar.ts @@ -14,12 +14,6 @@ export class FormulaireFixedVar extends FormulaireDefinition { protected _fixedResults: FixedResults; protected _varResults: VarResults; - /** ids of select fields */ - private _selectIds: string[] = []; - - /** ids of "custom" select fields */ - private _customSelectIds: string[] = []; - constructor(parent?: FormulaireNode) { super(parent); this._fixedResults = new FixedResults(); @@ -31,10 +25,6 @@ export class FormulaireFixedVar extends FormulaireDefinition { return this._fixedResults; } - public get selectids(): string[] { - return this._selectIds; - } - public resetFormResults() { this._fixedResults.reset(); this._varResults.reset(); @@ -73,24 +63,14 @@ export class FormulaireFixedVar extends FormulaireDefinition { public afterParseFieldset(fs: FieldSet) { // observe all Select fields @see this.update() - if (this._selectIds.length > 0) { - for (const sId of this._selectIds) { - const sel = fs.getFormulaireNodeById(sId); - if (sel) { - // Formulaire is listening to FieldSet properties (@TODO why not directly Select ?) - fs.properties.addObserver(this); - } - } - } + fs.properties.addObserver(this); } protected completeParse(firstNotif: boolean = true) { super.completeParse(firstNotif); // observe all CustomSelect fields @TODO move to afterParseFieldset ? - if (this._customSelectIds.length > 0) { - for (const csId of this._customSelectIds) { - const sel = this.getFormulaireNodeById(csId); - // Formulaire is listening to Select value + for (const sel of this.allSelectFields) { // Formulaire is listening to Select value + if (!sel.hasAssociatedNubProperty) { // only to "custom" selects sel.addObserver(this); if (firstNotif) { // force 1st observation @@ -100,14 +80,6 @@ export class FormulaireFixedVar extends FormulaireDefinition { } } - protected parseOptions(json: {}) { - super.parseOptions(json); - // get ids of all select fields - this._selectIds = this.getOption(json, "selectIds") || []; - // get ids of all "custom" select fields - this._customSelectIds = this.getOption(json, "customSelectIds") || []; - } - protected compute() { this.runNubCalc(this.currentNub); this.refreshFieldsets(); // important: before reaffectResultComponents() or it will break results components localization diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 89a696bf0..e5fbca7d7 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -15,8 +15,6 @@ import { FieldsetContainer } from "./fieldset-container"; import { SelectFieldFactory } from "./select/select-field-factory"; import { FormulaireFixedVar } from "../definition/form-fixedvar"; import { SelectEntry } from "./select/select-entry"; -import { FormulaireNode } from "./formulaire-node"; -import { ServiceFactory } from "app/services/service-factory"; export class FieldSet extends FormulaireElement implements Observer { @@ -237,9 +235,10 @@ export class FieldSet extends FormulaireElement implements Observer { // for all select fields known by the form, set selected value // from associated property if (this.parentForm instanceof FormulaireFixedVar) { - const selectIds = this.parentForm.selectids; - for (const sId of selectIds) { - this.setSelectValueFromProperty(sId, (this._confId === "fs_section")); + for (const sel of this.parentForm.allSelectFields) { + if (sel.hasAssociatedNubProperty) { // ie. if select is a standard select + this.setSelectValueFromProperty(sel.id, (this._confId === "fs_section")); + } } } } @@ -289,13 +288,10 @@ export class FieldSet extends FormulaireElement implements Observer { // for all select fields known by the form, apply default value // to associated property, usually from associated enum if (this.parentForm instanceof FormulaireFixedVar) { - const selectIds = this.parentForm.selectids; - for (const sId of selectIds) { - // find select element in parent form - const fe = this.getFormulaireNodeById(sId); - if (fe) { - const prop = (fe as SelectField).associatedProperty; - const defaultValue = (fe as SelectField).configDefaultValue; + for (const sel of this.parentForm.allSelectFields) { + if (sel.hasAssociatedNubProperty) { // ie. if select is a standard select + const prop = sel.associatedProperty; + const defaultValue = sel.configDefaultValue; // Sets Nub default property, unless this property is already set const currentValue = this.properties.getPropValue(prop); if (defaultValue !== undefined && currentValue === undefined) { @@ -379,28 +375,27 @@ export class FieldSet extends FormulaireElement implements Observer { }); } } else { - if (this.parentForm instanceof FormulaireFixedVar) { - // for all select fields known by the form, apply received value - // to associated property - const selectIds = this.parentForm.selectids; - for (const sId of selectIds) { - if (senderId === sId) { - // find select element in parent form - const fe = this.parentForm.getFieldById(sId); - if (fe && data.value !== undefined) { - const prop = (fe as SelectField).associatedProperty; - // for multiple select - if (Array.isArray(data.value)) { - this.setNubPropValue(prop, data.value.map((v: any) => v.value)); - } else { - this.setNubPropValue(prop, data.value.value); + if (data.value !== undefined) { + if (this.parentForm instanceof FormulaireFixedVar) { + // for all select fields known by the form, apply received value + // to associated property + for (const sel of this.parentForm.allSelectFields) { + if (senderId === sel.id) { + // find select element in parent form + if (sel.hasAssociatedNubProperty) { // if select is a standard select + const prop = sel.associatedProperty; + // for multiple select + if (Array.isArray(data.value)) { + this.setNubPropValue(prop, data.value.map((v: any) => v.value)); + } else { + this.setNubPropValue(prop, data.value.value); + } } } } } } } - break; // switch (data.action) } } diff --git a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts index 15194174f..6a9c86e7c 100644 --- a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts +++ b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts @@ -1,6 +1,7 @@ import { LoiDebit, ParallelStructure, StructureProperties, StructureType } from "jalhyd"; import { SelectField } from "./select-field"; import { SelectEntry } from "./select-entry"; +import { FormulaireNode } from "../formulaire-node"; /* "id": "select_loidebit", @@ -11,6 +12,11 @@ import { SelectEntry } from "./select-entry"; */ export class SelectFieldDeviceLoiDebit extends SelectField { + constructor(parent: FormulaireNode) { + super(parent); + this._associatedProperty = "loiDebit"; + } + protected populate() { // possible values depend on CalcType @@ -31,12 +37,4 @@ export class SelectFieldDeviceLoiDebit extends SelectField { protected initSelectedValue() { this.findAndSetDefaultValue(); } - - public get associatedProperty(): string { - return "loiDebit"; - } - - public get configDefaultValue(): string { - return undefined; - } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field-device-structure-type.ts b/src/app/formulaire/elements/select/select-field-device-structure-type.ts index b818eedf5..0210eb1b7 100644 --- a/src/app/formulaire/elements/select/select-field-device-structure-type.ts +++ b/src/app/formulaire/elements/select/select-field-device-structure-type.ts @@ -1,6 +1,7 @@ import { ParallelStructure, StructureType } from "jalhyd"; import { SelectField } from "./select-field"; import { SelectEntry } from "./select-entry"; +import { FormulaireNode } from "../formulaire-node"; /* "id": "select_structure", @@ -10,6 +11,11 @@ import { SelectEntry } from "./select-entry"; */ export class SelectFieldDeviceStructureType extends SelectField { + constructor(parent: FormulaireNode) { + super(parent); + this._associatedProperty = "structureType"; + } + protected populate() { // possible values depend on CalcType for (const st in (this.nub as ParallelStructure).getLoisAdmissibles()) { @@ -21,12 +27,4 @@ export class SelectFieldDeviceStructureType extends SelectField { protected initSelectedValue() { this.findAndSetDefaultValue(); } - - public get associatedProperty(): string { - return "structureType"; - } - - public get configDefaultValue(): string { - return undefined; - } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field-downstream-basin.ts b/src/app/formulaire/elements/select/select-field-downstream-basin.ts index 77fcab4bd..05675917d 100644 --- a/src/app/formulaire/elements/select/select-field-downstream-basin.ts +++ b/src/app/formulaire/elements/select/select-field-downstream-basin.ts @@ -42,12 +42,4 @@ export class SelectFieldDownstreamBasin extends SelectField { const db = (this.nub as PbCloison).bassinAval; this.setValueFromId(this._entriesBaseId + (db ? db.uid : "none")); } - - public get associatedProperty(): string { - return undefined; - } - - public get configDefaultValue(): string { - return undefined; - } } diff --git a/src/app/formulaire/elements/select/select-field-remous-target.ts b/src/app/formulaire/elements/select/select-field-remous-target.ts index 6d0f2c506..20b40cc47 100644 --- a/src/app/formulaire/elements/select/select-field-remous-target.ts +++ b/src/app/formulaire/elements/select/select-field-remous-target.ts @@ -1,6 +1,7 @@ import { CourbeRemous } from "jalhyd"; import { SelectField } from "./select-field"; import { SelectEntry } from "./select-entry"; +import { FormulaireNode } from "../formulaire-node"; /* "id": "select_target", @@ -11,6 +12,11 @@ import { SelectEntry } from "./select-entry"; */ export class SelectFieldRemousTarget extends SelectField { + constructor(parent: FormulaireNode) { + super(parent); + this._associatedProperty = "varCalc"; + } + protected populate() { // driven by string[], not enum (easier for variable names) this.addEntry(new SelectEntry(this._entriesBaseId + "none", "")); @@ -23,12 +29,4 @@ export class SelectFieldRemousTarget extends SelectField { protected initSelectedValue() { this.findAndSetDefaultValue(); } - - public get associatedProperty(): string { - return "varCalc"; - } - - public get configDefaultValue(): string { - return undefined; - } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field-searched-param.ts b/src/app/formulaire/elements/select/select-field-searched-param.ts index 5380e1238..1342fb643 100644 --- a/src/app/formulaire/elements/select/select-field-searched-param.ts +++ b/src/app/formulaire/elements/select/select-field-searched-param.ts @@ -48,14 +48,6 @@ export class SelectFieldSearchedParam extends SelectField { } } - public get associatedProperty(): string { - return undefined; - } - - public get configDefaultValue(): string { - return undefined; - } - public updateLocalisation() { // do not override localisation done in populate() // ie. avoid what is done by SelectField.updateLocalisation() diff --git a/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts b/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts index 2b10da827..a547bde3c 100644 --- a/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts +++ b/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts @@ -4,6 +4,7 @@ import { Nub, Solveur } from "jalhyd"; import { FormulaireElement } from "../formulaire-element"; import { SelectField } from "./select-field"; import { SelectEntry } from "./select-entry"; +import { FormulaireNode } from "../formulaire-node"; /* "id": "select_target_result", @@ -13,6 +14,10 @@ import { SelectEntry } from "./select-entry"; "default": "" */ export class SelectFieldSolverTargetedResult extends SelectField { + constructor(parent: FormulaireNode) { + super(parent); + this._associatedProperty = "targettedResult"; + } protected populate() { // @WARNING for localisation, @see hack in this.updateLocalisation() @@ -34,14 +39,6 @@ export class SelectFieldSolverTargetedResult extends SelectField { this.findAndSetDefaultValue(); } - public get configDefaultValue(): string { - return ""; - } - - public get associatedProperty(): string { - return "targettedResult"; - } - public updateLocalisation() { FormulaireElement.prototype.updateLocalisation.call(this); for (const e of this._entries) { @@ -61,4 +58,4 @@ export class SelectFieldSolverTargetedResult extends SelectField { } } } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field-solveur-target.ts b/src/app/formulaire/elements/select/select-field-solveur-target.ts index 64d37dc33..aecd238b8 100644 --- a/src/app/formulaire/elements/select/select-field-solveur-target.ts +++ b/src/app/formulaire/elements/select/select-field-solveur-target.ts @@ -47,16 +47,8 @@ export class SelectFieldSolverTarget extends SelectField { } } - public get associatedProperty(): string { - return undefined; - } - - public get configDefaultValue(): string { - return undefined; - } - public updateLocalisation() { // do not override localisation done in populate() // ie. avoid what is done by SelectField.updateLocalisation() } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field-species-list.ts b/src/app/formulaire/elements/select/select-field-species-list.ts index bcdbbee79..602a56854 100644 --- a/src/app/formulaire/elements/select/select-field-species-list.ts +++ b/src/app/formulaire/elements/select/select-field-species-list.ts @@ -58,16 +58,8 @@ export class SelectFieldSpeciesList extends SelectField { } } - public get associatedProperty(): string { - return undefined; - } - - public get configDefaultValue(): string { - return undefined; - } - public updateLocalisation() { // do not override localisation done in populate() // ie. avoid what is done by SelectField.updateLocalisation() } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field-target-pass.ts b/src/app/formulaire/elements/select/select-field-target-pass.ts index 36430d217..10cd639a1 100644 --- a/src/app/formulaire/elements/select/select-field-target-pass.ts +++ b/src/app/formulaire/elements/select/select-field-target-pass.ts @@ -47,16 +47,8 @@ export class SelectFieldTargetPass extends SelectField { } } - public get associatedProperty(): string { - return undefined; - } - - public get configDefaultValue(): string { - return undefined; - } - public updateLocalisation() { // do not override localisation done in populate() // ie. avoid what is done by SelectField.updateLocalisation() } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field-upstream-basin.ts b/src/app/formulaire/elements/select/select-field-upstream-basin.ts index 06e335f5c..0eeb6b605 100644 --- a/src/app/formulaire/elements/select/select-field-upstream-basin.ts +++ b/src/app/formulaire/elements/select/select-field-upstream-basin.ts @@ -42,12 +42,4 @@ export class SelectFieldUpstreamBasin extends SelectField { const ub = (this.nub as PbCloison).bassinAmont; this.setValueFromId(this._entriesBaseId + (ub ? ub.uid : "none")); } - - public get associatedProperty(): string { - return undefined; - } - - public get configDefaultValue(): string { - return undefined; - } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index 435d042f3..f67c07404 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -173,6 +173,13 @@ export abstract class SelectField extends Field { return this._associatedProperty; } + /** + * @returns true if select field is associated to a nub property + */ + public get hasAssociatedNubProperty(): boolean { + return this._associatedProperty !== undefined; + } + /** * default value from configuration */ diff --git a/src/app/formulaire/form-iterator/deep-selectfield-iterator.ts b/src/app/formulaire/form-iterator/deep-selectfield-iterator.ts new file mode 100644 index 000000000..6c8547543 --- /dev/null +++ b/src/app/formulaire/form-iterator/deep-selectfield-iterator.ts @@ -0,0 +1,19 @@ +import { AbstractFormulaireNodeIterator } from "./abstract-node-iterator"; +import { FormulaireNode } from "../elements/formulaire-node"; +import { SelectField } from "../elements/select/select-field"; + +/** + * itérateur qui extrait récursivement les SelectField dans un tableau de FormulaireElement + * (qui peut contenir des FieldsetContainer) + */ +export class DeepSelectFieldIterator extends AbstractFormulaireNodeIterator<SelectField> implements IterableIterator<SelectField> { + protected isIterable(fe: FormulaireNode) { + return fe instanceof SelectField; + } + + // interface IterableIterator + + [Symbol.iterator](): IterableIterator<SelectField> { + return this; + } +} -- GitLab From 2ef065a418a1fbb812ff0faaaa8991edebb0e524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 19 Oct 2022 17:50:32 +0200 Subject: [PATCH 011/285] refactor: use SelectField derived model for chart type component refs #483 --- .../results-chart/chart-type.component.ts | 80 ++++++++----------- .../results-chart/results-chart.component.ts | 9 ++- .../elements/select/select-field-charttype.ts | 53 ++++++++++++ 3 files changed, 91 insertions(+), 51 deletions(-) create mode 100644 src/app/formulaire/elements/select/select-field-charttype.ts diff --git a/src/app/components/results-chart/chart-type.component.ts b/src/app/components/results-chart/chart-type.component.ts index 6ba573a91..39839c3a9 100644 --- a/src/app/components/results-chart/chart-type.component.ts +++ b/src/app/components/results-chart/chart-type.component.ts @@ -1,7 +1,10 @@ import { Component } from "@angular/core"; -import { Observable, IObservable, Observer } from "jalhyd"; +import { IObservable, Observer } from "jalhyd"; import { I18nService } from "../../services/internationalisation.service"; import { ChartType } from "../../results/chart-type"; +import { SelectFieldChartType } from "app/formulaire/elements/select/select-field-charttype"; +import { SelectEntry } from "app/formulaire/elements/select/select-entry"; +import { decodeHtml } from "../../util"; @Component({ selector: "chart-type", @@ -11,53 +14,46 @@ import { ChartType } from "../../results/chart-type"; ] }) export class ChartTypeSelectComponent implements IObservable { - private _entries: ChartType[] = [ ChartType.Histogram, ChartType.Dots, ChartType.Scatter ]; - private _entriesLabels: string[] = []; - private _selected: ChartType; - - private _observable: Observable; - - public get selectId() { - return "chart-type"; // for generic select component - } + private _select: SelectFieldChartType; constructor(private intlService: I18nService) { - this._observable = new Observable(); - this._entriesLabels = [ - this.intlService.localizeText("INFO_PARAMFIELD_CHART_TYPE_HISTOGRAM"), - this.intlService.localizeText("INFO_PARAMFIELD_CHART_TYPE_DOTS"), - "XY" - ]; + this._select = new SelectFieldChartType(undefined, this.intlService); + this._select.afterParseConfig(); // fill entries, set default value + this._select.updateEntries(); } public get entries(): ChartType[] { - return this._entries; + return this._select.entryValues; } - protected entryLabel(entry: ChartType): string { - const i = this._entries.indexOf(entry); - return this._entriesLabels[i]; + public entryLabel(ct: ChartType): string { + const entry = this._select.getEntryFromValue(ct); + return decodeHtml(entry.label); } public get selectedValue(): ChartType { - return this._selected; + const val = this._select.getValue() as SelectEntry; + return val.value; } - public set selectedValue(v: ChartType) { - if (this._selected !== v) { - this._selected = v; - this.notifyObservers({ - "action": "graphTypeChanged", - "value": v - }, this); - } + public set selectedValue(ct: ChartType) { + const entry = this._select.getEntryFromValue(ct); + this._select.setValue(entry); } - public get isMultiple(): boolean { - return false; + public get selectId() { + return this._select.id; } - public get isDisabled(): boolean { + public get label(): string { + return this._select.label; + } + + public get messageWhenEmpty(): string { + return this._select.messageWhenEmpty; + } + + public get enableHelpButton(): boolean { return false; } @@ -65,8 +61,8 @@ export class ChartTypeSelectComponent implements IObservable { return false; } - public get label() { - return this.intlService.localizeText("INFO_PARAMFIELD_CHART_TYPE"); + public get isMultiple(): boolean { + return this._select.multiple; } // interface IObservable @@ -75,30 +71,20 @@ export class ChartTypeSelectComponent implements IObservable { * ajoute un observateur à la liste */ addObserver(o: Observer) { - this._observable.addObserver(o); + this._select.addObserver(o); } /** * supprime un observateur de la liste */ removeObserver(o: Observer) { - this._observable.removeObserver(o); + this._select.removeObserver(o); } /** * notifie un événement aux observateurs */ notifyObservers(data: any, sender?: any) { - this._observable.notifyObservers(data, sender); - } - - // implemented because of generic template - public get enableHelpButton() { - return false; - } - - // implemented because of generic template - public get messageWhenEmpty(): string { - return undefined; + this._select.notifyObservers(data, sender); } } diff --git a/src/app/components/results-chart/results-chart.component.ts b/src/app/components/results-chart/results-chart.component.ts index bb0c86a01..0b33967f3 100644 --- a/src/app/components/results-chart/results-chart.component.ts +++ b/src/app/components/results-chart/results-chart.component.ts @@ -1,6 +1,6 @@ import { Component, ViewChild, AfterContentInit, ChangeDetectorRef, Input, OnChanges } from "@angular/core"; -import { BaseChartDirective, NgChartsModule } from "ng2-charts"; +import { BaseChartDirective } from "ng2-charts"; import { Observer, ParamFamily, Result } from "jalhyd"; @@ -16,6 +16,7 @@ import { AppComponent } from "../../app.component"; import zoomPlugin from 'chartjs-plugin-zoom'; import { Chart } from "chart.js"; +import { SelectFieldChartType } from "app/formulaire/elements/select/select-field-charttype"; @Component({ selector: "results-chart", @@ -495,9 +496,9 @@ export class ResultsChartComponent extends ResultsComponentDirective implements // interface Observer update(sender: any, data: any) { - if (sender instanceof ChartTypeSelectComponent) { - if (data.action === "graphTypeChanged") { - this._results.chartType = data.value; + if (sender instanceof SelectFieldChartType) { + if (data.action === "select") { + this._results.chartType = data.value.value; } } this.drawChart(); diff --git a/src/app/formulaire/elements/select/select-field-charttype.ts b/src/app/formulaire/elements/select/select-field-charttype.ts new file mode 100644 index 000000000..b6f35d3f9 --- /dev/null +++ b/src/app/formulaire/elements/select/select-field-charttype.ts @@ -0,0 +1,53 @@ +import { ChartType } from "app/results/chart-type"; +import { I18nService } from "app/services/internationalisation.service"; +import { FormulaireNode } from "../formulaire-node"; +import { SelectEntry } from "./select-entry"; +import { SelectField } from "./select-field"; + +export class SelectFieldChartType extends SelectField { + private _entryValues: ChartType[] = [ChartType.Histogram, ChartType.Dots, ChartType.Scatter]; + + constructor(parent: FormulaireNode, private intlService: I18nService) { + super(parent); + this._confId = "chart-type"; + this._multiple = false; + } + + public get entryValues(): ChartType[] { + return this._entryValues; + } + + protected populate() { + for (const v of this._entryValues) { + const id: string = ChartType[v]; + this.addEntry(new SelectEntry(id, v)); + } + } + + protected initSelectedValue() { + this.findAndSetDefaultValue(); + } + + public updateLocalisation() { + for (const e of this._entries) { + switch (e.value) { + case ChartType.Histogram: + e.label = this.intlService.localizeText("INFO_PARAMFIELD_CHART_TYPE_HISTOGRAM"); + break; + + case ChartType.Dots: + e.label = this.intlService.localizeText("INFO_PARAMFIELD_CHART_TYPE_DOTS"); + break; + + case ChartType.Scatter: + e.label = "XY"; + break; + + default: + throw new Error("SelectFieldChartType localisation not properly defined"); + } + } + + this._label = this.intlService.localizeText("INFO_PARAMFIELD_CHART_TYPE"); + } +} \ No newline at end of file -- GitLab From cd000992a4b9d2e49393274042e3d7eb7348ea23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 27 Oct 2022 10:58:59 +0200 Subject: [PATCH 012/285] refactor: calculator configuration: remove defaultNodeType property refs #483 --- src/app/calculators/bief/config.json | 2 +- src/app/calculators/courberemous/config.json | 2 +- .../calculators/regimeuniforme/config.json | 2 +- .../calculators/sectionparametree/config.json | 2 +- .../formulaire/definition/config-parser.ts | 41 +++++++++++++++++++ .../formulaire/definition/form-definition.ts | 32 ++++++++++++--- .../definition/form-parallel-structures.ts | 1 - .../formulaire/elements/fieldset-template.ts | 5 --- 8 files changed, 71 insertions(+), 16 deletions(-) create mode 100644 src/app/formulaire/definition/config-parser.ts diff --git a/src/app/calculators/bief/config.json b/src/app/calculators/bief/config.json index 584efa828..4c486031c 100644 --- a/src/app/calculators/bief/config.json +++ b/src/app/calculators/bief/config.json @@ -19,6 +19,7 @@ "id": "select_section", "type": "select", "property": "nodeType", + "default": "SectionRectangle", "help": { "1": "hsl/types_sections.html#section-rectangulaire", "0": "hsl/types_sections.html#section-circulaire", @@ -68,7 +69,6 @@ }, { "type": "options", - "defaultNodeType": "SectionRectangle", "help": "hsl/cote_amont_aval.html" } ] diff --git a/src/app/calculators/courberemous/config.json b/src/app/calculators/courberemous/config.json index 30bab2879..d1682af8b 100644 --- a/src/app/calculators/courberemous/config.json +++ b/src/app/calculators/courberemous/config.json @@ -7,6 +7,7 @@ "id": "select_section", "type": "select", "property": "nodeType", + "default": "SectionRectangle", "help": { "1": "hsl/types_sections.html#section-rectangulaire", "0": "hsl/types_sections.html#section-circulaire", @@ -95,7 +96,6 @@ }, { "type": "options", - "defaultNodeType": "SectionRectangle", "help": "hsl/courbe_remous.html", "resultsHelp": { "B": "hsl/section_parametree.html#largeur-au-miroir-surface-et-perimetre-mouille", diff --git a/src/app/calculators/regimeuniforme/config.json b/src/app/calculators/regimeuniforme/config.json index 171dc0139..c51679f69 100644 --- a/src/app/calculators/regimeuniforme/config.json +++ b/src/app/calculators/regimeuniforme/config.json @@ -7,6 +7,7 @@ "id": "select_section", "type": "select", "property": "nodeType", + "default": "SectionRectangle", "help": { "1": "hsl/types_sections.html#section-rectangulaire", "0": "hsl/types_sections.html#section-circulaire", @@ -49,7 +50,6 @@ }, { "type": "options", - "defaultNodeType": "SectionRectangle", "help": "hsl/regime_uniforme.html", "resultsHelp": { "V": "hsl/section_parametree.html#la-vitesse-moyenne-ms" diff --git a/src/app/calculators/sectionparametree/config.json b/src/app/calculators/sectionparametree/config.json index 4e4ce5e28..a54bed3df 100644 --- a/src/app/calculators/sectionparametree/config.json +++ b/src/app/calculators/sectionparametree/config.json @@ -7,6 +7,7 @@ "id": "select_section", "type": "select", "property": "nodeType", + "default": "SectionRectangle", "help": { "1": "hsl/types_sections.html#section-rectangulaire", "0": "hsl/types_sections.html#section-circulaire", @@ -49,7 +50,6 @@ }, { "type": "options", - "defaultNodeType": "SectionRectangle", "help": "hsl/section_parametree.html", "resultsHelp": { "B": "hsl/section_parametree.html#largeur-au-miroir-surface-et-perimetre-mouille", diff --git a/src/app/formulaire/definition/config-parser.ts b/src/app/formulaire/definition/config-parser.ts new file mode 100644 index 000000000..8deec7c96 --- /dev/null +++ b/src/app/formulaire/definition/config-parser.ts @@ -0,0 +1,41 @@ +export class ConfigIterator implements IterableIterator<Object> { + private _index = 0; + + private _entries: [string, any][]; + + constructor(private _json: Object, private _key: string) { + this._entries = Object.entries(this._json); + } + + public next(): IteratorResult<Object> { + let i = this._index; + while (i < this._entries.length) { + const ent = this._entries[i][1]; + if (ent.type === this._key) { + this._index = i + 1; + return { + done: false, + value: ent + }; + } + i++; + } + return { + done: true, + value: undefined + }; + } + + [Symbol.iterator](): IterableIterator<Object> { + return this; + } +} + +export class ConfigParser { + constructor(private _json: {}) { + } + + public forAll(key: string): ConfigIterator { + return new ConfigIterator(this._json, key); + } +} \ No newline at end of file diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index bcf6eef68..9c9b94889 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -27,6 +27,7 @@ import { PabTable } from "../elements/pab-table"; import { SelectEntry } from "../elements/select/select-entry"; import { SelectField } from "../elements/select/select-field"; import { DeepSelectFieldIterator } from "../form-iterator/deep-selectfield-iterator"; +import { ConfigParser as ConfigParser } from "./config-parser"; /** * classe de base pour tous les formulaires @@ -43,7 +44,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs protected _props = {}; /** for SectionNubs only */ - protected _defaultNodeType; + private _defaultSectionType; /** aide en ligne pour les résultats */ protected _resultsHelpLinks: { [key: string]: string }; @@ -128,7 +129,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs // add new Section as first child, from given nodeType const propsSection = new Props(); propsSection.setPropValue("calcType", CalculatorType.Section); - propsSection.setPropValue("nodeType", this._defaultNodeType); + propsSection.setPropValue("nodeType", this._defaultSectionType); propsSection.setPropValue(Prop_NullParameters, ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit); const section = Session.getInstance().createNub(propsSection); this.currentNub.setSection(section as acSection); @@ -161,10 +162,8 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } protected parseOptions(json: {}) { - const dnt = json["defaultNodeType"]; - if (dnt !== undefined) { - this._defaultNodeType = SectionType[dnt]; - } + this.parseDefaultSectionType(); + this._helpLink = json["help"]; this._resultsHelpLinks = json["resultsHelp"]; if (json["calculateDisabled"] !== undefined) { @@ -172,6 +171,25 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } } + /** + * determine default section type from select configuration + */ + private parseDefaultSectionType() { + if (this._defaultSectionType === undefined) { + const jp = new ConfigParser(this._jsonConfig); + for (const fs of jp.forAll("fieldset")) { + const fsp = new ConfigParser(fs["fields"]); + for (const sel of fsp.forAll("select")) { + if (sel["id"] === "select_section") { + const st = sel["default"]; + this._defaultSectionType = SectionType[st]; + return; + } + } + } + } + } + /** called at the end of parseConfig() */ protected completeParse(firstNotif: boolean = true) { this.helpLinks = this._resultsHelpLinks; @@ -238,6 +256,8 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs public preparseConfig(json: {}) { this._jsonConfig = json; + this.parseDefaultSectionType(); + // analyse des options globales // il est utile de le faire avant le reste pour les modules de calcul utilisant // des sections (id des selects type de section/variable à calculer) diff --git a/src/app/formulaire/definition/form-parallel-structures.ts b/src/app/formulaire/definition/form-parallel-structures.ts index d25b4df33..2fbc67186 100644 --- a/src/app/formulaire/definition/form-parallel-structures.ts +++ b/src/app/formulaire/definition/form-parallel-structures.ts @@ -64,7 +64,6 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { const params = {}; params["calcType"] = templ.calcTypeFromConfig; - params["nodeType"] = templ.defaultNodeTypeFromConfig; params["structureType"] = templ.defaultStructTypeFromConfig; params["loiDebit"] = templ.defaultLoiDebitFromConfig; params[Prop_NullParameters] = ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit; diff --git a/src/app/formulaire/elements/fieldset-template.ts b/src/app/formulaire/elements/fieldset-template.ts index b65b48874..ddad4008b 100644 --- a/src/app/formulaire/elements/fieldset-template.ts +++ b/src/app/formulaire/elements/fieldset-template.ts @@ -19,11 +19,6 @@ export class FieldsetTemplate { return CalculatorType[ct]; } - public get defaultNodeTypeFromConfig(): SectionType { - const nt: string = this._jsonConfig["defaultNodeType"]; - return SectionType[nt]; - } - public get defaultStructTypeFromConfig(): StructureType { const st: string = this._jsonConfig["defaultStructType"]; return StructureType[st]; -- GitLab From d816e82bcf7e3e515f4fa3cf491a827c13788ef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 27 Oct 2022 13:40:47 +0200 Subject: [PATCH 013/285] doc: update developer documentation refs #483 --- DEVELOPERS.md | 195 ++++++++++++++------------------------------------ 1 file changed, 55 insertions(+), 140 deletions(-) diff --git a/DEVELOPERS.md b/DEVELOPERS.md index 4a6b1d4d7..e69e95255 100644 --- a/DEVELOPERS.md +++ b/DEVELOPERS.md @@ -177,8 +177,6 @@ Dans cet exemple, on définit un seul groupe de champs nommé arbitrairement "fs Le deuxième et dernier bloc contient les options pour ce module: ici uniquement le lien vers la page de documentation pour ce module (`help`). Les options peuvent également contenir : - * `defaultNodeType` : le type de section par défaut du module de calcul, pour les modules contenant une section - * `selectIds` : les identifiants des listes déroulantes * `resultsHelp` : l'aide associée aux résultats (voir ci-dessous) * `calculateDisabled` : pour masquer le bouton Calculer (ex: module Espèce) @@ -279,11 +277,13 @@ case CalculatorType.MacroRugoCompound: Les listes déroulantes sont toujours associées à des **propriétés** du Nub. -En général les valeurs autorisées sont tirées de l'**enum** correspondant, d'après le tableau `Session.enumFromProperty` de JaLHyd. Pour les autres cas, voir les paragraphes "source" et "liste déroulante personnalisée" ci-dessous. +En général les valeurs autorisées sont tirées de l'**enum** correspondant, d'après le tableau `Session.enumFromProperty` de JaLHyd. Pour les autres cas, voir le paragraphe "liste déroulante personnalisée" ci-dessous. #### configuration -Dans le fichier de configuration du module, ajouter la définition des listes déroulantes dans "fields", notamment la propriété associée et la valeur par défaut. Puis dans le bloc de configuration, déclarer les identifiants des listes dans "selectIds". Exemple dans `trigo/config.json` +Dans le fichier de configuration du module, ajouter la définition des listes déroulantes dans "fields", notamment la propriété associée et la valeur par défaut; cette dernière est optionnelle et en son absence, la 1ère valeur de la liste sera sélectionnée. + +Exemple dans `trigo/config.json` (ici le 2ème champ ne spécifie pas de valeur par défaut) : ```json { @@ -299,169 +299,108 @@ Dans le fichier de configuration du module, ajouter la définition des listes d "id": "select_unit", "type": "select", "property": "trigoUnit", - "default": "DEG" }, … ] }, -… -{ - "type": "options", - "selectIds": [ "select_operation", "select_unit" ], - … -} -``` - -**IMPORTANT** : les id doivent être de la forme `select_`_`unmotclesansespacenitirets`_ - -#### source - -Une liste déroulante telle que décrite ci-dessus peut être associée à une **source**, qui détermine quels sont les choix possibles. Ceci est utile lorsque les choix possibles ne proviennent pas d'un `enum`. Pour autant ce n'est pas équivalent à la méthode "liste déroulante personnalisée" décrite au chapitre suivant (ces deux techniques devraient être fusionnées). - -Pour ajouter une source, modifier la méthode `loadEntriesFromSource()` de la classe `SelectField`, dans le fichier `src/app/formulaire/elements/select-field.ts`. - -Exemple pour la source "remous_target" associée à la propriété "varCalc", dans le module CourbeRemous : - -```typescript -switch (source) { - // driven by string[], not enum (easier for variable names) - case "remous_target": - this.addEntry(new SelectEntry(this._entriesBaseId + "none", "")); - for (const at of CourbeRemous.availableTargets) { - const e: SelectEntry = new SelectEntry(this._entriesBaseId + at, at); - this.addEntry(e); - } - break; ``` -Ici on ajoute des options de type `SelectEntry` à l'aide de la méthode `addEntry()` : une option vide au début, puis une pour chaque élément d'un tableau. - -Puis dans le fichier de configuration du module, déclarer la source : - -```json -{ - "id": "select_target", - "type": "select", - "property": "varCalc", - "source": "remous_target", - … -``` +**IMPORTANT** : les ids doivent être de la forme `select_`_`unmotclesansespacenitirets`_ #### liste déroulante personnalisée -Il est possible de personnaliser complètement le comportement d'une liste déroulante pour des cas plus complexes, en utilisant l'élément de formulaire `SelectCustom`. +Il est possible de personnaliser complètement le comportement d'une liste déroulante pour des cas plus complexes. -De telles listes doivent être déclarées dans la configuration du module en utilisant le type `select_custom`, un identifiant de `source` (identique à celui vu au chapitre précédent, mais attention : il se comporte différemment) et l'identifiant de la liste doit être mentionné dans l'option `customSelectIds` (et non `selectIds`). +De telles listes doivent être déclarées dans la configuration du module en utilisant uniquement le type `select` et un identifiant de liste. Dans ce cas, on ne fournit pas de champ `property` ni `default`. Exemple pour la cible du Solveur : ```json … "fields": [ { + "type": "select", "id": "select_target_nub", - "type": "select_custom", - "source": "solveur_target" }, … ] … -{ - "type": "options", - "customSelectIds": [ "select_target_nub", … ], - … -} ``` -Dans le fichier `src/app/formulaire/elements/select-field-custom.ts`, remplir les méthodes `populate()` (définit les choix possibles) et `initSelectedValue()` (affecte la valeur actuellement définie dans le modèle). - +Il faut ensuite faire 2 choses : +- créer une classe dérivée de `SelectField` et implémenter les méthodes `populate()` (remplissage de la liste) et `initSelectedValue()` (fixation de la valeur par défaut) : -Exemple pour la cible du Solveur : `populate()` ```typescript -case "solveur_target": // Solveur, module cible (à calculer) - // find all Nubs having at least one link to another Nub's result - candidateNubs = - Session.getInstance().getDownstreamNubs().concat( - Session.getInstance().getUpstreamNubsHavingExtraResults() - ).filter( - (element, index, self) => self.findIndex((e) => e.uid === element.uid) === index - ); - for (const cn of candidateNubs) { - const nub = fs.getFormulaireFromId(cn.uid); - if (nub) { - const calc = nub.calculatorName; - let label = calc; - // calculated param - if (cn.calculatedParam !== undefined) { - const varName = fs.expandVariableName(cn.calcType, cn.calculatedParam.symbol); - label += ` / ${varName} (${cn.calculatedParam.symbol})`; - } - this.addEntry(new SelectEntry(this._entriesBaseId + cn.uid, cn.uid, decodeHtml(label))); - } else { - // silent fail, this Solveur nub was probably loaded before all the candidate nubs are done loading - } + export class SelectFieldSolverTarget extends SelectField { + protected populate() { + … + // une série de addEntry() + … } - break; -``` -Comme au chapitre précédent, il s'agit d'ajouter des options de type `SelectEntry` à l'aide de la méthode `addEntry()`. + protected initSelectedValue() { + // utiliser setValueFromId() avec un id calculé + // ou findAndSetDefaultValue() pour utiliser la 1ère valeur de la liste + } +} +``` -Exemple pour la cible du Solveur : `initSelectedValue()` +- modifier la méthode `newSelectField` de la classe `SelectFieldFactory` pour créer une instance de la classe dérivée en utilisant le champ `id` précisé dans le JSON de configuration : ```typescript -case "solveur_target": // Solveur, module cible (à calculer) - const ntc = (nub as Solveur).nubToCalculate; - if (ntc !== undefined) { - this.setValueFromId(this._entriesBaseId + ntc.uid); + public static newSelectField(json: {}, parent: FormulaireNode): SelectField { + switch (json["id"]) { + … + case "select_target_nub": + return new SelectFieldSolverTarget(parent); + … + } } - break; ``` -Ici il s'agit de choisir la bonne option du sélecteur, en fonction de la valeur courante de la propriété dans le modèle. - -Enfin, ce type de liste déroulante nécessite une classe de formulaire personnalisée, dans laquelle la méthode `update()` doit être enrichie. +Enfin, ce type de liste déroulante peut nécessiter une classe de formulaire personnalisée, dans laquelle la méthode `update()` doit être enrichie. -Exemple dans `src/app/formulaire/definition/form-solveur.ts`, pour la cible du Solveur : +Exemple dans `src/app/formulaire/definition/form-solveur.ts` pour la cible du Solveur : ```typescript public update(sender: IObservable, data: any) { … - if (sender instanceof SelectFieldCustom) { - if (sender.id === "select_target_nub" && data.action === "select") { - // update Solveur property: Nub to calculate - try { - // if searchedParam is set to a value that won't be available anymore - // once nubToCalculate is updated, setPropValue throws an error, but - // nubToCalculate is updated anyway; here, just inhibit the error - this._currentNub.properties.setPropValue("nubToCalculate", data.value.value); - } catch (e) { } - // refresh targetted result selector - const trSel = this.getFormulaireNodeById(this._targettedResultSelectId) as SelectField; - if (trSel) { - (trSel.parent as FieldSet).updateFields(); - // trick to re-set observers - this.completeParse(false); + if (sender instanceof SelectField) { + if (sender.id === "select_target_nub" && data.action === "select") { + // update Solveur property: Nub to calculate + try { + // if searchedParam is set to a value that won't be available anymore + // once nubToCalculate is updated, setPropValue throws an error, but + // nubToCalculate is updated anyway; here, just inhibit the error + this._currentNub.properties.setPropValue("nubToCalculate", data.value.value); + } catch (e) { } + // refresh targetted result selector + const trSel = this.getFormulaireNodeById(this._targettedResultSelectId) as SelectField; + if (trSel) { + (trSel.parent as FieldSet).updateFields(); + // trick to re-set observers + this.completeParse(false); + } + // refresh parameters selector + this.refreshParameterEntries(); } - // refresh parameters selector - this.refreshParameterEntries(); - } … } … } ``` -Ici on écoute l'événement généré par l'objet `SelectFieldCustom`, et on agit en conséquence : affecter la propriété concernée, et rafraîchir un champ dépendant. +Ici on écoute l'événement généré par l'objet dérivé de `SelectField`, et on agit en conséquence : affecter la propriété concernée et rafraîchir un champ dépendant. #### si l'affichage de certains champs dépend du choix dans la liste Les listes dont l'identifiant est déclaré dans le fichier de configuration du module déclencheront, lorsque leur valeur change, un effacement des résultats du module et une mise à jour de tous les "fieldset" du formulaire. -Cette dernière opération permet de vérifier la visibilité de chaque champ du formulaire, et afficher / masquer ceux dont la visibilité a changé. +Cette dernière opération permet de vérifier la visibilité de chaque champ du formulaire et afficher/masquer ceux dont la visibilité a changé. Ainsi, pour rendre la visibilité d'un champ dépendante du choix dans la liste, il faut, **dans le code du Nub dans JaLHyd** : - * écouter le changement de propriété (méthode `update()`, action `propertyChange`) - * selon la nouvelle valeur, ajuster la propriété `.visible` des paramètres concernés + * écouter le changement de propriété (méthode `update()`, action `propertyChange`), + * selon la nouvelle valeur, ajuster la propriété `visible` des paramètres concernés. Il n'y a rien à faire de particulier dans ngHyd. @@ -469,7 +408,7 @@ Ainsi, pour rendre la visibilité d'un champ dépendante du choix dans la liste, Il faut utiliser ou étendre `FormulaireSection`. -Dans la configuration du module, ajouter un sélecteur de section, associé à la propriété "nodeType" : +Dans la configuration du module, ajouter un sélecteur de section associé à la propriété "nodeType" (type de section) : ```json { @@ -484,17 +423,7 @@ Dans la configuration du module, ajouter un sélecteur de section, associé à l } } ``` - -Puis dans les options, déclarer ce sélecteur et ajouter "defaultNodeType" : - -```json -{ - "type": "options", - "defaultNodeType": "SectionRectangle", - "selectIds": [ "select_section" ], - … -} -``` +La section par défaut du formulaire sera celle du sélecteur, que celle ci soit ou non configurée explicitement par le champ `default`. ### si le module agrège des modules enfants @@ -581,14 +510,10 @@ Dans la configuration du module, dans le "fieldset_template", ajouter un sélect { "id": "select_structure", "type": "select", - "property": "structureType", - "source": "device_structure_type" }, { "id": "select_loidebit", "type": "select", - "property": "loiDebit", - "source": "device_loi_debit", "help": { "Orifice_OrificeSubmerged": "structures/orifice_noye.html", "SeuilRectangulaire_WeirVillemonte": "structures/kivi.html", @@ -602,16 +527,6 @@ Dans la configuration du module, dans le "fieldset_template", ajouter un sélect } ``` -Dans les options, déclarer les sélecteurs : - -```json -{ - "type": "options", - "selectIds": [ "select_structure", "select_loidebit" ], - … -} -``` - ### documentation Pour chaque langue, ajouter un fichier .md dans les dossiers `docs/*/calculators`, puis placer ce nouveau fichier dans la hiérarchie de la documentation, en ajoutant son chemin dans les fichiers `mkdocs-*.yml`. -- GitLab From 2b89836ba14df8dff1f966d505fc95b464d0c30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 27 Oct 2022 15:22:52 +0200 Subject: [PATCH 014/285] fix: ExpressionChangedAfterItHasBeenCheckedError when switching parameter to variated mode (min,max,step undefined) --- .../dialog-edit-param-values.component.ts | 50 ++++++++++++------- .../param-values/param-values.component.ts | 21 ++++---- 2 files changed, 42 insertions(+), 29 deletions(-) diff --git a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts index a5cc9fcec..29b6947db 100644 --- a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts +++ b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts @@ -396,40 +396,52 @@ export class DialogEditParamValuesComponent implements OnInit { } public onValueModeChange(event) { - this.initVariableValues(); + DialogEditParamValuesComponent.initVariableValues(this.param); + this.initListForm(); } - private initVariableValues() { + /** + * initialise si besoin le paramètre en mode varié avec des valeurs par défaut calculées + */ + public static initVariableValues(param: NgParameter) { const canFill: boolean = !ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit; // init min / max / step - if (this.isMinMax) { - const pVal = this.param.getValue(); - if (this.param.minValue === undefined && canFill) { - this.param.resetMinValue(this, pVal !== undefined ? this.param.getValue() / 2 : undefined); + if (param.valueMode === ParamValueMode.MINMAX) { + const pVal = param.getValue(); + if (param.minValue === undefined && canFill) { + param.resetMinValue(undefined, pVal !== undefined ? param.getValue() / 2 : undefined); } - if (this.param.maxValue === undefined && canFill) { - this.param.resetMaxValue(this, pVal !== undefined ? this.param.getValue() * 2 : undefined); + if (param.maxValue === undefined && canFill) { + param.resetMaxValue(undefined, pVal !== undefined ? param.getValue() * 2 : undefined); } - let step = this.param.stepValue; + let step = param.stepValue; if (step === undefined && canFill) { - step = pVal !== undefined ? ((this.param.maxValue - this.param.minValue) / 20) : undefined; - this.param.resetStepValue(this, step); + step = pVal !== undefined ? ((param.maxValue - param.minValue) / 20) : undefined; + param.resetStepValue(undefined, step); } } // init values list - if (this.isListe) { - if (this.param.valueList === undefined && canFill) { - if (this.param.isDefined) { - this.param.resetValueList(this, [this.param.getValue()]); + else if (param.valueMode === ParamValueMode.LISTE) { + if (param.valueList === undefined && canFill) { + if (param.isDefined) { + param.resetValueList(this, [param.getValue()]); } else { - this.param.resetValueList(this, []); + param.resetValueList(this, []); } - // set form control initial value - this.valuesListForm.controls.valuesList.setValue(this.valuesList); } } } + /** + * initialise values list + */ + private initListForm() { + if (this.isListe) { + // set form control initial value + this.valuesListForm.controls.valuesList.setValue(this.valuesList); + } + } + /** * (re)Génère le graphique d'évolution des valeurs */ @@ -519,6 +531,6 @@ export class DialogEditParamValuesComponent implements OnInit { } public ngOnInit() { - this.initVariableValues(); + this.initListForm(); } } diff --git a/src/app/components/param-values/param-values.component.ts b/src/app/components/param-values/param-values.component.ts index 8f3959026..d39e310fe 100644 --- a/src/app/components/param-values/param-values.component.ts +++ b/src/app/components/param-values/param-values.component.ts @@ -54,6 +54,9 @@ export class ParamValuesComponent implements AfterViewInit, Observer { } public openDialog() { + // initialisation du paramètre en mode varié + // (fait avant d'ouvrir le dialogue pour éviter le message ExpressionChangedAfterItHasBeenCheckedError lié au paramètre) + DialogEditParamValuesComponent.initVariableValues(this.param); // modification des valeurs variables const dlgRef = this.editValuesDialog.open( DialogEditParamValuesComponent, @@ -92,16 +95,14 @@ export class ParamValuesComponent implements AfterViewInit, Observer { } public update(sender: any, data: any): void { - if (sender instanceof DialogEditParamValuesComponent) { - switch (data.action) { - case "ngparamAfterMinValue": - case "ngparamAfterMaxValue": - case "ngparamAfterStepValue": - case "ngparamAfterListValue": - // tell the form to clear the results - this.emitModelChanged(); - break; - } + switch (data.action) { + case "ngparamAfterMinValue": + case "ngparamAfterMaxValue": + case "ngparamAfterStepValue": + case "ngparamAfterListValue": + // tell the form to clear the results + this.emitModelChanged(); + break; } } -- GitLab From e0403b11998037034d5db801e32f6c9119a5d236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 27 Oct 2022 16:45:26 +0200 Subject: [PATCH 015/285] fix: standard select defaut value from calculator configuration not honored refs #483 --- src/app/formulaire/elements/fieldset.ts | 10 ++-------- src/app/formulaire/elements/select/select-field.ts | 12 +++++++++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index e5fbca7d7..d0229afe7 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -4,7 +4,7 @@ import { Props, Observer, Nub, - Session, + enumValueFromString } from "jalhyd"; import { FormulaireElement } from "./formulaire-element"; @@ -295,13 +295,7 @@ export class FieldSet extends FormulaireElement implements Observer { // Sets Nub default property, unless this property is already set const currentValue = this.properties.getPropValue(prop); if (defaultValue !== undefined && currentValue === undefined) { - let formalValue = defaultValue; - // !! property names must be unique throughout JaLHyd !! - const enumClass = Session.enumFromProperty[prop]; - if (enumClass) { - formalValue = enumClass[defaultValue]; - } - this.setNubPropValue(prop, formalValue); + this.setNubPropValue(prop, enumValueFromString(prop, defaultValue)); } } } diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index f67c07404..5a174b636 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -4,7 +4,7 @@ import { arraysAreEqual } from "../../../util"; import { FormulaireNode } from "../formulaire-node"; import { ServiceFactory } from "app/services/service-factory"; import { FormulaireDefinition } from "../../definition/form-definition"; -import { Nub } from "jalhyd"; +import { enumValueFromString, Nub } from "jalhyd"; export abstract class SelectField extends Field { @@ -128,10 +128,16 @@ export abstract class SelectField extends Field { protected findAndSetDefaultValue() { // default to first available entry if any if (this._entries.length > 0) { + let val; + if (this._configDefaultValue === undefined) { + val = this._entries[0]; + } else { + val = this.getEntryFromValue(enumValueFromString(this._associatedProperty, this._configDefaultValue)); + } if (this._multiple) { - this.setValue([this._entries[0]]); + this.setValue([val]); } else { - this.setValue(this._entries[0]); + this.setValue(val); } } else { // notify observers that no value is selected anymore -- GitLab From 285aad671fe8108ac9d3fafcf66aa8704576214a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 28 Oct 2022 09:10:06 +0200 Subject: [PATCH 016/285] test(e2e): increase timeout for failing tests refs #483 --- e2e/calculate-all-params.e2e-spec.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 30887028d..39129ac61 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -20,6 +20,9 @@ describe("ngHyd − calculate all parameters of all calculators", async () => { calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); navBar = new Navbar(); + + // increase timeout to avoid "Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL" message + jasmine.DEFAULT_TIMEOUT_INTERVAL = 10 * 60 * 1000; // 10 min }); // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ -- GitLab From 131537183c908ffd7a722032886bc104cb43d3c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 28 Oct 2022 09:10:29 +0200 Subject: [PATCH 017/285] test(e2e): check section select default value from calculator configuration is honored refs #483 --- e2e/select-default-value.e2e-spec.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/e2e/select-default-value.e2e-spec.ts b/e2e/select-default-value.e2e-spec.ts index 8796f19ac..9ec1205cd 100644 --- a/e2e/select-default-value.e2e-spec.ts +++ b/e2e/select-default-value.e2e-spec.ts @@ -35,8 +35,21 @@ describe("check the select default value - ", () => { // in the calculator configuration file, the default resolution method is 'Trapezes'. // let's check this... - const sel_section = calcPage.getSelectById("select_resolution"); - const val = await calcPage.getSelectValueText(sel_section); + const sel = calcPage.getSelectById("select_resolution"); + const val = await calcPage.getSelectValueText(sel); expect(val).toBe("Intégration par trapèzes"); }); + + it("in the 'up/downstream elevations of a reach' calculator", async () => { + // open "up/downstream elevations of a reach" calculator + await navBar.clickNewCalculatorButton(); + await listPage.clickMenuEntryForCalcType(21); + await browser.sleep(200); + + // in the calculator configuration file, the default section method is 'Rectangulaire'. + // let's check this... + const sel = calcPage.getSelectById("select_section"); + const val = await calcPage.getSelectValueText(sel); + expect(val).toBe("Rectangulaire"); + }); }); -- GitLab From 56ba9903dd632860e7999a1d45243cc8d9071676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 28 Oct 2022 13:09:55 +0200 Subject: [PATCH 018/285] fix: ExpressionChangedAfterItHasBeenCheckedError when switching parameter to variated mode (form validity) --- .../dialog-edit-param-values.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts index 29b6947db..16768e9c0 100644 --- a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts +++ b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts @@ -279,7 +279,8 @@ export class DialogEditParamValuesComponent implements OnInit { break; case ParamValueMode.MINMAX: - ret = this.minMaxForm !== undefined && this.minMaxForm.valid; + // return true when form is not initialised to avoid ExpressionChangedAfterItHasBeenCheckedError + ret = this.minMaxForm === undefined ? true : this.minMaxForm.valid; break; } return ret; -- GitLab From 4d31552b61ab969bd9cc25cb238e72b1f95c3458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 3 Nov 2022 10:15:51 +0100 Subject: [PATCH 019/285] feature: add component to open a new section detail form refs #496 --- src/app/app.module.ts | 4 +- .../section-details-entry.component.html | 6 +++ .../section-details-entry.component.scss | 0 .../section-details-entry.component.ts | 42 +++++++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/app/components/section-details-entry/section-details-entry.component.html create mode 100644 src/app/components/section-details-entry/section-details-entry.component.scss create mode 100644 src/app/components/section-details-entry/section-details-entry.component.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c39a646e4..c5fd9324b 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -123,6 +123,7 @@ import { DialogConfirmLoadSessionURLComponent } from "./components/dialog-confir import { StructureFieldsetContainerComponent } from "./components/structure-fieldset-container/structure-fieldset-container.component"; import { BasinFieldsetContainerComponent } from "./components/basin-fieldset-container/basin-fieldset-container.component"; import { PrebarrageService } from "./services/prebarrage.service"; +import { SectionDetailsEntryComponent } from "./components/section-details-entry/section-details-entry.component"; const appRoutes: Routes = [ { path: "list/search", component: CalculatorListComponent }, @@ -257,7 +258,8 @@ const appRoutes: Routes = [ SelectFieldLineComponent, SessionPropertiesComponent, VarResultsComponent, - VerificateurResultsComponent + VerificateurResultsComponent, + SectionDetailsEntryComponent ], providers: [ // services ApplicationSetupService, diff --git a/src/app/components/section-details-entry/section-details-entry.component.html b/src/app/components/section-details-entry/section-details-entry.component.html new file mode 100644 index 000000000..7ce439984 --- /dev/null +++ b/src/app/components/section-details-entry/section-details-entry.component.html @@ -0,0 +1,6 @@ +<div fxLayout="row wrap" fxLayoutGap="10px"> + <p>{{label}}</p> + <button mat-raised-button color="accent" id="generate-cr-sp" (click)="generateCrSp()"> + {{ uitextGenerateRuSp }} + </button> +</div> diff --git a/src/app/components/section-details-entry/section-details-entry.component.scss b/src/app/components/section-details-entry/section-details-entry.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/app/components/section-details-entry/section-details-entry.component.ts b/src/app/components/section-details-entry/section-details-entry.component.ts new file mode 100644 index 000000000..01503d59e --- /dev/null +++ b/src/app/components/section-details-entry/section-details-entry.component.ts @@ -0,0 +1,42 @@ +import { Component, Input } from '@angular/core'; +import { I18nService } from 'app/services/internationalisation.service'; + +/** + * Bouton d'ouverture des détails de section hydraulique pour chaque point du graphe de "courbes de remous". + * Utilisé comme entrées d'un select. + */ + +@Component({ + selector: 'section-details-entry', + templateUrl: './section-details-entry.component.html', + styleUrls: ['./section-details-entry.component.scss'] +}) +export class SectionDetailsEntryComponent { + private _abscissa: number; + + @Input() + private set abscissa(n: number) { + this._abscissa = n; + } + + constructor( + private intlService: I18nService, + ) { } + + public get label(): string { + if (this._abscissa === undefined) { + return undefined; + } + return "x : " + this._abscissa.toString(); + } + + public get uitextGenerateRuSp() { + return this.intlService.localizeText("INFO_CALCULATOR_RESULTS_GENERATE_RU_SP"); + } + + /** + * Génère une SectionParametree à partir du module en cours + */ + public async generateCrSp() { + } +} -- GitLab From 70d3d72e1efec7d5f767327f4f415bbb86738133 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 3 Nov 2022 10:25:02 +0100 Subject: [PATCH 020/285] refactor: move parametric section form generation to form service refs #496 --- .../calculator.component.ts | 18 ++-------- src/app/services/formulaire.service.ts | 36 ++++++++++++++++++- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 901fa1343..fc57d1653 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -965,25 +965,11 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe * Génère une SectionParametree à partir du module RegimeUniforme en cours */ public async generateRuSp() { - const ru = (this._formulaire.currentNub as RegimeUniforme); - // copy section - const serialisedSection = ru.section.serialise(); - const sectionCopy = Session.getInstance().unserialiseSingleNub(serialisedSection, false).nub; - const secParam = new SectionParametree(sectionCopy as acSection); - // copy value of calculated param - const cp = ru.calculatedParam; - const scp = secParam.section.getParameter(cp.symbol); - if (cp.hasMultipleValues) { - scp.setValues(ru.result.getCalculatedValues().map(v => round(v, this.appSetupService.displayPrecision))); - } else { - scp.singleValue = ru.result.vCalc; - } - Session.getInstance().registerNub(secParam); - - const f: FormulaireDefinition = await this.formulaireService.createFormulaire(CalculatorType.SectionParametree, secParam); + const f = await this.formulaireService.generateParametricSectionForm(); // calculate f.doCompute(); // go to new SP + this.router.navigate(["/calculator", f.uid]); } public get generatePARSimulationEnabled(): boolean { diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 4c9e42baa..90095e6df 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -21,7 +21,13 @@ import { LoiDebit, PbCloison, CreateStructure, - Structure + Structure, + SectionNub, + SectionParametree, + acSection, + round, + RegimeUniforme, + CourbeRemous } from "jalhyd"; import { ApplicationSetupService } from "./app-setup.service"; @@ -851,4 +857,32 @@ export class FormulaireService extends Observable { } } } + + /** + * Génère un formulaire SectionParametree à partir du module courant + * s'il est du type régime uniforme ou courbe de remous + */ + public async generateParametricSectionForm(): Promise<FormulaireDefinition> { + if (this.currentForm.currentNub instanceof SectionNub) { + const sn: SectionNub = this.currentForm.currentNub; + if (sn instanceof RegimeUniforme || sn instanceof CourbeRemous) { + // copy section + const serialisedSection = sn.section.serialise(); + const sectionCopy = Session.getInstance().unserialiseSingleNub(serialisedSection, false).nub; + const secParam = new SectionParametree(sectionCopy as acSection); + // copy value of calculated param + const cp: ParamDefinition = sn.calculatedParam; + const scp: ParamDefinition = secParam.section.getParameter(cp.symbol); + if (cp.hasMultipleValues) { + scp.setValues(sn.result.getCalculatedValues().map(v => round(v, this.appSetupService.displayPrecision))); + } else { + scp.singleValue = sn.result.vCalc; + } + Session.getInstance().registerNub(secParam); + + return await this.createFormulaire(CalculatorType.SectionParametree, secParam); + } + } + return Promise.reject("cannot create parametric section from current form"); + } } -- GitLab From b5675b9e6d8e14c55cbc02d13169eb3d949809b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 3 Nov 2022 10:25:35 +0100 Subject: [PATCH 021/285] feature: section detail entry: use form service to generate parametric section form refs #496 --- .../section-details-entry.component.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/app/components/section-details-entry/section-details-entry.component.ts b/src/app/components/section-details-entry/section-details-entry.component.ts index 01503d59e..6f5c77a06 100644 --- a/src/app/components/section-details-entry/section-details-entry.component.ts +++ b/src/app/components/section-details-entry/section-details-entry.component.ts @@ -1,11 +1,13 @@ import { Component, Input } from '@angular/core'; +import { Router } from '@angular/router'; +import { FormulaireDefinition } from 'app/formulaire/definition/form-definition'; +import { FormulaireService } from 'app/services/formulaire.service'; import { I18nService } from 'app/services/internationalisation.service'; /** * Bouton d'ouverture des détails de section hydraulique pour chaque point du graphe de "courbes de remous". * Utilisé comme entrées d'un select. */ - @Component({ selector: 'section-details-entry', templateUrl: './section-details-entry.component.html', @@ -21,6 +23,8 @@ export class SectionDetailsEntryComponent { constructor( private intlService: I18nService, + private formulaireService: FormulaireService, + private router: Router ) { } public get label(): string { @@ -38,5 +42,12 @@ export class SectionDetailsEntryComponent { * Génère une SectionParametree à partir du module en cours */ public async generateCrSp() { + const f: FormulaireDefinition = await this.formulaireService.generateParametricSectionForm(); + + // calculate form + f.doCompute(); + + // go to new form + this.router.navigate(["/calculator", f.uid]); } } -- GitLab From 3bddb33536ee5d6a7a4f86c16d4a29350ae6bac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 4 Nov 2022 08:28:55 +0100 Subject: [PATCH 022/285] feature : backwater curves: add select to open a parametric section calculator for a given abscissa refs #496 --- src/app/app.module.ts | 4 ++- .../calculator.component.html | 2 ++ .../calculator.component.ts | 21 ++++++++++++ .../select-section-details.component.html | 5 +++ .../select-section-details.component.scss | 3 ++ .../select-section-details.component.ts | 33 +++++++++++++++++++ src/app/results/remous-results.ts | 9 +++++ src/app/services/formulaire.service.ts | 16 +++++---- 8 files changed, 85 insertions(+), 8 deletions(-) create mode 100644 src/app/components/select-section-details/select-section-details.component.html create mode 100644 src/app/components/select-section-details/select-section-details.component.scss create mode 100644 src/app/components/select-section-details/select-section-details.component.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c5fd9324b..702dabc0e 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -124,6 +124,7 @@ import { StructureFieldsetContainerComponent } from "./components/structure-fiel import { BasinFieldsetContainerComponent } from "./components/basin-fieldset-container/basin-fieldset-container.component"; import { PrebarrageService } from "./services/prebarrage.service"; import { SectionDetailsEntryComponent } from "./components/section-details-entry/section-details-entry.component"; +import { SelectSectionDetailsComponent } from "./components/select-section-details/select-section-details.component"; const appRoutes: Routes = [ { path: "list/search", component: CalculatorListComponent }, @@ -259,7 +260,8 @@ const appRoutes: Routes = [ SessionPropertiesComponent, VarResultsComponent, VerificateurResultsComponent, - SectionDetailsEntryComponent + SectionDetailsEntryComponent, + SelectSectionDetailsComponent ], providers: [ // services ApplicationSetupService, diff --git a/src/app/components/generic-calculator/calculator.component.html b/src/app/components/generic-calculator/calculator.component.html index a61455db0..80581c365 100644 --- a/src/app/components/generic-calculator/calculator.component.html +++ b/src/app/components/generic-calculator/calculator.component.html @@ -200,6 +200,8 @@ {{ uitextGenerateRuSp }} </button> + <select-section-details id="generate-cr-sps" *ngIf="hasCourbeRemousResults" [points]="courbeRemousAbscissae"></select-section-details> + <button mat-raised-button color="accent" id="generate-par-simulation" *ngIf="isPAR" (click)="generatePARSimulation()" [disabled]="! generatePARSimulationEnabled" [title]="uitextGenerateParSimulationTitle"> diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index fc57d1653..500b329de 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -63,6 +63,8 @@ import { sprintf } from "sprintf-js"; import * as XLSX from "xlsx"; import { ServiceFactory } from "app/services/service-factory"; import { DefinedBoolean } from "app/definedvalue/definedboolean"; +import { FormulaireCourbeRemous } from "app/formulaire/definition/form-courbe-remous"; +import { RemousResults } from "app/results/remous-results"; @Component({ selector: "hydrocalc", @@ -710,6 +712,11 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe return this.is(CalculatorType.RegimeUniforme); } + // true if CourbeRemous results are present + public get hasCourbeRemousResults() { + return this.is(CalculatorType.CourbeRemous) && this.hasResults; + } + // true if current Nub is PAR public get isPAR() { return this.is(CalculatorType.Par); @@ -972,6 +979,20 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe this.router.navigate(["/calculator", f.uid]); } + /** + * @returns liste des abscisses du graphe de courbes de remous + */ + public get courbeRemousAbscissae(): number[] { + if (this.hasCourbeRemousResults) { + const crForm = this._formulaire as FormulaireCourbeRemous; + for (const r of crForm.results) { + if (r instanceof RemousResults) { + return r.abscissae; + } + } + } + } + public get generatePARSimulationEnabled(): boolean { const parCalage = (this._formulaire.currentNub as Par); return ( diff --git a/src/app/components/select-section-details/select-section-details.component.html b/src/app/components/select-section-details/select-section-details.component.html new file mode 100644 index 000000000..d8917f9e5 --- /dev/null +++ b/src/app/components/select-section-details/select-section-details.component.html @@ -0,0 +1,5 @@ +<mat-select [placeholder]="uitextPlaceholder"> + <mat-option *ngFor="let p of points"> + <section-details-entry [abscissa]=p></section-details-entry> + </mat-option> +</mat-select> \ No newline at end of file diff --git a/src/app/components/select-section-details/select-section-details.component.scss b/src/app/components/select-section-details/select-section-details.component.scss new file mode 100644 index 000000000..c62ffafb0 --- /dev/null +++ b/src/app/components/select-section-details/select-section-details.component.scss @@ -0,0 +1,3 @@ +mat-select { + border: 1px solid #4dbbe9; +} diff --git a/src/app/components/select-section-details/select-section-details.component.ts b/src/app/components/select-section-details/select-section-details.component.ts new file mode 100644 index 000000000..c27db1224 --- /dev/null +++ b/src/app/components/select-section-details/select-section-details.component.ts @@ -0,0 +1,33 @@ +import { Component, Input } from '@angular/core'; + +/** + * liste déroulante de boutons de génération de formulaire "section paramétrée" + */ + +@Component({ + selector: 'select-section-details', + templateUrl: './select-section-details.component.html', + styleUrls: ['./select-section-details.component.scss'] +}) +export class SelectSectionDetailsComponent { + private _points: number[]; + + /** + * abscisses auxquelles on peut créer un formulaire "section paramétrée" + */ + @Input() + public set points(ps: number[]) { + this._points = ps; + } + + public get points(): number[] { + return this._points; + } + + constructor( + ) { } + + public get uitextPlaceholder() { + return "Générer une section paramétrée pour..."; + } +} diff --git a/src/app/results/remous-results.ts b/src/app/results/remous-results.ts index abb20aa69..aebc15e0b 100644 --- a/src/app/results/remous-results.ts +++ b/src/app/results/remous-results.ts @@ -116,6 +116,15 @@ export class RemousResults extends CalculatorResults { this._xValues.setValues(abscissae); } + /* + * abscisses pour lesquelles on a des résultats + */ + public get abscissae(): number[] { + return this._result.resultElements.map((re) => { + return re.getValue("X"); + }); + } + public update() { this._hasFlu = false; this._hasTor = false; diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 90095e6df..22a2956fd 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -870,13 +870,15 @@ export class FormulaireService extends Observable { const serialisedSection = sn.section.serialise(); const sectionCopy = Session.getInstance().unserialiseSingleNub(serialisedSection, false).nub; const secParam = new SectionParametree(sectionCopy as acSection); - // copy value of calculated param - const cp: ParamDefinition = sn.calculatedParam; - const scp: ParamDefinition = secParam.section.getParameter(cp.symbol); - if (cp.hasMultipleValues) { - scp.setValues(sn.result.getCalculatedValues().map(v => round(v, this.appSetupService.displayPrecision))); - } else { - scp.singleValue = sn.result.vCalc; + if (sn instanceof RegimeUniforme) { + // copy value of calculated param + const cp: ParamDefinition = sn.calculatedParam; + const scp: ParamDefinition = secParam.section.getParameter(cp.symbol); + if (cp.hasMultipleValues) { + scp.setValues(sn.result.getCalculatedValues().map(v => round(v, this.appSetupService.displayPrecision))); + } else { + scp.singleValue = sn.result.vCalc; + } } Session.getInstance().registerNub(secParam); -- GitLab From 2290708ce2417e333a208b1185aef7d5516efaad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 4 Nov 2022 10:14:56 +0100 Subject: [PATCH 023/285] feature: backwater curves: add Y to point list where a parametric section can be generated refs #496 --- .../calculator.component.html | 2 +- .../calculator.component.ts | 4 ++-- .../section-details-entry.component.ts | 12 ++++++---- .../select-section-details.component.html | 2 +- .../select-section-details.component.ts | 8 +++---- src/app/results/remous-results.ts | 24 +++++++++++++++---- 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/app/components/generic-calculator/calculator.component.html b/src/app/components/generic-calculator/calculator.component.html index 80581c365..40cac6c06 100644 --- a/src/app/components/generic-calculator/calculator.component.html +++ b/src/app/components/generic-calculator/calculator.component.html @@ -200,7 +200,7 @@ {{ uitextGenerateRuSp }} </button> - <select-section-details id="generate-cr-sps" *ngIf="hasCourbeRemousResults" [points]="courbeRemousAbscissae"></select-section-details> + <select-section-details id="generate-cr-sps" *ngIf="hasCourbeRemousResults" [points]="courbeRemousPoints"></select-section-details> <button mat-raised-button color="accent" id="generate-par-simulation" *ngIf="isPAR" (click)="generatePARSimulation()" [disabled]="! generatePARSimulationEnabled" diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 500b329de..49e81d946 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -982,12 +982,12 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe /** * @returns liste des abscisses du graphe de courbes de remous */ - public get courbeRemousAbscissae(): number[] { + public get courbeRemousPoints(): any[] { if (this.hasCourbeRemousResults) { const crForm = this._formulaire as FormulaireCourbeRemous; for (const r of crForm.results) { if (r instanceof RemousResults) { - return r.abscissae; + return r.points; } } } diff --git a/src/app/components/section-details-entry/section-details-entry.component.ts b/src/app/components/section-details-entry/section-details-entry.component.ts index 6f5c77a06..715b2f1a7 100644 --- a/src/app/components/section-details-entry/section-details-entry.component.ts +++ b/src/app/components/section-details-entry/section-details-entry.component.ts @@ -3,6 +3,8 @@ import { Router } from '@angular/router'; import { FormulaireDefinition } from 'app/formulaire/definition/form-definition'; import { FormulaireService } from 'app/services/formulaire.service'; import { I18nService } from 'app/services/internationalisation.service'; +import { fv } from 'app/util'; +import { formattedValue } from 'jalhyd'; /** * Bouton d'ouverture des détails de section hydraulique pour chaque point du graphe de "courbes de remous". @@ -14,11 +16,11 @@ import { I18nService } from 'app/services/internationalisation.service'; styleUrls: ['./section-details-entry.component.scss'] }) export class SectionDetailsEntryComponent { - private _abscissa: number; + private _point: any; @Input() - private set abscissa(n: number) { - this._abscissa = n; + private set point(p: any) { + this._point = p; } constructor( @@ -28,10 +30,10 @@ export class SectionDetailsEntryComponent { ) { } public get label(): string { - if (this._abscissa === undefined) { + if (this._point === undefined) { return undefined; } - return "x : " + this._abscissa.toString(); + return "x : " + formattedValue(this._point.x, 1) + " y : " + fv(this._point.y); } public get uitextGenerateRuSp() { diff --git a/src/app/components/select-section-details/select-section-details.component.html b/src/app/components/select-section-details/select-section-details.component.html index d8917f9e5..bbb74ee25 100644 --- a/src/app/components/select-section-details/select-section-details.component.html +++ b/src/app/components/select-section-details/select-section-details.component.html @@ -1,5 +1,5 @@ <mat-select [placeholder]="uitextPlaceholder"> <mat-option *ngFor="let p of points"> - <section-details-entry [abscissa]=p></section-details-entry> + <section-details-entry [point]=p></section-details-entry> </mat-option> </mat-select> \ No newline at end of file diff --git a/src/app/components/select-section-details/select-section-details.component.ts b/src/app/components/select-section-details/select-section-details.component.ts index c27db1224..811e73291 100644 --- a/src/app/components/select-section-details/select-section-details.component.ts +++ b/src/app/components/select-section-details/select-section-details.component.ts @@ -10,17 +10,17 @@ import { Component, Input } from '@angular/core'; styleUrls: ['./select-section-details.component.scss'] }) export class SelectSectionDetailsComponent { - private _points: number[]; + private _points: any[]; /** - * abscisses auxquelles on peut créer un formulaire "section paramétrée" + * points auxquels on peut créer un formulaire "section paramétrée" */ @Input() - public set points(ps: number[]) { + public set points(ps: any[]) { this._points = ps; } - public get points(): number[] { + public get points(): any[] { return this._points; } diff --git a/src/app/results/remous-results.ts b/src/app/results/remous-results.ts index aebc15e0b..6b64caaf8 100644 --- a/src/app/results/remous-results.ts +++ b/src/app/results/remous-results.ts @@ -54,6 +54,11 @@ export class RemousResults extends CalculatorResults { /** pointer to form that instantiated this object */ protected _form: FormulaireDefinition; + /** + * liste des X,Y (fluvial ou torrentiel) + */ + private _points: any[]; + constructor(form?: FormulaireDefinition) { super(); this._form = form; @@ -114,15 +119,24 @@ export class RemousResults extends CalculatorResults { return re.getValue("X"); }); this._xValues.setValues(abscissae); + + this.updatePoints(); + } + + private updatePoints() { + this._points = this._result.resultElements.map((re) => { + let Y = re.getValue("flu"); + if (Y === undefined) + Y = re.getValue("tor"); + return { x: re.getValue("X"), y: Y }; + }); } /* - * abscisses pour lesquelles on a des résultats + * points pour lesquels on a des résultats */ - public get abscissae(): number[] { - return this._result.resultElements.map((re) => { - return re.getValue("X"); - }); + public get points(): any[] { + return this._points; } public update() { -- GitLab From 26d55b17d40dcf637b423bc253669fcd4b1b551c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 4 Nov 2022 10:22:13 +0100 Subject: [PATCH 024/285] feature: backwater curves: parametric section generation: link selected point Y value to generated calculator refs #496 --- .../section-details-entry.component.ts | 2 +- src/app/services/formulaire.service.ts | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/app/components/section-details-entry/section-details-entry.component.ts b/src/app/components/section-details-entry/section-details-entry.component.ts index 715b2f1a7..477c7486f 100644 --- a/src/app/components/section-details-entry/section-details-entry.component.ts +++ b/src/app/components/section-details-entry/section-details-entry.component.ts @@ -44,7 +44,7 @@ export class SectionDetailsEntryComponent { * Génère une SectionParametree à partir du module en cours */ public async generateCrSp() { - const f: FormulaireDefinition = await this.formulaireService.generateParametricSectionForm(); + const f: FormulaireDefinition = await this.formulaireService.generateParametricSectionForm(this._point.y); // calculate form f.doCompute(); diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 22a2956fd..2bd8ee212 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -862,14 +862,17 @@ export class FormulaireService extends Observable { * Génère un formulaire SectionParametree à partir du module courant * s'il est du type régime uniforme ou courbe de remous */ - public async generateParametricSectionForm(): Promise<FormulaireDefinition> { + public async generateParametricSectionForm(Y?: number): Promise<FormulaireDefinition> { if (this.currentForm.currentNub instanceof SectionNub) { const sn: SectionNub = this.currentForm.currentNub; if (sn instanceof RegimeUniforme || sn instanceof CourbeRemous) { // copy section const serialisedSection = sn.section.serialise(); - const sectionCopy = Session.getInstance().unserialiseSingleNub(serialisedSection, false).nub; - const secParam = new SectionParametree(sectionCopy as acSection); + const sectionCopy: acSection = Session.getInstance().unserialiseSingleNub(serialisedSection, false).nub as acSection; + if (Y !== undefined) { + sectionCopy.prms.Y.singleValue = Y; + } + const secParam = new SectionParametree(sectionCopy); if (sn instanceof RegimeUniforme) { // copy value of calculated param const cp: ParamDefinition = sn.calculatedParam; -- GitLab From 44e7b677a4c24582f532db7ef4db4e47091796cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 4 Nov 2022 11:03:16 +0100 Subject: [PATCH 025/285] feature: PAB table: remove rounding using display precision refs #543 --- .../pab-table/pab-table.component.ts | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index f22816c7d..d21fa2838 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -460,21 +460,6 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni private refresh() { const maxNbDevices = this.findMaxNumberOfDevices(); - // adjuste precision once before anything else - const nDigits = this.appSetupService.displayPrecision; - for (const c of this.model.children) { - for (const p of c.parameterIterator) { - if (p.visible && p.symbol !== "QA") { // QA might vary ! - p.singleValue = round(p.singleValue, nDigits); - } - } - } - for (const p of this.model.downWall.parameterIterator) { - if (p.visible) { - p.singleValue = round(p.singleValue, nDigits); - } - } - // 0. build spanned headers over real columns this.headers = []; // 1 header for basin @@ -1348,7 +1333,6 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni case "interpolate": if (result.variableDetails.occurrences > 1) { - const nDigits = this.appSetupService.displayPrecision; const interpolatedValues: number[] = []; const variableRange = result.variableDetails.last - result.variableDetails.first; let totalBasinsLengths = 0; @@ -1391,7 +1375,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni /* console.log(`Wall ${i} : length = ${currentLength} / ${totalBasinsLengths}` + ` (${currentBasinLengthPercentage}), applying step of ${step}`); */ currentValue += step; - interpolatedValues.push(round(currentValue, nDigits)); + interpolatedValues.push(currentValue); } } else { // for other interpolable elevations, exclude last basin @@ -1403,7 +1387,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni /* console.log(`Wall ${i} : length = ${currentBasinLength} / ${totalBasinsLengths}` + ` (${currentBasinLengthPercentage}), applying step of ${step}`); */ currentValue += step; - interpolatedValues.push(round(currentValue, nDigits)); + interpolatedValues.push(currentValue); } } } -- GitLab From c971815319875f4c2ed07c336290daff0ab59809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 4 Nov 2022 15:22:50 +0100 Subject: [PATCH 026/285] update jalhyd_branch to 331-les-resultats-ne-sont-pas-reinitialises-quand-on-modifie-des-parametres-globaux refs #574 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index a210a99ef..53f3046a7 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -329-un-parametre-lie-ne-change-pas-d-etat-apres-la-suppression-du-module-cible +331-les-resultats-ne-sont-pas-reinitialises-quand-on-modifie-des-parametres-globaux -- GitLab From 3ed748720a4fcef2c3c79375c22b0b375aa5ea53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 4 Nov 2022 16:01:28 +0100 Subject: [PATCH 027/285] test(e2e): check calculator results are reset after application setup modification refs #574 --- e2e/preferences.po.ts | 8 ++++ e2e/reset-results.e2e-spec.ts | 84 +++++++++++++++++++++++++++++++++++ e2e/sidenav.po.ts | 4 ++ 3 files changed, 96 insertions(+) create mode 100644 e2e/reset-results.e2e-spec.ts diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index ff9ff36ae..2360ff351 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -29,6 +29,14 @@ export class PreferencesPage { return ff.element(by.css("input")); } + /** + * find input with given "name" attribute + */ + getInputFromName(name: string) { + const cssSelector: string = `input[name="${name}"]`; + return element(by.css(cssSelector)); + } + getErrorsForField(ff: ElementFinder) { return ff.element(by.css("mat-error")); } diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts new file mode 100644 index 000000000..7b98cde01 --- /dev/null +++ b/e2e/reset-results.e2e-spec.ts @@ -0,0 +1,84 @@ +import { ListPage } from "./list.po"; +import { Navbar } from "./navbar.po"; +import { browser } from "protractor"; +import { CalculatorPage } from "./calculator.po"; +import { PreferencesPage } from "./preferences.po"; +import { cp } from "fs"; +import { SideNav } from "./sidenav.po"; + +describe("Check results are reset after application settings modification - ", () => { + let listPage: ListPage; + let navBar: Navbar; + let calcPage: CalculatorPage; + let prefPage: PreferencesPage; + let sideNav: SideNav; + + beforeAll(async () => { + listPage = new ListPage(); + navBar = new Navbar(); + calcPage = new CalculatorPage(); + prefPage = new PreferencesPage(); + sideNav = new SideNav(); + }); + + beforeEach(async () => { + // browser.manage().window().setPosition(2000, 30); + + // disable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await prefPage.disableEvilEmptyFields(); + await browser.sleep(200); + }); + + async function runTestWithParamater(param: string, val1: number, val2: number) { + // set starting compute precision + const input = prefPage.getInputFromName(param); + await input.clear(); + await browser.sleep(20); + await input.sendKeys(val1.toString()); + await browser.sleep(200); + + // open "fish ladder: fall" calculator + await navBar.clickNewCalculatorButton(); + await listPage.clickMenuEntryForCalcType(12); + await browser.sleep(200); + + // click "compute" button + const calcButton = calcPage.getCalculateButton(); + await calcButton.click(); + await browser.sleep(200); + + // results should be here + let hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(true); + + // reopen settings + await navBar.clickMenuButton(); + await browser.sleep(200); + const setupBtn = await sideNav.getSetupButton(); + await setupBtn.click(); + await browser.sleep(200); + + // modify compute precision + await input.clear(); + await browser.sleep(20); + await input.sendKeys(val2.toString()); + await browser.sleep(200); + + // back to calculator + await navBar.openNthCalculator(0); + + // results should not be here + hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(false); + + } + + it("compute precision", async () => { + await runTestWithParamater("cp", 0.001, 0.0001); + }); + + it("max iterations", async () => { + await runTestWithParamater("nmi", 10, 100); + }); +}); diff --git a/e2e/sidenav.po.ts b/e2e/sidenav.po.ts index 437aef644..5b4060f52 100644 --- a/e2e/sidenav.po.ts +++ b/e2e/sidenav.po.ts @@ -15,6 +15,10 @@ export class SideNav { return element(by.css("#side-nav-diagram")); } + getSetupButton() { + return element(by.css("#side-nav-setup")); + } + getFileInput() { return element(by.css(`dialog-load-session input[type="file"]`)); } -- GitLab From 46838ca0df7e7be5a0c5d73e4326de058c2a1efa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 4 Nov 2022 15:23:48 +0100 Subject: [PATCH 028/285] fix: reset results when application settings are modified (max iterations, compute precision) refs #574 --- src/app/formulaire/definition/form-definition.ts | 8 +++++++- src/app/services/app-setup.service.ts | 12 ++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index 814db2e70..5a6504ec0 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -10,7 +10,8 @@ import { ParamDefinition, Result, VariatedDetails, - Prop_NullParameters + Prop_NullParameters, + SessionSettings } from "jalhyd"; import { FormulaireElement } from "../elements/formulaire-element"; @@ -67,6 +68,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs constructor(parent?: FormulaireNode) { super(parent); + SessionSettings.instance.addObserver(this); } // surcharge de FormulaireNode::get:uid() @@ -421,6 +423,10 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs break; } } + else if (sender instanceof SessionSettings) { + // reset results if a session setting (max iterations, compute precision) has been modified + this.reset(); + } } /** diff --git a/src/app/services/app-setup.service.ts b/src/app/services/app-setup.service.ts index 16e3cf00e..1bc771227 100644 --- a/src/app/services/app-setup.service.ts +++ b/src/app/services/app-setup.service.ts @@ -20,31 +20,27 @@ export class ApplicationSetupService extends Observable { // default builtin values public displayPrecision = 3; - private _computePrecision = 1e-7; // tied to model - private _maxIterations = 100; // tied to model + private static readonly _defaultComputePrecision = 1e-7; // tied to model + private static readonly _defaultMaxIterations = 100; // tied to model public enableNotifications = true; public enableHotkeys = false; private _enableEmptyFieldsOnFormInit = true; private _foldedMessageLog = false; public set computePrecision(p: number) { - this._computePrecision = p; - // forward to model SessionSettings.precision = p; } public get computePrecision(): number { - return this._computePrecision; + return SessionSettings.precision; } public set maxIterations(m: number) { - this._maxIterations = m; - // forward to model SessionSettings.maxIterations = m; } public get maxIterations(): number { - return this._maxIterations; + return SessionSettings.maxIterations; } public get enableEmptyFieldsOnFormInit() { -- GitLab From 4d93072a9fd19bc028323d318f0f44f93ea73ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 7 Nov 2022 15:07:30 +0100 Subject: [PATCH 029/285] fix: select field: check default value --- src/app/formulaire/elements/select/select-field.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index 5a174b636..f76690de4 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -133,6 +133,9 @@ export abstract class SelectField extends Field { val = this._entries[0]; } else { val = this.getEntryFromValue(enumValueFromString(this._associatedProperty, this._configDefaultValue)); + if (val === undefined) { + throw Error("invalid select default value " + this._configDefaultValue + " for " + this._associatedProperty + " property"); + } } if (this._multiple) { this.setValue([val]); -- GitLab From f443a1d6e6dabc7491fcd6ca549cd4c0f42d2e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 7 Nov 2022 15:27:07 +0100 Subject: [PATCH 030/285] fix: calculator JSON configuration: remove unused defaultMaterial in Lechapt-Calmon --- src/app/calculators/lechaptcalmon/config.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/calculators/lechaptcalmon/config.json b/src/app/calculators/lechaptcalmon/config.json index d655d5ca3..1b440a6ae 100644 --- a/src/app/calculators/lechaptcalmon/config.json +++ b/src/app/calculators/lechaptcalmon/config.json @@ -2,7 +2,6 @@ { "id": "fs_materiau", "type": "fieldset", - "defaultMaterial": "UnlinedCastIronCoarseConcrete", "fields": [ { "id": "select_material", -- GitLab From 47c2d30b922c3d081440bfa4209d067aecf871a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 8 Nov 2022 08:36:10 +0100 Subject: [PATCH 031/285] refactor: JSON calculator config: replace defaultLoiDebit/defaultStructType by select default property --- src/app/calculators/cloisons/config.json | 6 +++--- src/app/calculators/dever/config.json | 6 +++--- src/app/calculators/parallelstructure/config.json | 6 +++--- src/app/calculators/prebarrage/config.json | 6 +++--- .../elements/select/select-field-device-loi-debit.ts | 5 +++++ .../elements/select/select-field-device-structure-type.ts | 5 +++++ 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/app/calculators/cloisons/config.json b/src/app/calculators/cloisons/config.json index e3b2a662d..116afc893 100644 --- a/src/app/calculators/cloisons/config.json +++ b/src/app/calculators/cloisons/config.json @@ -16,16 +16,16 @@ "id": "fs_ouvrage", "type": "fieldset_template", "calcType": "Structure", - "defaultStructType": "SeuilRectangulaire", - "defaultLoiDebit": "WeirSubmergedLarinier", "fields": [ { "id": "select_structure", - "type": "select" + "type": "select", + "default": "SeuilRectangulaire" }, { "id": "select_loidebit", "type": "select", + "default": "WeirSubmergedLarinier", "help": { "OrificeSubmerged": "structures/orifice_noye.html", "WeirSubmergedLarinier": "structures/fente_noyee.html", diff --git a/src/app/calculators/dever/config.json b/src/app/calculators/dever/config.json index 69188b972..9055348a8 100644 --- a/src/app/calculators/dever/config.json +++ b/src/app/calculators/dever/config.json @@ -14,16 +14,16 @@ "id": "fs_ouvrage", "type": "fieldset_template", "calcType": "Structure", - "defaultStructType": "SeuilRectangulaire", - "defaultLoiDebit": "WeirFree", "fields": [ { "id": "select_structure", - "type": "select" + "type": "select", + "default": "SeuilRectangulaire" }, { "id": "select_loidebit", "type": "select", + "default": "WeirFree", "help": { "WeirFree": "structures/seuil_denoye.html", "TriangularWeirFree": "structures/dever_triang.html", diff --git a/src/app/calculators/parallelstructure/config.json b/src/app/calculators/parallelstructure/config.json index 87ef99908..873f9a699 100644 --- a/src/app/calculators/parallelstructure/config.json +++ b/src/app/calculators/parallelstructure/config.json @@ -13,16 +13,16 @@ "id": "fs_ouvrage", "type": "fieldset_template", "calcType": "Structure", - "defaultStructType": "SeuilOrificeRectangulaire", - "defaultLoiDebit": "GateCem88v", "fields": [ { "id": "select_structure", - "type": "select" + "type": "select", + "default": "SeuilOrificeRectangulaire" }, { "id": "select_loidebit", "type": "select", + "default": "GateCem88v", "help": { "KIVI": "structures/kivi.html", "WeirVillemonte": "structures/kivi.html", diff --git a/src/app/calculators/prebarrage/config.json b/src/app/calculators/prebarrage/config.json index 406711a5e..1aff6ed82 100644 --- a/src/app/calculators/prebarrage/config.json +++ b/src/app/calculators/prebarrage/config.json @@ -48,16 +48,16 @@ "id": "fs_ouvrage", "type": "fieldset_template", "calcType": "Structure", - "defaultStructType": "SeuilRectangulaire", - "defaultLoiDebit": "WeirSubmergedLarinier", "fields": [ { "id": "select_structure", - "type": "select" + "type": "select", + "default": "SeuilRectangulaire" }, { "id": "select_loidebit", "type": "select", + "default": "WeirSubmergedLarinier", "help": { "KIVI": "structures/kivi.html", "WeirVillemonte": "structures/kivi.html", diff --git a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts index 6a9c86e7c..8acbca178 100644 --- a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts +++ b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts @@ -17,6 +17,11 @@ export class SelectFieldDeviceLoiDebit extends SelectField { this._associatedProperty = "loiDebit"; } + public parseConfig(json: {}, data?: {}) { + super.parseConfig(json, data); + this._configDefaultValue = json["default"]; + } + protected populate() { // possible values depend on CalcType diff --git a/src/app/formulaire/elements/select/select-field-device-structure-type.ts b/src/app/formulaire/elements/select/select-field-device-structure-type.ts index 0210eb1b7..aee929760 100644 --- a/src/app/formulaire/elements/select/select-field-device-structure-type.ts +++ b/src/app/formulaire/elements/select/select-field-device-structure-type.ts @@ -16,6 +16,11 @@ export class SelectFieldDeviceStructureType extends SelectField { this._associatedProperty = "structureType"; } + public parseConfig(json: {}, data?: {}) { + super.parseConfig(json, data); + this._configDefaultValue = json["default"]; + } + protected populate() { // possible values depend on CalcType for (const st in (this.nub as ParallelStructure).getLoisAdmissibles()) { -- GitLab From 90ea29b9635d8ea154ac7dab5771a9854dc5f265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 8 Nov 2022 13:32:46 +0100 Subject: [PATCH 032/285] fix: wrong default value for discharge law select refs #483 --- DEVELOPERS.md | 6 +-- .../definition/form-parallel-structures.ts | 5 -- .../formulaire/elements/fieldset-container.ts | 6 ++- .../formulaire/elements/fieldset-template.ts | 46 +++++++++++++++---- .../select/select-field-device-loi-debit.ts | 23 ++++++++-- .../elements/select/select-field-factory.ts | 16 ++++++- .../elements/select/select-field.ts | 8 ++-- 7 files changed, 82 insertions(+), 28 deletions(-) diff --git a/DEVELOPERS.md b/DEVELOPERS.md index e69e95255..908e88488 100644 --- a/DEVELOPERS.md +++ b/DEVELOPERS.md @@ -497,23 +497,23 @@ Dans chaque fichier de langue du dossier `src/locale`, ajouter les traductions p Il faut utiliser ou étendre `FormulaireParallelStructure` (ex: Cloisons, Dever…). -Dans la configuration du module, dans le "fieldset_template", ajouter un sélecteur de structure associé à la propriété "structureType" et un sélecteur de loi de débit associé à la propriété "loiDebit", noter les propriétés "calcType" (toujours "Structure" dans ce cas), "defaultStructType" et "defaultLoiDebit" : +Dans la configuration du module, dans le "fieldset_template", ajouter un sélecteur de structure et un sélecteur de loi de débit, ajouter les propriétés "calcType" (toujours "Structure" dans ce cas) et les valeurs par défaut avec "default" dans la définition du select. A noter que les ids des select sont fixés et doivent obligatoirement être "select_structure" et "select_loidebit" : ```json { "id": "fs_ouvrage", "type": "fieldset_template", "calcType": "Structure", - "defaultStructType": "VanneFondRectangulaire", - "defaultLoiDebit": "GateCem88v", "fields": [ { "id": "select_structure", "type": "select", + "default": "VanneFondRectangulaire", }, { "id": "select_loidebit", "type": "select", + "default": "GateCem88v", "help": { "Orifice_OrificeSubmerged": "structures/orifice_noye.html", "SeuilRectangulaire_WeirVillemonte": "structures/kivi.html", diff --git a/src/app/formulaire/definition/form-parallel-structures.ts b/src/app/formulaire/definition/form-parallel-structures.ts index 2fbc67186..b47c4808b 100644 --- a/src/app/formulaire/definition/form-parallel-structures.ts +++ b/src/app/formulaire/definition/form-parallel-structures.ts @@ -57,11 +57,6 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { } protected createChildNub(templ: FieldsetTemplate): Nub { - // !!! attention !!! - // Il doit y avoir cohérence dans le fichier de conf entre les valeurs defaultXXX et les valeurs possibles pour les select - // cad valeur par défaut du 1er select (type d'ouvrage), du 2ème (loi de débit). - // A terme, il faudrait analyser le fichier de conf (dépendances d'existence) pour déterminer automatiquement ces valeurs - const params = {}; params["calcType"] = templ.calcTypeFromConfig; params["structureType"] = templ.defaultStructTypeFromConfig; diff --git a/src/app/formulaire/elements/fieldset-container.ts b/src/app/formulaire/elements/fieldset-container.ts index 23b548895..0f57d21fe 100644 --- a/src/app/formulaire/elements/fieldset-container.ts +++ b/src/app/formulaire/elements/fieldset-container.ts @@ -21,7 +21,7 @@ export class FieldsetContainer extends FormulaireElement { if (this._template !== undefined) { throw new Error("template already set!"); } - this._template = new FieldsetTemplate(fst); + this._template = fst; } public addFieldset(fs: FieldSet) { @@ -105,7 +105,9 @@ export class FieldsetContainer extends FormulaireElement { for (const t of templateNames) { for (const d of templates) { if (d.id === t) { - this.template = d; + const tmpl = new FieldsetTemplate(); + tmpl.parseConfig(d); + this.template = tmpl; } } } diff --git a/src/app/formulaire/elements/fieldset-template.ts b/src/app/formulaire/elements/fieldset-template.ts index ddad4008b..9147d2cbb 100644 --- a/src/app/formulaire/elements/fieldset-template.ts +++ b/src/app/formulaire/elements/fieldset-template.ts @@ -2,13 +2,16 @@ import { FieldSet } from "./fieldset"; import { CalculatorType, LoiDebit, Nub, StructureType, SectionType } from "jalhyd"; import { FormulaireDefinition } from "../definition/form-definition"; import { FieldsetContainer } from "./fieldset-container"; +import { SelectFieldFactory } from "./select/select-field-factory"; export class FieldsetTemplate { private _jsonConfig: {}; - constructor(config: {}) { - this._jsonConfig = config; - } + // parsed default structure type from JSON configuration file (from select_structure field) + private _defaultStructureType: StructureType; + + // parsed default stage discharge law from JSON configuration file (from select_loidebit field) + private _defaultLoiDebit: LoiDebit; public get config() { return this._jsonConfig; @@ -20,16 +23,41 @@ export class FieldsetTemplate { } public get defaultStructTypeFromConfig(): StructureType { - const st: string = this._jsonConfig["defaultStructType"]; - return StructureType[st]; + return this._defaultStructureType; } public get defaultLoiDebitFromConfig(): LoiDebit { - const ld: string = this._jsonConfig["defaultLoiDebit"]; - if (LoiDebit[ld] === undefined) { - throw new Error(`FieldsetTemplate.defaultLoiDebitFromConfig: La loi de débit ${ld} n'est pas définie`); + return this._defaultLoiDebit; + } + + private findSelectField(id: string): any { + for (const f of this._jsonConfig["fields"]) { + if (f["type"] === "select" && f["id"] === id) { + return f; + } + } + } + + public parseConfig(config: {}) { + this._jsonConfig = config; + + if (this._jsonConfig["calcType"] === "Structure") { + // parse default stage discharge law + + const ld: string = this.findSelectField(SelectFieldFactory.SelectId_LoiDebit)["default"]; + if (LoiDebit[ld] === undefined) { + throw new Error(`FieldsetTemplate.defaultLoiDebitFromConfig : la loi de débit ${ld} n'est pas définie`); + } + this._defaultLoiDebit = LoiDebit[ld]; + + // parse default structure type + + const st: string = this.findSelectField(SelectFieldFactory.SelectId_StructureType)["default"]; + if (StructureType[st] === undefined) { + throw new Error(`FieldsetTemplate.defaultStructTypeFromConfig : le type de structure ${st} n'est pas défini`); + } + this._defaultStructureType = StructureType[st]; } - return LoiDebit[ld]; } /** diff --git a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts index 8acbca178..2c556ff0a 100644 --- a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts +++ b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts @@ -22,13 +22,27 @@ export class SelectFieldDeviceLoiDebit extends SelectField { this._configDefaultValue = json["default"]; } + /** + * get this select's nub + */ + protected get nub(): ParallelStructure { + return super.nub as ParallelStructure; + } + + /** + * get discharge law linked to this select's nub + */ + private get loiDebit(): LoiDebit { + const child = this.nub.getChildren()[this.parent.indexAsKid()]; + return child.properties.getPropValue("loiDebit"); + } + protected populate() { // possible values depend on CalcType // get current structure type from appropriate Nub child - const child = this.nub.getChildren()[this.parent.indexAsKid()]; - const la = (this.nub as ParallelStructure).getLoisAdmissibles(); - const loiDebit = child.properties.getPropValue("loiDebit"); + const la = this.nub.getLoisAdmissibles(); + const loiDebit: LoiDebit = this.loiDebit; const stCode = StructureProperties.findCompatibleStructure(loiDebit, this.nub as ParallelStructure); const stName = StructureType[stCode]; if (la[stName] !== undefined) { @@ -40,6 +54,7 @@ export class SelectFieldDeviceLoiDebit extends SelectField { } protected initSelectedValue() { - this.findAndSetDefaultValue(); + // current discharge law from linked nub + this.findAndSetDefaultValue(LoiDebit[this.loiDebit]); } } diff --git a/src/app/formulaire/elements/select/select-field-factory.ts b/src/app/formulaire/elements/select/select-field-factory.ts index c7ae60316..49fed0c91 100644 --- a/src/app/formulaire/elements/select/select-field-factory.ts +++ b/src/app/formulaire/elements/select/select-field-factory.ts @@ -13,12 +13,24 @@ import { SelectFieldTargetPass } from "./select-field-target-pass"; import { SelectFieldNubProperty } from "./select-field-nub-prop"; export class SelectFieldFactory { + /** + * Id of the select linked to structure type (JSON calculator configuration). + * Also used in fieldset template parsing. + */ + public static readonly SelectId_StructureType: string ="select_structure"; + + /** + * Id of the select linked to stage discharge law (JSON calculator configuration). + * Also used in fieldset template parsing. + */ + public static readonly SelectId_LoiDebit: string ="select_loidebit"; + public static newSelectField(json: {}, parent: FormulaireNode): SelectField { switch (json["id"]) { case "select_downstream_basin": return new SelectFieldDownstreamBasin(parent); - case "select_loidebit": + case SelectFieldFactory.SelectId_LoiDebit: return new SelectFieldDeviceLoiDebit(parent); case "select_searched_param": @@ -27,7 +39,7 @@ export class SelectFieldFactory { case "select_species_list": return new SelectFieldSpeciesList(parent); - case "select_structure": + case SelectFieldFactory.SelectId_StructureType: return new SelectFieldDeviceStructureType(parent); case "select_target": diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index f76690de4..5e490c754 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -125,11 +125,13 @@ export abstract class SelectField extends Field { /** * try to find a default value to select */ - protected findAndSetDefaultValue() { + protected findAndSetDefaultValue(value?: string) { // default to first available entry if any if (this._entries.length > 0) { - let val; - if (this._configDefaultValue === undefined) { + let val: SelectEntry; + if (value !== undefined) { + val = this.getEntryFromValue(enumValueFromString(this._associatedProperty, value)); + } else if (this._configDefaultValue === undefined) { val = this._entries[0]; } else { val = this.getEntryFromValue(enumValueFromString(this._associatedProperty, this._configDefaultValue)); -- GitLab From 95eff5263ff0df3396af7aed1543740fa005bb34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 8 Nov 2022 14:58:05 +0100 Subject: [PATCH 033/285] fix: backwater curve: wrong Y value passed to generated parametric section, remove button in select entries refs #496 --- src/app/app.module.ts | 2 - .../section-details-entry.component.html | 6 -- .../section-details-entry.component.scss | 0 .../section-details-entry.component.ts | 55 ------------------- .../select-section-details.component.html | 6 +- .../select-section-details.component.ts | 24 ++++++++ src/app/results/remous-results.ts | 41 +++++++++++--- 7 files changed, 60 insertions(+), 74 deletions(-) delete mode 100644 src/app/components/section-details-entry/section-details-entry.component.html delete mode 100644 src/app/components/section-details-entry/section-details-entry.component.scss delete mode 100644 src/app/components/section-details-entry/section-details-entry.component.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 702dabc0e..43b3b0b91 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -123,7 +123,6 @@ import { DialogConfirmLoadSessionURLComponent } from "./components/dialog-confir import { StructureFieldsetContainerComponent } from "./components/structure-fieldset-container/structure-fieldset-container.component"; import { BasinFieldsetContainerComponent } from "./components/basin-fieldset-container/basin-fieldset-container.component"; import { PrebarrageService } from "./services/prebarrage.service"; -import { SectionDetailsEntryComponent } from "./components/section-details-entry/section-details-entry.component"; import { SelectSectionDetailsComponent } from "./components/select-section-details/select-section-details.component"; const appRoutes: Routes = [ @@ -260,7 +259,6 @@ const appRoutes: Routes = [ SessionPropertiesComponent, VarResultsComponent, VerificateurResultsComponent, - SectionDetailsEntryComponent, SelectSectionDetailsComponent ], providers: [ // services diff --git a/src/app/components/section-details-entry/section-details-entry.component.html b/src/app/components/section-details-entry/section-details-entry.component.html deleted file mode 100644 index 7ce439984..000000000 --- a/src/app/components/section-details-entry/section-details-entry.component.html +++ /dev/null @@ -1,6 +0,0 @@ -<div fxLayout="row wrap" fxLayoutGap="10px"> - <p>{{label}}</p> - <button mat-raised-button color="accent" id="generate-cr-sp" (click)="generateCrSp()"> - {{ uitextGenerateRuSp }} - </button> -</div> diff --git a/src/app/components/section-details-entry/section-details-entry.component.scss b/src/app/components/section-details-entry/section-details-entry.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/app/components/section-details-entry/section-details-entry.component.ts b/src/app/components/section-details-entry/section-details-entry.component.ts deleted file mode 100644 index 477c7486f..000000000 --- a/src/app/components/section-details-entry/section-details-entry.component.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Component, Input } from '@angular/core'; -import { Router } from '@angular/router'; -import { FormulaireDefinition } from 'app/formulaire/definition/form-definition'; -import { FormulaireService } from 'app/services/formulaire.service'; -import { I18nService } from 'app/services/internationalisation.service'; -import { fv } from 'app/util'; -import { formattedValue } from 'jalhyd'; - -/** - * Bouton d'ouverture des détails de section hydraulique pour chaque point du graphe de "courbes de remous". - * Utilisé comme entrées d'un select. - */ -@Component({ - selector: 'section-details-entry', - templateUrl: './section-details-entry.component.html', - styleUrls: ['./section-details-entry.component.scss'] -}) -export class SectionDetailsEntryComponent { - private _point: any; - - @Input() - private set point(p: any) { - this._point = p; - } - - constructor( - private intlService: I18nService, - private formulaireService: FormulaireService, - private router: Router - ) { } - - public get label(): string { - if (this._point === undefined) { - return undefined; - } - return "x : " + formattedValue(this._point.x, 1) + " y : " + fv(this._point.y); - } - - public get uitextGenerateRuSp() { - return this.intlService.localizeText("INFO_CALCULATOR_RESULTS_GENERATE_RU_SP"); - } - - /** - * Génère une SectionParametree à partir du module en cours - */ - public async generateCrSp() { - const f: FormulaireDefinition = await this.formulaireService.generateParametricSectionForm(this._point.y); - - // calculate form - f.doCompute(); - - // go to new form - this.router.navigate(["/calculator", f.uid]); - } -} diff --git a/src/app/components/select-section-details/select-section-details.component.html b/src/app/components/select-section-details/select-section-details.component.html index bbb74ee25..4b3a06f5c 100644 --- a/src/app/components/select-section-details/select-section-details.component.html +++ b/src/app/components/select-section-details/select-section-details.component.html @@ -1,5 +1,5 @@ -<mat-select [placeholder]="uitextPlaceholder"> - <mat-option *ngFor="let p of points"> - <section-details-entry [point]=p></section-details-entry> +<mat-select [placeholder]="uitextPlaceholder" (selectionChange)="generateCrSp($event.value)"> + <mat-option *ngFor="let p of points" [value]="p"> + {{ pointLabel(p) }} </mat-option> </mat-select> \ No newline at end of file diff --git a/src/app/components/select-section-details/select-section-details.component.ts b/src/app/components/select-section-details/select-section-details.component.ts index 811e73291..58516fc2d 100644 --- a/src/app/components/select-section-details/select-section-details.component.ts +++ b/src/app/components/select-section-details/select-section-details.component.ts @@ -1,4 +1,9 @@ import { Component, Input } from '@angular/core'; +import { Router } from '@angular/router'; +import { FormulaireDefinition } from 'app/formulaire/definition/form-definition'; +import { FormulaireService } from 'app/services/formulaire.service'; +import { fv } from 'app/util'; +import { formattedValue } from 'jalhyd'; /** * liste déroulante de boutons de génération de formulaire "section paramétrée" @@ -25,8 +30,27 @@ export class SelectSectionDetailsComponent { } constructor( + private formulaireService: FormulaireService, + private router: Router ) { } + public pointLabel(p: any): string { + return "x : " + formattedValue(p.x, 1) + " y : " + fv(p.z); + } + + /** + * Génère une SectionParametree à partir du module en cours + */ + public async generateCrSp(p: any) { + const f: FormulaireDefinition = await this.formulaireService.generateParametricSectionForm(p.y); + + // calculate form + f.doCompute(); + + // go to new form + this.router.navigate(["/calculator", f.uid]); + } + public get uitextPlaceholder() { return "Générer une section paramétrée pour..."; } diff --git a/src/app/results/remous-results.ts b/src/app/results/remous-results.ts index 6b64caaf8..20f412f13 100644 --- a/src/app/results/remous-results.ts +++ b/src/app/results/remous-results.ts @@ -15,6 +15,12 @@ export class RemousResults extends CalculatorResults { /** pas de discrétisation */ private _Dx: number; + /** cote de fond amont */ + private _ZF1: number; + + /** cote de fond aval */ + private _ZF2: number; + /** longueur du bief */ private _Long: number; @@ -80,17 +86,19 @@ export class RemousResults extends CalculatorResults { } public set parameters(p: CourbeRemousParams) { + const nub = p.parent as Nub; + // pente du fond - this._penteFond = (p.parent as Nub).getParameter("If").singleValue; + this._penteFond = nub.getParameter("If").singleValue; // hauteur de berge - this._hautBerge = (p.parent as Nub).getParameter("YB").singleValue; + this._hautBerge = nub.getParameter("YB").singleValue; // longueur du bief - this._Long = (p.parent as Nub).getParameter("Long").singleValue; + this._Long = nub.getParameter("Long").singleValue; // pas d'espace - this._Dx = (p.parent as Nub).getParameter("Dx").singleValue; + this._Dx = nub.getParameter("Dx").singleValue; // série de valeurs de X this._xValues = new ParamDefinition( @@ -98,6 +106,12 @@ export class RemousResults extends CalculatorResults { "ABSCISSE", ParamDomainValue.POS_NULL ); + + // cote de fond amont + this._ZF1 = nub.getParameter("ZF1").singleValue; + + // cote de fond aval + this._ZF2 = nub.getParameter("ZF2").singleValue; } public get log(): cLog { @@ -125,10 +139,21 @@ export class RemousResults extends CalculatorResults { private updatePoints() { this._points = this._result.resultElements.map((re) => { - let Y = re.getValue("flu"); - if (Y === undefined) - Y = re.getValue("tor"); - return { x: re.getValue("X"), y: Y }; + const X = re.getValue("X"); + + // cote de fond + const k = X / this._Long; + const Zf = (this._ZF2 - this._ZF1) * k + this._ZF1; + + // cote de l'eau + let Z = re.getValue("flu"); + if (Z === undefined) + Z = re.getValue("tor"); + + // tirant d'eau + const Y = Z - Zf; + + return { x: X, y: Y, z: Z }; }); } -- GitLab From 8af5883962505deaf78bc72bd885f40774b3b0b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 17 Nov 2022 08:55:49 +0100 Subject: [PATCH 034/285] update package-lock.json to Angular 14.2.11 (@angular/core@14.2.11) refs #445 --- package-lock.json | 14521 ++++++++++++++++++++++++++++++++------------ 1 file changed, 10644 insertions(+), 3877 deletions(-) diff --git a/package-lock.json b/package-lock.json index 61928cec4..8d29777e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -141,14 +141,21 @@ "ieee754": "^1.2.1" } }, + "node_modules/@adobe/css-tools": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", + "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" + }, "node_modules/@aduh95/viz.js": { "version": "3.7.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.7.0.tgz", + "integrity": "sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng==", + "dev": true }, "node_modules/@ampproject/remapping": { "version": "2.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -158,10 +165,11 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1401.0", - "license": "MIT", + "version": "0.1402.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.9.tgz", + "integrity": "sha512-I0KTpmtukxq447CkdzKonFpIytRnvC77WuwnX4Sef32EM9KqmeNvfy/gZwm08Lqi4mOAC/iTCajXH1TN/4xllA==", "dependencies": { - "@angular-devkit/core": "14.1.0", + "@angular-devkit/core": "14.2.9", "rxjs": "6.6.7" }, "engines": { @@ -172,7 +180,8 @@ }, "node_modules/@angular-devkit/architect/node_modules/rxjs": { "version": "6.6.7", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { "tslib": "^1.9.0" }, @@ -182,36 +191,38 @@ }, "node_modules/@angular-devkit/architect/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@angular-devkit/build-angular": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.9.tgz", + "integrity": "sha512-/6ul4JLpiKLB4+PJzDF7twgZf28GNHxxJKsheymrxC+ZRMGoMsJCzoU/dmOXE2YY8yGxAFnrTAVIJYomn+QnZQ==", "dependencies": { "@ampproject/remapping": "2.2.0", - "@angular-devkit/architect": "0.1401.0", - "@angular-devkit/build-webpack": "0.1401.0", - "@angular-devkit/core": "14.1.0", - "@babel/core": "7.18.6", - "@babel/generator": "7.18.7", + "@angular-devkit/architect": "0.1402.9", + "@angular-devkit/build-webpack": "0.1402.9", + "@angular-devkit/core": "14.2.9", + "@babel/core": "7.18.10", + "@babel/generator": "7.18.12", "@babel/helper-annotate-as-pure": "7.18.6", - "@babel/plugin-proposal-async-generator-functions": "7.18.6", + "@babel/plugin-proposal-async-generator-functions": "7.18.10", "@babel/plugin-transform-async-to-generator": "7.18.6", - "@babel/plugin-transform-runtime": "7.18.6", - "@babel/preset-env": "7.18.6", - "@babel/runtime": "7.18.6", - "@babel/template": "7.18.6", + "@babel/plugin-transform-runtime": "7.18.10", + "@babel/preset-env": "7.18.10", + "@babel/runtime": "7.18.9", + "@babel/template": "7.18.10", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "14.1.0", + "@ngtools/webpack": "14.2.9", "ansi-colors": "4.1.3", "babel-loader": "8.2.5", "babel-plugin-istanbul": "6.1.1", "browserslist": "^4.9.1", - "cacache": "16.1.1", + "cacache": "16.1.2", "copy-webpack-plugin": "11.0.0", "critters": "0.0.16", "css-loader": "6.7.1", - "esbuild-wasm": "0.14.49", + "esbuild-wasm": "0.15.5", "glob": "8.0.3", "https-proxy-agent": "5.0.1", "inquirer": "8.2.4", @@ -227,27 +238,27 @@ "ora": "5.4.1", "parse5-html-rewriting-stream": "6.0.1", "piscina": "3.2.0", - "postcss": "8.4.14", - "postcss-import": "14.1.0", + "postcss": "8.4.16", + "postcss-import": "15.0.0", "postcss-loader": "7.0.1", - "postcss-preset-env": "7.7.2", + "postcss-preset-env": "7.8.0", "regenerator-runtime": "0.13.9", "resolve-url-loader": "5.0.0", "rxjs": "6.6.7", - "sass": "1.53.0", + "sass": "1.54.4", "sass-loader": "13.0.2", "semver": "7.3.7", "source-map-loader": "4.0.0", "source-map-support": "0.5.21", - "stylus": "0.58.1", + "stylus": "0.59.0", "stylus-loader": "7.0.0", "terser": "5.14.2", "text-table": "0.2.0", "tree-kill": "1.2.2", "tslib": "2.4.0", - "webpack": "5.73.0", + "webpack": "5.74.0", "webpack-dev-middleware": "5.3.3", - "webpack-dev-server": "4.9.3", + "webpack-dev-server": "4.11.0", "webpack-merge": "5.8.0", "webpack-subresource-integrity": "5.1.0" }, @@ -257,7 +268,7 @@ "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.14.49" + "esbuild": "0.15.5" }, "peerDependencies": { "@angular/compiler-cli": "^14.0.0", @@ -267,7 +278,7 @@ "ng-packagr": "^14.0.0", "protractor": "^7.0.0", "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.6.2 <4.8" + "typescript": ">=4.6.2 <4.9" }, "peerDependenciesMeta": { "@angular/localize": { @@ -292,7 +303,8 @@ }, "node_modules/@angular-devkit/build-angular/node_modules/ajv": { "version": "6.12.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -306,18 +318,29 @@ }, "node_modules/@angular-devkit/build-angular/node_modules/ajv-keywords": { "version": "3.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peerDependencies": { "ajv": "^6.9.1" } }, + "node_modules/@angular-devkit/build-angular/node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "engines": { + "node": ">= 10" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/json-schema-traverse": { "version": "0.4.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { "version": "6.6.7", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { "tslib": "^1.9.0" }, @@ -327,11 +350,13 @@ }, "node_modules/@angular-devkit/build-angular/node_modules/rxjs/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@angular-devkit/build-angular/node_modules/schema-utils": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -345,20 +370,26 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, "node_modules/@angular-devkit/build-angular/node_modules/webpack": { - "version": "5.73.0", - "license": "MIT", + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", + "acorn": "^8.7.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.3", + "enhanced-resolve": "^5.10.0", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -371,7 +402,7 @@ "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", + "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, "bin": { @@ -390,11 +421,115 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/webpack-dev-server": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz", + "integrity": "sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/@angular-devkit/build-angular/node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1401.0", - "license": "MIT", + "version": "0.1402.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.9.tgz", + "integrity": "sha512-J+bseVpEqHAfxvTKYNoo6B+5TmnkQmEn9aNMEiQ+hv8pQyuW3DCWZ6jOQrfCpJzCYMBdrQALfaRpsQuB92UPVw==", "dependencies": { - "@angular-devkit/architect": "0.1401.0", + "@angular-devkit/architect": "0.1402.9", "rxjs": "6.6.7" }, "engines": { @@ -409,7 +544,8 @@ }, "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { "version": "6.6.7", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { "tslib": "^1.9.0" }, @@ -419,11 +555,13 @@ }, "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@angular-devkit/core": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.9.tgz", + "integrity": "sha512-+e2OmzH/0gjNNH96xJDgshbuIM/NPSwE0NQlgU/KRb8TZt+7ooTmZJ1vk25HKV2YS99BEYzUSqvVAaJtxX/6Qw==", "dependencies": { "ajv": "8.11.0", "ajv-formats": "2.1.1", @@ -447,7 +585,8 @@ }, "node_modules/@angular-devkit/core/node_modules/rxjs": { "version": "6.6.7", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { "tslib": "^1.9.0" }, @@ -457,14 +596,16 @@ }, "node_modules/@angular-devkit/core/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@angular-devkit/schematics": { - "version": "14.1.0", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.9.tgz", + "integrity": "sha512-E7muTIbDqysjQld5r9AGXiW8vKHadkHaGe+0QONpmr8TMAtTMqBFxBXRG9vajiUzt/GcFL9dbGGEwM/1dc7VPQ==", "dev": true, - "license": "MIT", "dependencies": { - "@angular-devkit/core": "14.1.0", + "@angular-devkit/core": "14.2.9", "jsonc-parser": "3.1.0", "magic-string": "0.26.2", "ora": "5.4.1", @@ -478,8 +619,9 @@ }, "node_modules/@angular-devkit/schematics/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -489,21 +631,24 @@ }, "node_modules/@angular-devkit/schematics/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "14.0.2", - "dev": true, - "license": "MIT" + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-14.2.0.tgz", + "integrity": "sha512-s0xaBaO8z+YjIQjGxcffIHC2lnkbfZhfmPiUYJHMBquCG0bIHSwVOxLbh3hEei1E3Um+2LXxK2Y9MuPHRFoMYA==", + "dev": true }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "14.0.2", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-14.2.0.tgz", + "integrity": "sha512-YlP/kXqNBtz/xWYtVO11DhKwvXSfd040OIL6bP3JpuKQw2c0Ma+ENGvDUAum1R6WDBOs4NQOgdjZMyUdLYTgog==", "dev": true, - "license": "MIT", "dependencies": { - "@angular-eslint/utils": "14.0.2", - "@typescript-eslint/utils": "5.29.0" + "@angular-eslint/utils": "14.2.0", + "@typescript-eslint/utils": "5.43.0" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0", @@ -511,12 +656,13 @@ } }, "node_modules/@angular-eslint/utils": { - "version": "14.0.2", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-14.2.0.tgz", + "integrity": "sha512-qTviGL4DbJT5pGIqSiISBrrOaJMsf+SHYOMFzjaBxX/mY4PfpsLLHV85IzqtlQDJ48FkMYTsbznupac85AwjJQ==", "dev": true, - "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "14.0.2", - "@typescript-eslint/utils": "5.29.0" + "@angular-eslint/bundled-angular-compiler": "14.2.0", + "@typescript-eslint/utils": "5.43.0" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0", @@ -524,8 +670,9 @@ } }, "node_modules/@angular/animations": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.2.11.tgz", + "integrity": "sha512-HOw8xecbKfs7A5Ezjf+BfXKvvwU7X8I0US5Ey6bOuLvpA3QVOGSLw9BeutY5Q2mPWiRgnNNQW+FOd8Pe9gEkpQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -533,12 +680,13 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "14.1.0" + "@angular/core": "14.2.11" } }, "node_modules/@angular/cdk": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.7", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-14.2.7.tgz", + "integrity": "sha512-/tEsYaUbDSnfEmKVvAMramIptmhI67O+9STjOV0i+74XR2NospeK0fkbywIANu1n3w6AHGMotvRWJrjmbCElFg==", "dependencies": { "tslib": "^2.3.0" }, @@ -552,14 +700,15 @@ } }, "node_modules/@angular/cli": { - "version": "14.1.0", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.9.tgz", + "integrity": "sha512-1cQE7mRrPyzk1sg2UwpbQ/sXQyPukPKdN69o4Bn59Scfl/4wUh53WRPAAHXNudgPYT2ZT3s9Jj2E1cdhi+gxyQ==", "dev": true, - "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1401.0", - "@angular-devkit/core": "14.1.0", - "@angular-devkit/schematics": "14.1.0", - "@schematics/angular": "14.1.0", + "@angular-devkit/architect": "0.1402.9", + "@angular-devkit/core": "14.2.9", + "@angular-devkit/schematics": "14.2.9", + "@schematics/angular": "14.2.9", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "debug": "4.3.4", @@ -570,7 +719,7 @@ "npm-pick-manifest": "7.0.1", "open": "8.4.0", "ora": "5.4.1", - "pacote": "13.6.1", + "pacote": "13.6.2", "resolve": "1.22.1", "semver": "7.3.7", "symbol-observable": "4.0.0", @@ -587,8 +736,9 @@ } }, "node_modules/@angular/common": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.11.tgz", + "integrity": "sha512-a5w7lz4SoUzCwSDnuUPnfbEYPA8ufFiXz44mOv48P4uIb78q3rZ/R/EyWD1O3yJPof0o8aPNKpKZzuRDv3Q8ow==", "dependencies": { "tslib": "^2.3.0" }, @@ -596,13 +746,14 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "14.1.0", + "@angular/core": "14.2.11", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.11.tgz", + "integrity": "sha512-QD4tq37qqPxxNK4o0Pd7dJm06evwEPChV67S/ecX3S6UkSDp8lVoWKiVx9htp/5s4iydKZU4eGu9oTOMOLVdOw==", "dependencies": { "tslib": "^2.3.0" }, @@ -610,7 +761,7 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "14.1.0" + "@angular/core": "14.2.11" }, "peerDependenciesMeta": { "@angular/core": { @@ -619,8 +770,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.11.tgz", + "integrity": "sha512-ipIEgueW8bhxVSq6qlgndBLVRCJoTvk1he/TI3w34m2EnZY1ctgGGCm1VbB3XARh+irVesPVMIAxRtjYds7XOw==", "dependencies": { "@babel/core": "^7.17.2", "chokidar": "^3.0.0", @@ -642,13 +794,14 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/compiler": "14.1.0", - "typescript": ">=4.6.2 <4.8" + "@angular/compiler": "14.2.11", + "typescript": ">=4.6.2 <4.9" } }, "node_modules/@angular/core": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.11.tgz", + "integrity": "sha512-4uEIA6ESMLt2f/ivKuVBpME0IbuFHWmpweN4dwJt83DfJBiBfpqdrFYZHz/Kbkh9cGCiP7L4/eKPRWTlAHehhw==", "dependencies": { "tslib": "^2.3.0" }, @@ -657,12 +810,14 @@ }, "peerDependencies": { "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.11.4" + "zone.js": "~0.11.4 || ~0.12.0" } }, "node_modules/@angular/flex-layout": { - "version": "14.0.0-beta.40", - "license": "MIT", + "version": "14.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-14.0.0-beta.41.tgz", + "integrity": "sha512-x1YcxqkdFlcbVXEy9ebCgW/F+7n/MXkEkwEcVEIPf5v5qn7HZsjQxgIj35Lf0amvMyF7h35prpoxO1uX5+ntFg==", + "deprecated": "This package has been deprecated. Please see https://blog.angular.io/modern-css-in-angular-layouts-4a259dca9127", "dependencies": { "tslib": "^2.3.0" }, @@ -675,8 +830,9 @@ } }, "node_modules/@angular/forms": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.11.tgz", + "integrity": "sha512-sItoA3/I8j/pf3zhv8sR37M5dAYUJpezv8rw2fTT2Y+nZJFUpkFWqX2N4qpMlPY0MP9OX++8K8/d2j0Lfi3wJQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -684,29 +840,31 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "14.1.0", - "@angular/core": "14.1.0", - "@angular/platform-browser": "14.1.0", + "@angular/common": "14.2.11", + "@angular/core": "14.2.11", + "@angular/platform-browser": "14.2.11", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-14.2.11.tgz", + "integrity": "sha512-YOQ7zVnRkZaIlAwA+u+x+wUGlvvKQDR+CGkIF19L/C0Zo6b8vFmfcNqWig6Wq8sRwS+5fULcPoOAESaUwq3urw==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || >=16.10.0" } }, "node_modules/@angular/material": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.7", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-14.2.7.tgz", + "integrity": "sha512-WXHh8pEStpgkXZJmYOg2cI8BSHkV82ET4XTJCNPdveumaCn1UYnaNzsXD13kw5z+zmy8CufhFEzdXTrv/yt7KQ==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { "@angular/animations": "^14.0.0 || ^15.0.0", - "@angular/cdk": "14.1.0", + "@angular/cdk": "14.2.7", "@angular/common": "^14.0.0 || ^15.0.0", "@angular/core": "^14.0.0 || ^15.0.0", "@angular/forms": "^14.0.0 || ^15.0.0", @@ -715,8 +873,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.11.tgz", + "integrity": "sha512-lGi9pF0Kf/GGrVKcfxxfStM2eMSluDTmbcYuVAX28iBn5XEdfsonrkfy2cnxUMnQ7nioMAZBNGOJHbQPKz4jwg==", "dependencies": { "tslib": "^2.3.0" }, @@ -724,9 +883,9 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/animations": "14.1.0", - "@angular/common": "14.1.0", - "@angular/core": "14.1.0" + "@angular/animations": "14.2.11", + "@angular/common": "14.2.11", + "@angular/core": "14.2.11" }, "peerDependenciesMeta": { "@angular/animations": { @@ -735,8 +894,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.11.tgz", + "integrity": "sha512-kjcZda+gcAiYd0I3mjLSr6xR/HkUCnmIMyqaFGoHnIDXI2c6wLDxi49pivrJFvUYJPfYAJ6GjlYTM6L9B3XSEQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -744,15 +904,16 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "14.1.0", - "@angular/compiler": "14.1.0", - "@angular/core": "14.1.0", - "@angular/platform-browser": "14.1.0" + "@angular/common": "14.2.11", + "@angular/compiler": "14.2.11", + "@angular/core": "14.2.11", + "@angular/platform-browser": "14.2.11" } }, "node_modules/@angular/router": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.11.tgz", + "integrity": "sha512-AbnyKXabar2WsG3fL24O1xdwkcRhRKI7u2vc9D8bcp2ks5GOJNxfbtG2Z6PSO18vtDszQxwELRe2cOEe+0TmPQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -760,19 +921,21 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "14.1.0", - "@angular/core": "14.1.0", - "@angular/platform-browser": "14.1.0", + "@angular/common": "14.2.11", + "@angular/core": "14.2.11", + "@angular/platform-browser": "14.2.11", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@assemblyscript/loader": { "version": "0.10.1", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" }, "node_modules/@babel/code-frame": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -781,26 +944,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.18.8", - "license": "MIT", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.6", - "license": "MIT", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helpers": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -817,16 +982,18 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.18.7", - "license": "MIT", + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", "dependencies": { - "@babel/types": "^7.18.7", + "@babel/types": "^7.18.10", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -836,7 +1003,8 @@ }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -848,7 +1016,8 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dependencies": { "@babel/types": "^7.18.6" }, @@ -858,7 +1027,8 @@ }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dependencies": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -868,12 +1038,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "license": "MIT", + "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==", "dependencies": { - "@babel/compat-data": "^7.18.8", + "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "engines": { @@ -885,21 +1056,23 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-member-expression-to-functions": "^7.18.9", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-replace-supers": "^7.19.1", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -910,8 +1083,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "license": "MIT", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.1.0" @@ -924,8 +1098,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.2", - "license": "MIT", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -940,21 +1115,24 @@ }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { "version": "6.3.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dependencies": { "@babel/types": "^7.18.6" }, @@ -963,11 +1141,12 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "license": "MIT", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -975,7 +1154,8 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dependencies": { "@babel/types": "^7.18.6" }, @@ -985,7 +1165,8 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", "dependencies": { "@babel/types": "^7.18.9" }, @@ -995,7 +1176,8 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dependencies": { "@babel/types": "^7.18.6" }, @@ -1004,17 +1186,18 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@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" @@ -1022,7 +1205,8 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dependencies": { "@babel/types": "^7.18.6" }, @@ -1031,15 +1215,17 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "license": "MIT", + "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==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -1054,34 +1240,37 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.18.9", - "license": "MIT", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.18.9", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "license": "MIT", + "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==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -1089,7 +1278,8 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dependencies": { "@babel/types": "^7.18.6" }, @@ -1097,40 +1287,52 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "license": "MIT", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.18.9", - "license": "MIT", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", "dependencies": { - "@babel/helper-function-name": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -1138,7 +1340,8 @@ }, "node_modules/@babel/highlight": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -1149,8 +1352,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1160,7 +1364,8 @@ }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1173,7 +1378,8 @@ }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -1187,12 +1393,13 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.6", - "license": "MIT", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", + "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -1204,7 +1411,8 @@ }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1218,7 +1426,8 @@ }, "node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -1233,7 +1442,8 @@ }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -1247,7 +1457,8 @@ }, "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -1261,7 +1472,8 @@ }, "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1275,7 +1487,8 @@ }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1289,7 +1502,8 @@ }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1303,7 +1517,8 @@ }, "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1316,14 +1531,15 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" + "@babel/plugin-transform-parameters": "^7.20.1" }, "engines": { "node": ">=6.9.0" @@ -1334,7 +1550,8 @@ }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -1348,7 +1565,8 @@ }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -1363,7 +1581,8 @@ }, "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1377,7 +1596,8 @@ }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -1393,7 +1613,8 @@ }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1407,7 +1628,8 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1417,7 +1639,8 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1427,7 +1650,8 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1440,7 +1664,8 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1450,7 +1675,8 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1459,10 +1685,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "license": "MIT", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1473,7 +1700,8 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1483,7 +1711,8 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1493,7 +1722,8 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1503,7 +1733,8 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1513,7 +1744,8 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1523,7 +1755,8 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1533,7 +1766,8 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1543,7 +1777,8 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1556,7 +1791,8 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1569,7 +1805,8 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1582,7 +1819,8 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -1597,7 +1835,8 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1609,10 +1848,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1622,15 +1862,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, @@ -1643,7 +1885,8 @@ }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1655,10 +1898,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1669,7 +1913,8 @@ }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1683,7 +1928,8 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1696,7 +1942,8 @@ }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1710,7 +1957,8 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.18.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1723,7 +1971,8 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dependencies": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", @@ -1738,7 +1987,8 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1751,7 +2001,8 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1763,12 +2014,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "license": "MIT", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1778,13 +2029,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "license": "MIT", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -1794,14 +2045,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.9", - "license": "MIT", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" }, "engines": { "node": ">=6.9.0" @@ -1812,7 +2063,8 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1825,11 +2077,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "license": "MIT", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1840,7 +2093,8 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1853,7 +2107,8 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" @@ -1866,10 +2121,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "license": "MIT", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1880,7 +2136,8 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1893,7 +2150,8 @@ }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" @@ -1907,7 +2165,8 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1919,14 +2178,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.18.6", - "license": "MIT", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", + "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", "dependencies": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", + "@babel/helper-plugin-utils": "^7.18.9", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", "semver": "^6.3.0" }, "engines": { @@ -1938,14 +2198,16 @@ }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { "version": "6.3.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1957,10 +2219,11 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.18.9", - "license": "MIT", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" }, "engines": { @@ -1972,7 +2235,8 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1985,7 +2249,8 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1998,7 +2263,8 @@ }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.18.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -2010,10 +2276,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.6", - "license": "MIT", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -2024,7 +2291,8 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.18.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -2037,27 +2305,28 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.18.6", - "license": "MIT", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", + "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", "dependencies": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-validator-option": "^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6", - "@babel/plugin-proposal-async-generator-functions": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-class-static-block": "^7.18.6", "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", "@babel/plugin-proposal-private-methods": "^7.18.6", "@babel/plugin-proposal-private-property-in-object": "^7.18.6", "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", @@ -2079,40 +2348,40 @@ "@babel/plugin-transform-arrow-functions": "^7.18.6", "@babel/plugin-transform-async-to-generator": "^7.18.6", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.6", - "@babel/plugin-transform-classes": "^7.18.6", - "@babel/plugin-transform-computed-properties": "^7.18.6", - "@babel/plugin-transform-destructuring": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.6", - "@babel/plugin-transform-function-name": "^7.18.6", - "@babel/plugin-transform-literals": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", "@babel/plugin-transform-member-expression-literals": "^7.18.6", "@babel/plugin-transform-modules-amd": "^7.18.6", "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", "@babel/plugin-transform-modules-umd": "^7.18.6", "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", "@babel/plugin-transform-property-literals": "^7.18.6", "@babel/plugin-transform-regenerator": "^7.18.6", "@babel/plugin-transform-reserved-words": "^7.18.6", "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.6", - "@babel/plugin-transform-typeof-symbol": "^7.18.6", - "@babel/plugin-transform-unicode-escapes": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", "core-js-compat": "^3.22.1", "semver": "^6.3.0" }, @@ -2125,14 +2394,16 @@ }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/preset-modules": { "version": "0.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -2145,8 +2416,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.18.6", - "license": "MIT", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -2155,29 +2427,31 @@ } }, "node_modules/@babel/template": { - "version": "7.18.6", - "license": "MIT", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", + "@babel/generator": "^7.20.1", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2186,10 +2460,11 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", "dependencies": { - "@babel/types": "^7.18.9", + "@babel/types": "^7.20.2", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -2199,7 +2474,8 @@ }, "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2210,10 +2486,12 @@ } }, "node_modules/@babel/types": { - "version": "7.18.9", - "license": "MIT", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2221,14 +2499,16 @@ } }, "node_modules/@braintree/sanitize-url": { - "version": "6.0.0", - "license": "MIT" + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" }, "node_modules/@compodoc/compodoc": { "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.19.tgz", + "integrity": "sha512-09vdSIgoAXWD1MiLZNhiljLNQ1XzHw/w5shw5IPcUImr/I+1Y52srUL46mEXN8AXo0hbHb5LZcgs70mmrOvY7Q==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "@angular-devkit/schematics": "^13.2.4", "@babel/core": "^7.17.5", @@ -2275,8 +2555,9 @@ }, "node_modules/@compodoc/compodoc/node_modules/@angular-devkit/core": { "version": "13.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.9.tgz", + "integrity": "sha512-XqCuIWyoqIsLABjV3GQL/+EiBCt3xVPPtNp3Mg4gjBsDLW7PEnvbb81yGkiZQmIsq4EIyQC/6fQa3VdjsCshGg==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "8.9.0", "ajv-formats": "2.1.1", @@ -2301,8 +2582,9 @@ }, "node_modules/@compodoc/compodoc/node_modules/@angular-devkit/schematics": { "version": "13.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.9.tgz", + "integrity": "sha512-oNHLNtwbtEJ0dYPPXy1NpfRdSiFsYBl7+ozJklLgNV/AEOxlSi2qlVx6DoxNVjz5XgQ7Z+eoVDMw7ewGPnGSyA==", "dev": true, - "license": "MIT", "dependencies": { "@angular-devkit/core": "13.3.9", "jsonc-parser": "3.0.0", @@ -2318,8 +2600,9 @@ }, "node_modules/@compodoc/compodoc/node_modules/ajv": { "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -2333,8 +2616,9 @@ }, "node_modules/@compodoc/compodoc/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2347,8 +2631,9 @@ }, "node_modules/@compodoc/compodoc/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2356,8 +2641,9 @@ }, "node_modules/@compodoc/compodoc/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2371,8 +2657,9 @@ }, "node_modules/@compodoc/compodoc/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2380,10 +2667,17 @@ "node": ">=7.0.0" } }, + "node_modules/@compodoc/compodoc/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/@compodoc/compodoc/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, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2401,29 +2695,33 @@ }, "node_modules/@compodoc/compodoc/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@compodoc/compodoc/node_modules/jsonc-parser": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true }, "node_modules/@compodoc/compodoc/node_modules/magic-string": { "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, - "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.4" } }, "node_modules/@compodoc/compodoc/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2433,8 +2731,9 @@ }, "node_modules/@compodoc/compodoc/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -2444,16 +2743,18 @@ }, "node_modules/@compodoc/compodoc/node_modules/source-map": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/@compodoc/compodoc/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2463,13 +2764,15 @@ }, "node_modules/@compodoc/compodoc/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@compodoc/live-server": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", + "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", "dev": true, - "license": "MIT", "dependencies": { "chokidar": "^3.5.2", "colors": "1.4.0", @@ -2495,8 +2798,9 @@ }, "node_modules/@compodoc/ngd-core": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.0.tgz", + "integrity": "sha512-nyBH7J7SJJ2AV6OeZhJ02kRtVB7ALnZJKgShjoL9CNmOFEj8AkdhP9qTBIgjaDrbsW5pF4nx32KQL2fT7RFnqw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", "fancy-log": "^1.3.3", @@ -2508,8 +2812,9 @@ }, "node_modules/@compodoc/ngd-core/node_modules/fancy-log": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", @@ -2522,8 +2827,9 @@ }, "node_modules/@compodoc/ngd-transformer": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.0.tgz", + "integrity": "sha512-Jo4VCMzIUtgIAdRmhHhOoRRE01gCjc5CyrUERRx0VgEzkkCm1Wmu/XHSsQP6tSpCYHBjERghqaDqH5DabkR2oQ==", "dev": true, - "license": "MIT", "dependencies": { "@aduh95/viz.js": "^3.1.0", "@compodoc/ngd-core": "~2.1.0", @@ -2536,8 +2842,9 @@ }, "node_modules/@compodoc/ngd-transformer/node_modules/fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, - "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -2550,8 +2857,9 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2561,16 +2869,18 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.0.5", - "license": "CC0-1.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", "dependencies": { "@csstools/selector-specificity": "^2.0.2", "postcss-selector-parser": "^6.0.10" @@ -2588,7 +2898,8 @@ }, "node_modules/@csstools/postcss-color-function": { "version": "1.1.1", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -2606,7 +2917,8 @@ }, "node_modules/@csstools/postcss-font-format-keywords": { "version": "1.0.1", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2623,7 +2935,8 @@ }, "node_modules/@csstools/postcss-hwb-function": { "version": "1.0.2", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2640,7 +2953,8 @@ }, "node_modules/@csstools/postcss-ic-unit": { "version": "1.0.1", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -2658,7 +2972,8 @@ }, "node_modules/@csstools/postcss-is-pseudo-class": { "version": "2.0.7", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", "dependencies": { "@csstools/selector-specificity": "^2.0.0", "postcss-selector-parser": "^6.0.10" @@ -2674,9 +2989,28 @@ "postcss": "^8.2" } }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, "node_modules/@csstools/postcss-normalize-display-values": { "version": "1.0.1", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2693,7 +3027,8 @@ }, "node_modules/@csstools/postcss-oklab-function": { "version": "1.1.1", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -2711,7 +3046,8 @@ }, "node_modules/@csstools/postcss-progressive-custom-properties": { "version": "1.3.0", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2724,7 +3060,26 @@ }, "node_modules/@csstools/postcss-stepped-value-functions": { "version": "1.0.1", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2741,7 +3096,8 @@ }, "node_modules/@csstools/postcss-trigonometric-functions": { "version": "1.0.2", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2758,7 +3114,8 @@ }, "node_modules/@csstools/postcss-unset-value": { "version": "1.0.2", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", "engines": { "node": "^12 || ^14 || >=16" }, @@ -2772,7 +3129,8 @@ }, "node_modules/@csstools/selector-specificity": { "version": "2.0.2", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", "engines": { "node": "^12 || ^14 || >=16" }, @@ -2787,8 +3145,9 @@ }, "node_modules/@develar/schema-utils": { "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" @@ -2803,8 +3162,9 @@ }, "node_modules/@develar/schema-utils/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2818,28 +3178,32 @@ }, "node_modules/@develar/schema-utils/node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/@develar/schema-utils/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "engines": { "node": ">=10.0.0" } }, "node_modules/@electron/get": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -2859,8 +3223,9 @@ }, "node_modules/@electron/get/node_modules/fs-extra": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -2872,32 +3237,36 @@ }, "node_modules/@electron/get/node_modules/jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/@electron/get/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@electron/get/node_modules/universalify": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/@electron/universal": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", + "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==", "dev": true, - "license": "MIT", "dependencies": { "@malept/cross-spawn-promise": "^1.1.0", "asar": "^3.1.0", @@ -2913,8 +3282,9 @@ }, "node_modules/@electron/universal/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2922,8 +3292,9 @@ }, "node_modules/@electron/universal/node_modules/fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, - "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -2936,8 +3307,9 @@ }, "node_modules/@electron/universal/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2946,9 +3318,9 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.31.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", - "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==", + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.0.tgz", + "integrity": "sha512-u0XZyvUF6Urb2cSivSXA8qXIpT/CxkHcdtZKoWusAzgzmsTWpg0F2FpWXsolHmMUyVY3dLWaoy+0ccJ5uf2QjA==", "dev": true, "dependencies": { "comment-parser": "1.3.1", @@ -2956,17 +3328,33 @@ "jsdoc-type-pratt-parser": "~3.1.0" }, "engines": { - "node": "^14 || ^16 || ^17 || ^18" + "node": "^14 || ^16 || ^17 || ^18 || ^19" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz", + "integrity": "sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", + "espree": "^9.4.0", "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -2976,12 +3364,16 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2995,13 +3387,15 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3009,8 +3403,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -3023,8 +3418,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3034,13 +3430,15 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3050,8 +3448,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3061,8 +3460,9 @@ }, "node_modules/@foliojs-fork/fontkit": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", "dev": true, - "license": "MIT", "dependencies": { "@foliojs-fork/restructure": "^2.0.2", "brfs": "^2.0.0", @@ -3078,8 +3478,9 @@ }, "node_modules/@foliojs-fork/linebreak": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", "dev": true, - "license": "MIT", "dependencies": { "base64-js": "1.3.1", "brfs": "^2.0.2", @@ -3088,13 +3489,15 @@ }, "node_modules/@foliojs-fork/linebreak/node_modules/base64-js": { "version": "1.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true }, "node_modules/@foliojs-fork/pdfkit": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", "dev": true, - "license": "MIT", "dependencies": { "@foliojs-fork/fontkit": "^1.9.1", "@foliojs-fork/linebreak": "^1.1.1", @@ -3104,21 +3507,24 @@ }, "node_modules/@foliojs-fork/restructure": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "dev": true }, "node_modules/@gar/promisify": { "version": "1.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" @@ -3126,8 +3532,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3135,8 +3542,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3144,14 +3552,29 @@ "node": "*" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -3165,14 +3588,16 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -3183,21 +3608,24 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { "version": "0.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -3205,7 +3633,8 @@ }, "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3217,22 +3646,27 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "license": "MIT", + "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==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@malept/cross-spawn-promise": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", "dev": true, "funding": [ { @@ -3244,7 +3678,6 @@ "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" } ], - "license": "Apache-2.0", "dependencies": { "cross-spawn": "^7.0.1" }, @@ -3254,8 +3687,9 @@ }, "node_modules/@malept/flatpak-bundler": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.0", @@ -3268,8 +3702,9 @@ }, "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, - "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -3282,7 +3717,8 @@ }, "node_modules/@netflix/nerror": { "version": "1.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@netflix/nerror/-/nerror-1.1.3.tgz", + "integrity": "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==", "dependencies": { "assert-plus": "^1.0.0", "extsprintf": "^1.4.0", @@ -3290,8 +3726,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "14.1.0", - "license": "MIT", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.9.tgz", + "integrity": "sha512-P2zgvsfSpN4BkNzZWnPKUVOzv3y/SUWdnx/nhAG5gsQkLBp0Vf2evwQnbPUKuCrbMpYd1V/5SHb48+0B6FbUtQ==", "engines": { "node": "^14.15.0 || >=16.10.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", @@ -3299,13 +3736,14 @@ }, "peerDependencies": { "@angular/compiler-cli": "^14.0.0", - "typescript": ">=4.6.2 <4.8", + "typescript": ">=4.6.2 <4.9", "webpack": "^5.54.0" } }, "node_modules/@ngx-matomo/tracker": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@ngx-matomo/tracker/-/tracker-3.2.0.tgz", + "integrity": "sha512-sSVnC9VXAo6RHwJ6ZNYdP5drIYct1ZjJIAhawgzYM9NV4yRM3l9H4tz9d8qilWIhWColrWhyIwQJ1hOWJX6x8g==", "dependencies": { "tslib": "^2.0.0" }, @@ -3316,7 +3754,8 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3327,14 +3766,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3344,8 +3785,9 @@ } }, "node_modules/@npmcli/fs": { - "version": "2.1.1", - "license": "ISC", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" @@ -3355,9 +3797,10 @@ } }, "node_modules/@npmcli/git": { - "version": "3.0.1", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", + "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^3.0.0", "lru-cache": "^7.4.4", @@ -3375,8 +3818,9 @@ }, "node_modules/@npmcli/installed-package-contents": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, - "license": "ISC", "dependencies": { "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" @@ -3389,8 +3833,10 @@ } }, "node_modules/@npmcli/move-file": { - "version": "2.0.0", - "license": "MIT", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -3401,16 +3847,18 @@ }, "node_modules/@npmcli/node-gyp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true, - "license": "ISC", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/promise-spawn": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, - "license": "ISC", "dependencies": { "infer-owner": "^1.0.4" }, @@ -3419,9 +3867,10 @@ } }, "node_modules/@npmcli/run-script": { - "version": "4.1.7", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", + "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", @@ -3434,12 +3883,13 @@ } }, "node_modules/@schematics/angular": { - "version": "14.1.0", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.9.tgz", + "integrity": "sha512-pt/eN+D9a6JeOjgqEdWP8lU6VQIoo3F8RcoVEVXHhjXzF2mIe1a3ZJTwY3ssdemKV4mZgseTJBG99/jxrHK0XQ==", "dev": true, - "license": "MIT", "dependencies": { - "@angular-devkit/core": "14.1.0", - "@angular-devkit/schematics": "14.1.0", + "@angular-devkit/core": "14.2.9", + "@angular-devkit/schematics": "14.2.9", "jsonc-parser": "3.1.0" }, "engines": { @@ -3450,16 +3900,18 @@ }, "node_modules/@sindresorhus/is": { "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dev": true, - "license": "MIT", "dependencies": { "defer-to-connect": "^1.0.1" }, @@ -3469,16 +3921,18 @@ }, "node_modules/@tootallnate/once": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/@ts-morph/common": { "version": "0.12.3", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.12.3.tgz", + "integrity": "sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "^3.2.7", "minimatch": "^3.0.4", @@ -3488,8 +3942,9 @@ }, "node_modules/@ts-morph/common/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3497,8 +3952,9 @@ }, "node_modules/@ts-morph/common/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3508,23 +3964,27 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true }, "node_modules/@types/base-64": { "version": "1.0.0", @@ -3533,7 +3993,8 @@ }, "node_modules/@types/body-parser": { "version": "1.19.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -3541,21 +4002,24 @@ }, "node_modules/@types/bonjour": { "version": "3.5.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { "version": "3.4.35", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { "version": "1.3.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -3563,15 +4027,17 @@ }, "node_modules/@types/debug": { "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", "dev": true, - "license": "MIT", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/eslint": { - "version": "8.4.5", - "license": "MIT", + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -3579,7 +4045,8 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -3587,11 +4054,13 @@ }, "node_modules/@types/estree": { "version": "0.0.51", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "node_modules/@types/express": { - "version": "4.17.13", - "license": "MIT", + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -3600,8 +4069,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.29", - "license": "MIT", + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3610,21 +4080,24 @@ }, "node_modules/@types/file-saver": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==", + "dev": true }, "node_modules/@types/fs-extra": { "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "@types/minimatch": "*", @@ -3633,147 +4106,197 @@ }, "node_modules/@types/http-proxy": { "version": "1.17.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/jasmine": { "version": "4.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", + "integrity": "sha512-Opp1LvvEuZdk8fSSvchK2mZwhVrsNT0JgJE9Di6MjnaIpmEXM8TLCPPrVtNTYh8+5MPdY8j9bAHMu2SSfwpZJg==", + "dev": true }, "node_modules/@types/jasminewd2": { "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.10.tgz", + "integrity": "sha512-J7mDz7ovjwjc+Y9rR9rY53hFWKATcIkrr9DwQWmOas4/pnIPJTXawnzjwpHm3RSxz/e3ZVUvQ7cRbd5UQLo10g==", "dev": true, - "license": "MIT", "dependencies": { "@types/jasmine": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.11", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "node_modules/@types/json5": { "version": "0.0.29", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/marked": { - "version": "4.0.3", - "license": "MIT" + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.7.tgz", + "integrity": "sha512-eEAhnz21CwvKVW+YvRvcTuFKNU9CV1qH+opcgVK3pIMI6YZzDm6gc8o2vHjldFk6MGKt5pueSB7IOpvpx5Qekw==" }, "node_modules/@types/mime": { - "version": "1.3.2", - "license": "MIT" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/minimatch": { - "version": "3.0.5", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/@types/mousetrap": { - "version": "1.6.9", - "license": "MIT" + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.11.tgz", + "integrity": "sha512-F0oAily9Q9QQpv9JKxKn0zMKfOo36KHCW7myYsmUyf2t0g+sBTbG3UleTPoguHdE1z3GLFr3p7/wiOio52QFjQ==" }, "node_modules/@types/ms": { "version": "0.7.31", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true }, "node_modules/@types/node": { - "version": "18.6.1", - "license": "MIT" + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, "node_modules/@types/pako": { "version": "1.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.4.tgz", + "integrity": "sha512-Z+5bJSm28EXBSUJEgx29ioWeEEHUh6TiMkZHDhLwjc9wVFH+ressbkmX6waUZc5R3Gobn4Qu5llGxaoflZ+yhA==" }, "node_modules/@types/parse-json": { "version": "4.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } }, "node_modules/@types/q": { "version": "0.0.32", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==", + "devOptional": true }, "node_modules/@types/qs": { "version": "6.9.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, "node_modules/@types/range-parser": { "version": "1.2.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/retry": { "version": "0.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/selenium-webdriver": { "version": "3.0.20", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.20.tgz", + "integrity": "sha512-6d8Q5fqS9DWOXEhMDiF6/2FjyHdmP/jSTAUyeQR7QwrFeNmYyzmvGxD5aLIHL445HjWgibs0eAig+KPnbaesXA==", + "devOptional": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true }, "node_modules/@types/serve-index": { "version": "1.9.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.13.10", - "license": "MIT", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", "dependencies": { - "@types/mime": "^1", + "@types/mime": "*", "@types/node": "*" } }, "node_modules/@types/sockjs": { "version": "0.3.33", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/sprintf-js": { "version": "1.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-hkgzYF+qnIl8uTO8rmUSVSfQ8BIfMXC4yJAF4n8BE758YsKBZvFC4NumnAegj7KmylP0liEZNpb9RRGFMbFejA==" + }, + "node_modules/@types/verror": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", + "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==", + "dev": true, + "optional": true }, "node_modules/@types/ws": { "version": "8.5.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.10", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, - "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/type-utils": "5.31.0", - "@typescript-eslint/utils": "5.31.0", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" @@ -3796,11 +4319,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin-tslint": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-5.43.0.tgz", + "integrity": "sha512-IKy2fJm9PlNflb2ZW5gDJHb0Inte2lVv9+Dq9ZaNP2pUMFdTYKUV7VcFkG6TlFEGjNsoEPZGHQY6JUMRKIYtFA==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "5.31.0", + "@typescript-eslint/utils": "5.43.0", "lodash": "^4.17.21" }, "engines": { @@ -3812,60 +4336,15 @@ "typescript": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin-tslint/node_modules/@typescript-eslint/utils": { - "version": "5.31.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "5.31.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", "debug": "^4.3.4" }, "engines": { @@ -3885,12 +4364,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0" + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3901,11 +4381,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "5.31.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -3925,33 +4407,11 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "5.31.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/@typescript-eslint/types": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -3961,12 +4421,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3987,16 +4448,19 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.29.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4009,82 +4473,13 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.29.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.29.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.29.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.29.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.29.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/types": "5.43.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4097,7 +4492,8 @@ }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -4105,19 +4501,23 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4126,11 +4526,13 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4140,25 +4542,29 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4172,7 +4578,8 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -4183,7 +4590,8 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4193,7 +4601,8 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4205,7 +4614,8 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -4213,33 +4623,40 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true }, "node_modules/7zip-bin": { "version": "5.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "dev": true }, "node_modules/abab": { "version": "2.0.6", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, "node_modules/abbrev": { "version": "1.1.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/accepts": { "version": "1.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -4249,8 +4666,9 @@ } }, "node_modules/acorn": { - "version": "8.8.0", - "license": "MIT", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "bin": { "acorn": "bin/acorn" }, @@ -4260,23 +4678,26 @@ }, "node_modules/acorn-import-assertions": { "version": "1.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "peerDependencies": { "acorn": "^8" } }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-node": { "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, - "license": "Apache-2.0", "dependencies": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", @@ -4285,8 +4706,9 @@ }, "node_modules/acorn-node/node_modules/acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4296,15 +4718,17 @@ }, "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, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/adjust-sourcemap-loader": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "dependencies": { "loader-utils": "^2.0.0", "regex-parser": "^2.2.11" @@ -4314,8 +4738,9 @@ } }, "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.2", - "license": "MIT", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -4327,22 +4752,25 @@ }, "node_modules/adler-32": { "version": "1.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", "engines": { "node": ">=0.8" } }, "node_modules/adm-zip": { "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.3.0" } }, "node_modules/agent-base": { "version": "6.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dependencies": { "debug": "4" }, @@ -4352,8 +4780,9 @@ }, "node_modules/agentkeepalive": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -4365,15 +4794,17 @@ }, "node_modules/agentkeepalive/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/aggregate-error": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4384,7 +4815,8 @@ }, "node_modules/ajv": { "version": "8.11.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -4398,7 +4830,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dependencies": { "ajv": "^8.0.0" }, @@ -4413,7 +4846,8 @@ }, "node_modules/ajv-keywords": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -4423,30 +4857,34 @@ }, "node_modules/amdefine": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, - "license": "BSD-3-Clause OR MIT", "optional": true, "engines": { "node": ">=0.4.2" } }, "node_modules/android-versions": { - "version": "1.7.0", - "license": "MIT", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.8.1.tgz", + "integrity": "sha512-5a0YyylAk6pPM2Ezi0vWaPPNbS6tSNRs+micbgk5NpHEN5YW1ez+T94G5orysfwBEBDMHoxm5GNc5ZDUPgRrhw==", "dependencies": { "semver": "^5.7.1" } }, "node_modules/android-versions/node_modules/semver": { "version": "5.7.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "bin": { "semver": "bin/semver" } }, "node_modules/angular2-hotkeys": { "version": "13.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/angular2-hotkeys/-/angular2-hotkeys-13.1.0.tgz", + "integrity": "sha512-irsQLLiHCHqz73ocDV8N5K7Zel7mJyLQHwLrRePOwUumQfyBc2TTuO+ccdQAAM7/RK+IdT6P5YoiP0FEbA19Uw==", "dependencies": { "@types/mousetrap": "^1.6.9", "mousetrap": "^1.6.5", @@ -4455,26 +4893,30 @@ }, "node_modules/ansi": { "version": "0.3.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==" }, "node_modules/ansi-align": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.1.0" } }, "node_modules/ansi-colors": { "version": "4.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dependencies": { "type-fest": "^0.21.3" }, @@ -4487,8 +4929,9 @@ }, "node_modules/ansi-gray": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -4498,24 +4941,27 @@ }, "node_modules/ansi-html-community": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "engines": [ "node >= 0.8.0" ], - "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } }, "node_modules/ansi-regex": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "3.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { "color-convert": "^1.9.0" }, @@ -4525,15 +4971,17 @@ }, "node_modules/ansi-wrap": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/anymatch": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4543,9 +4991,10 @@ } }, "node_modules/apache-crypt": { - "version": "1.2.5", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", + "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", "dev": true, - "license": "MIT", "dependencies": { "unix-crypt-td-js": "^1.1.4" }, @@ -4554,22 +5003,25 @@ } }, "node_modules/apache-md5": { - "version": "1.1.7", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/app-builder-bin": { "version": "4.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true }, "node_modules/app-builder-lib": { - "version": "23.1.0", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz", + "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==", "dev": true, - "license": "MIT", "dependencies": { "@develar/schema-utils": "~2.6.5", "@electron/universal": "1.2.1", @@ -4577,13 +5029,13 @@ "7zip-bin": "~5.1.1", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "23.0.9", - "builder-util-runtime": "9.0.2", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", "chromium-pickle-js": "^0.2.0", "debug": "^4.3.4", "ejs": "^3.1.7", "electron-osx-sign": "^0.6.0", - "electron-publish": "23.0.9", + "electron-publish": "23.6.0", "form-data": "^4.0.0", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", @@ -4604,13 +5056,15 @@ }, "node_modules/app-builder-lib/node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/app-builder-lib/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4618,8 +5072,9 @@ }, "node_modules/app-builder-lib/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4629,8 +5084,9 @@ }, "node_modules/app-builder-lib/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4639,34 +5095,38 @@ } }, "node_modules/app-root-path": { - "version": "3.0.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6.0.0" } }, "node_modules/aproba": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true }, "node_modules/are-we-there-yet": { - "version": "3.0.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, - "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4678,24 +5138,28 @@ }, "node_modules/arg": { "version": "4.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "node_modules/argparse": { "version": "1.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/argparse/node_modules/sprintf-js": { "version": "1.0.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/aria-query": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "ast-types-flow": "0.0.7", "commander": "^2.11.0" @@ -4703,35 +5167,40 @@ }, "node_modules/aria-query/node_modules/commander": { "version": "2.20.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/array-find-index": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-flatten": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-from": { "version": "2.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", + "dev": true }, "node_modules/array-includes": { - "version": "3.1.5", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" }, "engines": { @@ -4743,28 +5212,31 @@ }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/array-uniq": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array.prototype.flat": { - "version": "1.3.0", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -4776,16 +5248,19 @@ }, "node_modules/arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/asar": { - "version": "3.1.0", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", + "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", + "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change", "dev": true, - "license": "MIT", "dependencies": { "chromium-pickle-js": "^0.2.0", "commander": "^5.0.0", @@ -4804,8 +5279,9 @@ }, "node_modules/asar/node_modules/brace-expansion": { "version": "1.1.11", - "dev": true, - "license": "MIT", + "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" @@ -4813,16 +5289,18 @@ }, "node_modules/asar/node_modules/commander": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/asar/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, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4840,8 +5318,9 @@ }, "node_modules/asar/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4851,23 +5330,26 @@ }, "node_modules/asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "devOptional": true, - "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/assert-plus": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "engines": { "node": ">=0.8" } }, "node_modules/ast-transform": { "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", "dev": true, - "license": "MIT", "dependencies": { "escodegen": "~1.2.0", "esprima": "~1.0.4", @@ -4876,6 +5358,8 @@ }, "node_modules/ast-transform/node_modules/esprima": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", "dev": true, "bin": { "esparse": "bin/esparse.js", @@ -4887,65 +5371,74 @@ }, "node_modules/ast-types": { "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/ast-types-flow": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "ISC" + "optional": true, + "engines": { + "node": ">=8" + } }, "node_modules/async": { "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/async-exit-hook": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/asynckit": { "version": "0.4.0", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "devOptional": true }, "node_modules/at-least-node": { "version": "1.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "engines": { "node": ">= 4.0.0" } }, - "node_modules/atob": { - "version": "2.1.2", - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/atomically": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", + "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.12.0" } }, "node_modules/autoprefixer": { - "version": "10.4.7", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "funding": [ { "type": "opencollective", @@ -4956,10 +5449,9 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } ], - "license": "MIT", "dependencies": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -4977,28 +5469,32 @@ }, "node_modules/aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "devOptional": true, - "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/aws4": { "version": "1.11.0", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "devOptional": true }, "node_modules/axobject-query": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", "dev": true, - "license": "Apache-2.0", "dependencies": { "ast-types-flow": "0.0.7" } }, "node_modules/babel-loader": { "version": "8.2.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", "dependencies": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", @@ -5014,8 +5510,9 @@ } }, "node_modules/babel-loader/node_modules/loader-utils": { - "version": "2.0.2", - "license": "MIT", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -5025,16 +5522,10 @@ "node": ">=8.9.0" } }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -5047,11 +5538,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.2", - "license": "MIT", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dependencies": { "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "peerDependencies": { @@ -5060,14 +5552,16 @@ }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.5.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", + "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.2", "core-js-compat": "^3.21.0" @@ -5077,10 +5571,11 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "license": "MIT", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -5088,7 +5583,8 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base-64": { "version": "1.0.0", @@ -5097,6 +5593,8 @@ }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -5110,13 +5608,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/basic-auth": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "5.1.2" }, @@ -5126,45 +5624,52 @@ }, "node_modules/batch": { "version": "0.6.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "devOptional": true, - "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } }, "node_modules/bcryptjs": { "version": "2.4.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true }, "node_modules/big-integer": { "version": "1.6.51", - "license": "Unlicense", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "engines": { "node": ">=0.6" } }, "node_modules/big.js": { "version": "5.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "engines": { "node": "*" } }, "node_modules/binary-extensions": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "engines": { "node": ">=8" } }, "node_modules/bl": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -5173,7 +5678,8 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -5185,8 +5691,9 @@ }, "node_modules/blocking-proxy": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", "devOptional": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -5199,20 +5706,23 @@ }, "node_modules/bluebird": { "version": "3.7.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, "node_modules/bluebird-lst": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", "dev": true, - "license": "MIT", "dependencies": { "bluebird": "^3.5.5" } }, "node_modules/body-parser": { - "version": "1.20.0", - "license": "MIT", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -5222,7 +5732,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -5234,21 +5744,24 @@ }, "node_modules/body-parser/node_modules/bytes": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -5258,11 +5771,13 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/bonjour-service": { - "version": "1.0.13", - "license": "MIT", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", "dependencies": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", @@ -5272,22 +5787,26 @@ }, "node_modules/bonjour-service/node_modules/array-flatten": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "node_modules/boolbase": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/boolean": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/boxen": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -5307,8 +5826,9 @@ }, "node_modules/boxen/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5321,8 +5841,9 @@ }, "node_modules/boxen/node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -5332,8 +5853,9 @@ }, "node_modules/boxen/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5347,8 +5869,9 @@ }, "node_modules/boxen/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5356,18 +5879,26 @@ "node": ">=7.0.0" } }, + "node_modules/boxen/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/boxen/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/boxen/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5377,8 +5908,9 @@ }, "node_modules/boxen/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -5388,7 +5920,8 @@ }, "node_modules/bplist-parser": { "version": "0.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", "dependencies": { "big-integer": "^1.6.44" }, @@ -5398,14 +5931,16 @@ }, "node_modules/brace-expansion": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { "fill-range": "^7.0.1" }, @@ -5415,8 +5950,9 @@ }, "node_modules/brfs": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", "dev": true, - "license": "MIT", "dependencies": { "quote-stream": "^1.0.1", "resolve": "^1.1.5", @@ -5429,29 +5965,33 @@ }, "node_modules/brotli": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", "dev": true, - "license": "MIT", "dependencies": { "base64-js": "^1.1.2" } }, "node_modules/browser-resolve": { "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", "dev": true, - "license": "MIT", "dependencies": { "resolve": "1.1.7" } }, "node_modules/browser-resolve/node_modules/resolve": { "version": "1.1.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true }, "node_modules/browserify-optional": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", "dev": true, - "license": "MIT", "dependencies": { "ast-transform": "0.0.0", "ast-types": "^0.7.0", @@ -5459,7 +5999,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.2", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "funding": [ { "type": "opencollective", @@ -5470,12 +6012,11 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], - "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001366", - "electron-to-chromium": "^1.4.188", + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.4" + "update-browserslist-db": "^1.0.9" }, "bin": { "browserslist": "cli.js" @@ -5486,16 +6027,18 @@ }, "node_modules/browserstack": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", + "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", "devOptional": true, - "license": "MIT", "dependencies": { "https-proxy-agent": "^2.2.1" } }, "node_modules/browserstack/node_modules/agent-base": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "devOptional": true, - "license": "MIT", "dependencies": { "es6-promisify": "^5.0.0" }, @@ -5505,16 +6048,18 @@ }, "node_modules/browserstack/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "devOptional": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/browserstack/node_modules/https-proxy-agent": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "devOptional": true, - "license": "MIT", "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -5525,6 +6070,8 @@ }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -5539,7 +6086,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -5547,8 +6093,9 @@ }, "node_modules/buffer-alloc": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, - "license": "MIT", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" @@ -5556,45 +6103,51 @@ }, "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true }, "node_modules/buffer-crc32": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/buffer-equal": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/buffer-fill": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true }, "node_modules/buffer-from": { "version": "1.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builder-util": { - "version": "23.0.9", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz", + "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/debug": "^4.1.6", "@types/fs-extra": "^9.0.11", "7zip-bin": "~5.1.1", "app-builder-bin": "4.0.0", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.0.2", + "builder-util-runtime": "9.1.1", "chalk": "^4.1.1", "cross-spawn": "^7.0.3", "debug": "^4.3.4", @@ -5609,9 +6162,10 @@ } }, "node_modules/builder-util-runtime": { - "version": "9.0.2", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" @@ -5622,8 +6176,9 @@ }, "node_modules/builder-util/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5636,13 +6191,15 @@ }, "node_modules/builder-util/node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/builder-util/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5656,8 +6213,9 @@ }, "node_modules/builder-util/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5665,18 +6223,26 @@ "node": ">=7.0.0" } }, + "node_modules/builder-util/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/builder-util/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/builder-util/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -5686,8 +6252,9 @@ }, "node_modules/builder-util/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5697,8 +6264,9 @@ }, "node_modules/builtin-modules": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -5706,19 +6274,22 @@ }, "node_modules/builtins": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true }, "node_modules/bytes": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "engines": { "node": ">= 0.8" } }, "node_modules/cacache": { - "version": "16.1.1", - "license": "ISC", + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", + "integrity": "sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA==", "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", @@ -5745,8 +6316,9 @@ }, "node_modules/cacheable-request": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dev": true, - "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -5762,8 +6334,9 @@ }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -5776,15 +6349,17 @@ }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/call-bind": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -5795,6 +6370,8 @@ }, "node_modules/callsite": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", "dev": true, "engines": { "node": "*" @@ -5802,20 +6379,24 @@ }, "node_modules/callsites": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "5.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001370", + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", "funding": [ { "type": "opencollective", @@ -5825,17 +6406,18 @@ "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/caseless": { "version": "0.12.0", - "devOptional": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "devOptional": true }, "node_modules/cfb": { "version": "1.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", "dependencies": { "adler-32": "~1.3.0", "crc-32": "~1.2.0" @@ -5846,7 +6428,8 @@ }, "node_modules/chalk": { "version": "2.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -5858,7 +6441,8 @@ }, "node_modules/chardet": { "version": "0.7.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "node_modules/chart.js": { "version": "3.9.1", @@ -5879,8 +6463,9 @@ }, "node_modules/cheerio": { "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dev": true, - "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -5899,8 +6484,9 @@ }, "node_modules/cheerio-select": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -5914,11 +6500,12 @@ } }, "node_modules/cheerio/node_modules/parse5": { - "version": "7.0.0", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", "dev": true, - "license": "MIT", "dependencies": { - "entities": "^4.3.0" + "entities": "^4.4.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -5926,13 +6513,14 @@ }, "node_modules/chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5951,39 +6539,48 @@ }, "node_modules/chownr": { "version": "2.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "engines": { "node": ">=10" } }, "node_modules/chrome-trace-event": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "engines": { "node": ">=6.0" } }, "node_modules/chromium-pickle-js": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true }, "node_modules/ci-info": { - "version": "3.3.2", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", + "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + } }, "node_modules/clean-stack": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "engines": { "node": ">=6" } }, "node_modules/cli-boxes": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -5993,7 +6590,8 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -6003,7 +6601,8 @@ }, "node_modules/cli-spinners": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", "engines": { "node": ">=6" }, @@ -6011,16 +6610,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-width": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "engines": { "node": ">= 10" } }, "node_modules/clipboard": { "version": "2.0.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", "dependencies": { "good-listener": "^1.2.2", "select": "^1.1.2", @@ -6029,7 +6647,8 @@ }, "node_modules/cliui": { "version": "7.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -6038,14 +6657,16 @@ }, "node_modules/clone": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "engines": { "node": ">=0.8" } }, "node_modules/clone-deep": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -6057,8 +6678,9 @@ }, "node_modules/clone-response": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, - "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -6067,22 +6689,25 @@ } }, "node_modules/code-block-writer": { - "version": "11.0.2", - "dev": true, - "license": "MIT" + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz", + "integrity": "sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==", + "dev": true }, "node_modules/code-point-at": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/codelyzer": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", + "integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==", "dev": true, - "license": "MIT", "dependencies": { "@angular/compiler": "9.0.0", "@angular/core": "9.0.0", @@ -6107,16 +6732,18 @@ }, "node_modules/codelyzer/node_modules/@angular/compiler": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", + "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", "dev": true, - "license": "MIT", "peerDependencies": { "tslib": "^1.10.0" } }, "node_modules/codelyzer/node_modules/@angular/core": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", + "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", "dev": true, - "license": "MIT", "peerDependencies": { "rxjs": "^6.5.3", "tslib": "^1.10.0", @@ -6125,8 +6752,9 @@ }, "node_modules/codelyzer/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -6136,25 +6764,29 @@ }, "node_modules/codelyzer/node_modules/source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/codelyzer/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/codelyzer/node_modules/zone.js": { "version": "0.10.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", + "dev": true }, "node_modules/codepage": { "version": "1.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", "engines": { "node": ">=0.8" } @@ -6174,43 +6806,45 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { "color-name": "1.1.3" } }, - "node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/color-support": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "license": "ISC", "bin": { "color-support": "bin.js" } }, "node_modules/colorette": { "version": "2.0.19", - "license": "MIT" + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "node_modules/colors": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.1.90" } }, "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==", "devOptional": true, - "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -6219,9 +6853,10 @@ } }, "node_modules/commander": { - "version": "9.4.0", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } @@ -6237,19 +6872,22 @@ }, "node_modules/commondir": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/compare-version": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/compressible": { "version": "2.0.18", - "license": "MIT", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -6259,7 +6897,8 @@ }, "node_modules/compression": { "version": "1.7.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -6275,26 +6914,30 @@ }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/compression/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/concat-map": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "engines": [ "node >= 0.8" ], - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -6303,9 +6946,10 @@ } }, "node_modules/conf": { - "version": "10.1.2", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", + "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^8.6.3", "ajv-formats": "^2.1.1", @@ -6327,8 +6971,9 @@ }, "node_modules/conf/node_modules/dot-prop": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, - "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -6341,8 +6986,9 @@ }, "node_modules/config-chain": { "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "ini": "^1.3.4", @@ -6351,14 +6997,16 @@ }, "node_modules/config-chain/node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "ISC", "optional": true }, "node_modules/configstore": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -6373,8 +7021,9 @@ }, "node_modules/connect": { "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", @@ -6387,32 +7036,37 @@ }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "engines": { "node": ">=0.8" } }, "node_modules/connect/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { "safe-buffer": "5.2.1" }, @@ -6422,6 +7076,8 @@ }, "node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -6435,37 +7091,38 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/content-type": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { - "version": "1.8.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } + "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==" }, "node_modules/cookie": { "version": "0.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/copy-anything": { "version": "2.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dependencies": { "is-what": "^3.14.1" }, @@ -6475,7 +7132,8 @@ }, "node_modules/copy-webpack-plugin": { "version": "11.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", @@ -6497,7 +7155,8 @@ }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "version": "6.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dependencies": { "is-glob": "^4.0.3" }, @@ -6507,7 +7166,8 @@ }, "node_modules/copy-webpack-plugin/node_modules/globby": { "version": "13.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.2.11", @@ -6524,7 +7184,8 @@ }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -6541,7 +7202,8 @@ }, "node_modules/copy-webpack-plugin/node_modules/slash": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "engines": { "node": ">=12" }, @@ -6551,8 +7213,9 @@ }, "node_modules/cordova": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/cordova/-/cordova-11.0.0.tgz", + "integrity": "sha512-Hu2YeT0naeP/1sEm/xfJYUsXN48XV6zagxbi1+4q0Ei9c5TKsIq8v4EWukvSHF4UO2pnh+9ViaDlGMcS1Wrnfg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "configstore": "^5.0.1", "cordova-common": "^4.0.2", @@ -6577,7 +7240,8 @@ }, "node_modules/cordova-android": { "version": "11.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-11.0.0.tgz", + "integrity": "sha512-ZhvSF5BYY8gmrAu1PtMPdHFsRoom/emT4OtTcecmh3Zj22900y4Golg5whhBPcYcTPC7BU6PG/EmG9BBHcX9tQ==", "dependencies": { "android-versions": "^1.7.0", "cordova-common": "^4.0.2", @@ -6597,12 +7261,14 @@ }, "node_modules/cordova-app-hello-world": { "version": "6.0.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/cordova-app-hello-world/-/cordova-app-hello-world-6.0.0.tgz", + "integrity": "sha512-wPZsm+fzNUwdiTRODT+fQuPV410RNmd3Buiw63vT8BPxjC+cn6Bu8emrgwrDM4pbmU5sa5Unwu3xPcbQGQ3G3g==", + "dev": true }, "node_modules/cordova-common": { - "version": "4.0.2", - "license": "Apache-2.0", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-4.1.0.tgz", + "integrity": "sha512-sYfOSfpYGQOmUDlsARUbpT/EvVKT/E+GI3zwTXt+C6DjZ7xs6ZQVHs3umHKSidjf9yVM2LLmvGFpGrGX7aGxug==", "dependencies": { "@netflix/nerror": "^1.1.3", "ansi": "^0.3.1", @@ -6625,7 +7291,8 @@ }, "node_modules/cordova-common/node_modules/brace-expansion": { "version": "1.1.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6633,7 +7300,8 @@ }, "node_modules/cordova-common/node_modules/fs-extra": { "version": "9.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -6646,7 +7314,8 @@ }, "node_modules/cordova-common/node_modules/glob": { "version": "7.2.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6664,7 +7333,8 @@ }, "node_modules/cordova-common/node_modules/minimatch": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6674,8 +7344,9 @@ }, "node_modules/cordova-create": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cordova-create/-/cordova-create-4.0.0.tgz", + "integrity": "sha512-t/4zaDZ4ZsFpC7j6x7s9hR9OeEo8nD2m7rSrzV2PUEfA4BPQujkmk0AIC+5iBvjfR7+ReHOHKsY/NfB1LnMQxQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "cordova-app-hello-world": "^6.0.0", "cordova-common": "^4.0.2", @@ -6695,8 +7366,9 @@ }, "node_modules/cordova-create/node_modules/npm-package-arg": { "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, - "license": "ISC", "dependencies": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", @@ -6708,8 +7380,9 @@ }, "node_modules/cordova-fetch": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cordova-fetch/-/cordova-fetch-3.0.1.tgz", + "integrity": "sha512-bxXk6H3FtGXpCtlO+XyXM4pa72azQomdurNeHbZai9eYBzA5vjyPnsgxsYcylLUc1wQFeR+XWQVfgJitx6ghEw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "cordova-common": "^4.0.0", "fs-extra": "^9.0.0", @@ -6727,8 +7400,9 @@ }, "node_modules/cordova-fetch/node_modules/@npmcli/fs": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, - "license": "ISC", "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" @@ -6736,8 +7410,9 @@ }, "node_modules/cordova-fetch/node_modules/@npmcli/git": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^1.3.2", "lru-cache": "^6.0.0", @@ -6751,8 +7426,10 @@ }, "node_modules/cordova-fetch/node_modules/@npmcli/move-file": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, - "license": "MIT", "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -6763,21 +7440,24 @@ }, "node_modules/cordova-fetch/node_modules/@npmcli/node-gyp": { "version": "1.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true }, "node_modules/cordova-fetch/node_modules/@npmcli/promise-spawn": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", "dev": true, - "license": "ISC", "dependencies": { "infer-owner": "^1.0.4" } }, "node_modules/cordova-fetch/node_modules/@npmcli/run-script": { "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", @@ -6787,29 +7467,33 @@ }, "node_modules/cordova-fetch/node_modules/@tootallnate/once": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/cordova-fetch/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/cordova-fetch/node_modules/aproba": { "version": "1.2.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true }, "node_modules/cordova-fetch/node_modules/are-we-there-yet": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "dev": true, - "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -6817,8 +7501,9 @@ }, "node_modules/cordova-fetch/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6826,8 +7511,9 @@ }, "node_modules/cordova-fetch/node_modules/cacache": { "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -6854,8 +7540,9 @@ }, "node_modules/cordova-fetch/node_modules/fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, - "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -6868,8 +7555,9 @@ }, "node_modules/cordova-fetch/node_modules/gauge": { "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "dev": true, - "license": "ISC", "dependencies": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -6883,8 +7571,9 @@ }, "node_modules/cordova-fetch/node_modules/glob": { "version": "7.2.3", - "dev": true, - "license": "ISC", + "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", @@ -6902,8 +7591,9 @@ }, "node_modules/cordova-fetch/node_modules/http-proxy-agent": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, - "license": "MIT", "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -6915,16 +7605,18 @@ }, "node_modules/cordova-fetch/node_modules/ignore-walk": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "dev": true, - "license": "ISC", "dependencies": { "minimatch": "^3.0.4" } }, "node_modules/cordova-fetch/node_modules/is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, - "license": "MIT", "dependencies": { "number-is-nan": "^1.0.0" }, @@ -6934,8 +7626,9 @@ }, "node_modules/cordova-fetch/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -6945,8 +7638,9 @@ }, "node_modules/cordova-fetch/node_modules/make-fetch-happen": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, - "license": "ISC", "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", @@ -6971,8 +7665,9 @@ }, "node_modules/cordova-fetch/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6982,8 +7677,9 @@ }, "node_modules/cordova-fetch/node_modules/minipass-fetch": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "dev": true, - "license": "MIT", "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", @@ -6998,8 +7694,9 @@ }, "node_modules/cordova-fetch/node_modules/node-gyp": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", "dev": true, - "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -7021,8 +7718,9 @@ }, "node_modules/cordova-fetch/node_modules/npm-install-checks": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -7032,8 +7730,9 @@ }, "node_modules/cordova-fetch/node_modules/npm-package-arg": { "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, - "license": "ISC", "dependencies": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", @@ -7045,8 +7744,9 @@ }, "node_modules/cordova-fetch/node_modules/npm-packlist": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.6", "ignore-walk": "^3.0.3", @@ -7062,8 +7762,9 @@ }, "node_modules/cordova-fetch/node_modules/npm-pick-manifest": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", "dev": true, - "license": "ISC", "dependencies": { "npm-install-checks": "^4.0.0", "npm-normalize-package-bin": "^1.0.1", @@ -7073,8 +7774,9 @@ }, "node_modules/cordova-fetch/node_modules/npm-registry-fetch": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", "dev": true, - "license": "ISC", "dependencies": { "make-fetch-happen": "^9.0.1", "minipass": "^3.1.3", @@ -7089,8 +7791,9 @@ }, "node_modules/cordova-fetch/node_modules/npmlog": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, - "license": "ISC", "dependencies": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -7100,8 +7803,9 @@ }, "node_modules/cordova-fetch/node_modules/pacote": { "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", @@ -7132,8 +7836,9 @@ }, "node_modules/cordova-fetch/node_modules/socks-proxy-agent": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -7145,8 +7850,9 @@ }, "node_modules/cordova-fetch/node_modules/ssri": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -7156,8 +7862,9 @@ }, "node_modules/cordova-fetch/node_modules/string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, - "license": "MIT", "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -7169,8 +7876,9 @@ }, "node_modules/cordova-fetch/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -7180,8 +7888,9 @@ }, "node_modules/cordova-lib": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/cordova-lib/-/cordova-lib-11.0.0.tgz", + "integrity": "sha512-3XSCIAlS060/hzxWKDrF+sMfv3PVU8bglCaL31HMCyj3YrZn1CZhqrRRrW5lwRxtz7Sh4XCxv97rNxF38uj9hg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "cordova-common": "^4.0.2", "cordova-fetch": "^3.0.1", @@ -7206,18 +7915,20 @@ }, "node_modules/cordova-plugin-advanced-http": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/cordova-plugin-advanced-http/-/cordova-plugin-advanced-http-3.3.1.tgz", + "integrity": "sha512-hESuB3mxIHCUrzb5lm7juda6PSNcC5N8Invizj5wGV2rSldCapiNxMTEpzKR1UVPDDP2XOtBzO0SAYS+3+g/ig==", "engines": [ { "name": "cordova", "version": ">=4.0.0" } - ], - "license": "MIT" + ] }, "node_modules/cordova-plugin-androidx-adapter": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cordova-plugin-androidx-adapter/-/cordova-plugin-androidx-adapter-1.1.3.tgz", + "integrity": "sha512-W1SImn0cCCvOSTSfWWp5TnanIQrSuh2Bch+dcZXIzEn0km3Qb7VryeAqHhgBQYwwzC5Ollk1DtUAk/AJSojuZA==", "dev": true, - "license": "MIT", "dependencies": { "q": "^1.5.1", "recursive-readdir": "^2.2.2" @@ -7225,10 +7936,13 @@ }, "node_modules/cordova-plugin-app-version": { "version": "0.1.14", - "license": "MIT" + "resolved": "https://registry.npmjs.org/cordova-plugin-app-version/-/cordova-plugin-app-version-0.1.14.tgz", + "integrity": "sha512-HN6Yz6IIdRO+iMvCHN/qMe8/O4miOpHH/pDtWNjIYTjV3MzP+XdzFJoFnq2zxlNNXFz0Zn8REGQhFY77vV4AWQ==" }, "node_modules/cordova-plugin-badge": { "version": "0.8.8", + "resolved": "https://registry.npmjs.org/cordova-plugin-badge/-/cordova-plugin-badge-0.8.8.tgz", + "integrity": "sha512-RhIBtd5xhD/iLnxjt35jvOae28oNW/wtMZBOmQR3Rf0y4wirvA1bpAZEhBoFqL+rZGhsd6ddOdQXdex1T0DRyQ==", "engines": [ { "name": "cordova", @@ -7246,12 +7960,12 @@ "name": "cordova-plugman", "version": ">=4.2.0" } - ], - "license": "Apache 2.0" + ] }, "node_modules/cordova-plugin-device": { "version": "2.1.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.1.0.tgz", + "integrity": "sha512-FU0Lw1jZpuKOgG4v80LrfMAOIMCGfAVPumn7AwaX9S1iU/X3OPZUyoKUgP09q4bxL35IeNPkqNWVKYduAXZ1sg==", "engines": { "cordovaDependencies": { "3.0.0": { @@ -7263,7 +7977,8 @@ }, "node_modules/cordova-plugin-file": { "version": "7.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-7.0.0.tgz", + "integrity": "sha512-mSwy9GE5pHq2ZHhu/wYk/VhrwR5VLk+XQsk3+IiiFmDgcPsrVIyELkM2FZKX09cC6i+bJVTFVKUlwteSStj3ow==", "engines": { "cordovaDependencies": { "5.0.0": { @@ -7280,13 +7995,16 @@ }, "node_modules/cordova-plugin-file-opener2": { "version": "3.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cordova-plugin-file-opener2/-/cordova-plugin-file-opener2-3.0.5.tgz", + "integrity": "sha512-tjLHDamH5+y0bJZYVe2967L1S4R8tL4Y0rJUzJGoxsyiw3FUlrJNS199POOpzZZ6Xhlntn9a2o7+84r1dMN21A==", "engines": { "cordova": ">=6.0.0" } }, "node_modules/cordova-plugin-local-notification": { "version": "0.9.0-beta.2", + "resolved": "https://registry.npmjs.org/cordova-plugin-local-notification/-/cordova-plugin-local-notification-0.9.0-beta.2.tgz", + "integrity": "sha512-63n77K1pt8dnbWnNR8QWETi9Glezi1bvNHvHWmGNIOv0xCb0phZnm+Ku49BQ+omwe8Z5voMvrA4I03SYPpv38w==", "engines": [ { "name": "cordova", @@ -7308,13 +8026,13 @@ "name": "apple-ios", "version": ">=10.0.0" } - ], - "license": "Apache 2.0" + ] }, "node_modules/cordova-serve": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.0.tgz", + "integrity": "sha512-gzTLeBQzNP8aM/nG0/7sSfICfNazUgwvEU2kiDaybbYXmxwioo2v96h4tzE0XOyA64beyYwAyRYEEqWA4AMZjw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "chalk": "^3.0.0", "compression": "^1.7.4", @@ -7329,8 +8047,9 @@ }, "node_modules/cordova-serve/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7343,8 +8062,9 @@ }, "node_modules/cordova-serve/node_modules/chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7355,8 +8075,9 @@ }, "node_modules/cordova-serve/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7364,18 +8085,26 @@ "node": ">=7.0.0" } }, + "node_modules/cordova-serve/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/cordova-serve/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cordova-serve/node_modules/open": { "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -7389,8 +8118,9 @@ }, "node_modules/cordova-serve/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7399,36 +8129,31 @@ } }, "node_modules/core-js": { - "version": "3.24.0", + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", + "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat": { - "version": "3.24.0", - "license": "MIT", + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", "dependencies": { - "browserslist": "^4.21.2", - "semver": "7.0.0" + "browserslist": "^4.21.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/core-util-is": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cors": { "version": "2.8.5", @@ -7444,8 +8169,9 @@ } }, "node_modules/cosmiconfig": { - "version": "7.0.1", - "license": "MIT", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -7457,9 +8183,20 @@ "node": ">=10" } }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, "node_modules/crc-32": { "version": "1.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "bin": { "crc32": "bin/crc32.njs" }, @@ -7469,12 +8206,14 @@ }, "node_modules/create-require": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, "node_modules/critters": { "version": "0.0.16", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", "dependencies": { "chalk": "^4.1.0", "css-select": "^4.2.0", @@ -7486,7 +8225,8 @@ }, "node_modules/critters/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -7499,7 +8239,8 @@ }, "node_modules/critters/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7513,7 +8254,8 @@ }, "node_modules/critters/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -7521,9 +8263,15 @@ "node": ">=7.0.0" } }, + "node_modules/critters/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==" + }, "node_modules/critters/node_modules/css-select": { "version": "4.3.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -7537,7 +8285,8 @@ }, "node_modules/critters/node_modules/dom-serializer": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -7549,7 +8298,8 @@ }, "node_modules/critters/node_modules/domhandler": { "version": "4.3.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dependencies": { "domelementtype": "^2.2.0" }, @@ -7562,7 +8312,8 @@ }, "node_modules/critters/node_modules/domutils": { "version": "2.8.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -7574,32 +8325,37 @@ }, "node_modules/critters/node_modules/entities": { "version": "2.2.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/critters/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/critters/node_modules/parse5": { "version": "6.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "node_modules/critters/node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dependencies": { "parse5": "^6.0.1" } }, "node_modules/critters/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -7609,7 +8365,8 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -7621,29 +8378,23 @@ }, "node_modules/crypto-js": { "version": "4.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true }, "node_modules/crypto-random-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/css": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - } - }, "node_modules/css-blank-pseudo": { "version": "3.0.3", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", "dependencies": { "postcss-selector-parser": "^6.0.9" }, @@ -7659,7 +8410,8 @@ }, "node_modules/css-has-pseudo": { "version": "3.0.4", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", "dependencies": { "postcss-selector-parser": "^6.0.9" }, @@ -7675,7 +8427,8 @@ }, "node_modules/css-loader": { "version": "6.7.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.7", @@ -7699,7 +8452,8 @@ }, "node_modules/css-prefers-color-scheme": { "version": "6.0.3", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", "bin": { "css-prefers-color-scheme": "dist/cli.cjs" }, @@ -7712,8 +8466,9 @@ }, "node_modules/css-select": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -7727,8 +8482,9 @@ }, "node_modules/css-selector-tokenizer": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "dev": true, - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "fastparse": "^1.1.2" @@ -7736,7 +8492,8 @@ }, "node_modules/css-what": { "version": "6.1.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "engines": { "node": ">= 6" }, @@ -7744,24 +8501,19 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css/node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cssauron": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==", "dev": true, - "license": "MIT", "dependencies": { "through": "X.X.X" } }, "node_modules/cssdb": { - "version": "6.6.3", - "license": "CC0-1.0", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.1.0.tgz", + "integrity": "sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/csstools" @@ -7769,7 +8521,8 @@ }, "node_modules/cssesc": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "bin": { "cssesc": "bin/cssesc" }, @@ -7779,8 +8532,9 @@ }, "node_modules/currently-unhandled": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", "dev": true, - "license": "MIT", "dependencies": { "array-find-index": "^1.0.1" }, @@ -7790,8 +8544,9 @@ }, "node_modules/d": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, - "license": "ISC", "dependencies": { "es5-ext": "^0.10.50", "type": "^1.0.1" @@ -7799,7 +8554,8 @@ }, "node_modules/d3": { "version": "7.6.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.6.1.tgz", + "integrity": "sha512-txMTdIHFbcpLx+8a0IFhZsbp+PfBBPt8yfbmukZTQFroKuFqIwqswF0qE5JXWefylaAVpSXFoKm3yP+jpNLFLw==", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -7838,7 +8594,8 @@ }, "node_modules/d3-array": { "version": "3.2.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", + "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", "dependencies": { "internmap": "1 - 2" }, @@ -7848,14 +8605,16 @@ }, "node_modules/d3-axis": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", "engines": { "node": ">=12" } }, "node_modules/d3-brush": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -7869,7 +8628,8 @@ }, "node_modules/d3-chord": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", "dependencies": { "d3-path": "1 - 3" }, @@ -7879,18 +8639,21 @@ }, "node_modules/d3-collection": { "version": "1.0.7", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" }, "node_modules/d3-color": { "version": "3.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", "engines": { "node": ">=12" } }, "node_modules/d3-contour": { "version": "4.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.0.tgz", + "integrity": "sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==", "dependencies": { "d3-array": "^3.2.0" }, @@ -7900,7 +8663,8 @@ }, "node_modules/d3-delaunay": { "version": "6.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", + "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", "dependencies": { "delaunator": "5" }, @@ -7910,14 +8674,16 @@ }, "node_modules/d3-dispatch": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", "engines": { "node": ">=12" } }, "node_modules/d3-drag": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" @@ -7928,7 +8694,8 @@ }, "node_modules/d3-dsv": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", "dependencies": { "commander": "7", "iconv-lite": "0.6", @@ -7951,21 +8718,24 @@ }, "node_modules/d3-dsv/node_modules/commander": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { "node": ">= 10" } }, "node_modules/d3-ease": { "version": "3.0.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", "engines": { "node": ">=12" } }, "node_modules/d3-fetch": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", "dependencies": { "d3-dsv": "1 - 3" }, @@ -7975,7 +8745,8 @@ }, "node_modules/d3-force": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", @@ -7987,14 +8758,16 @@ }, "node_modules/d3-format": { "version": "3.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", "engines": { "node": ">=12" } }, "node_modules/d3-geo": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz", + "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==", "dependencies": { "d3-array": "2.5.0 - 3" }, @@ -8004,14 +8777,16 @@ }, "node_modules/d3-hierarchy": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", "engines": { "node": ">=12" } }, "node_modules/d3-interpolate": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", "dependencies": { "d3-color": "1 - 3" }, @@ -8021,35 +8796,40 @@ }, "node_modules/d3-path": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", + "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==", "engines": { "node": ">=12" } }, "node_modules/d3-polygon": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", "engines": { "node": ">=12" } }, "node_modules/d3-quadtree": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", "engines": { "node": ">=12" } }, "node_modules/d3-random": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", "engines": { "node": ">=12" } }, "node_modules/d3-scale": { "version": "4.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -8063,7 +8843,8 @@ }, "node_modules/d3-scale-chromatic": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" @@ -8074,14 +8855,16 @@ }, "node_modules/d3-selection": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "engines": { "node": ">=12" } }, "node_modules/d3-shape": { "version": "3.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz", + "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==", "dependencies": { "d3-path": "1 - 3" }, @@ -8091,7 +8874,8 @@ }, "node_modules/d3-time": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", "dependencies": { "d3-array": "2 - 3" }, @@ -8101,7 +8885,8 @@ }, "node_modules/d3-time-format": { "version": "4.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", "dependencies": { "d3-time": "1 - 3" }, @@ -8111,14 +8896,16 @@ }, "node_modules/d3-timer": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", "engines": { "node": ">=12" } }, "node_modules/d3-transition": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", @@ -8135,11 +8922,13 @@ }, "node_modules/d3-voronoi": { "version": "1.1.4", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" }, "node_modules/d3-zoom": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -8153,7 +8942,8 @@ }, "node_modules/dagre": { "version": "0.8.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", "dependencies": { "graphlib": "^2.1.8", "lodash": "^4.17.15" @@ -8161,7 +8951,8 @@ }, "node_modules/dagre-d3": { "version": "0.6.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", + "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", "dependencies": { "d3": "^5.14", "dagre": "^0.8.5", @@ -8171,11 +8962,13 @@ }, "node_modules/dagre-d3/node_modules/commander": { "version": "2.20.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/dagre-d3/node_modules/d3": { "version": "5.16.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", + "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", "dependencies": { "d3-array": "1", "d3-axis": "1", @@ -8212,15 +9005,18 @@ }, "node_modules/dagre-d3/node_modules/d3-array": { "version": "1.2.4", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" }, "node_modules/dagre-d3/node_modules/d3-axis": { "version": "1.0.12", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" }, "node_modules/dagre-d3/node_modules/d3-brush": { "version": "1.1.6", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", + "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", "dependencies": { "d3-dispatch": "1", "d3-drag": "1", @@ -8231,7 +9027,8 @@ }, "node_modules/dagre-d3/node_modules/d3-chord": { "version": "1.0.6", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", "dependencies": { "d3-array": "1", "d3-path": "1" @@ -8239,22 +9036,26 @@ }, "node_modules/dagre-d3/node_modules/d3-color": { "version": "1.4.1", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" }, "node_modules/dagre-d3/node_modules/d3-contour": { "version": "1.3.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", "dependencies": { "d3-array": "^1.1.1" } }, "node_modules/dagre-d3/node_modules/d3-dispatch": { "version": "1.0.6", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" }, "node_modules/dagre-d3/node_modules/d3-drag": { "version": "1.2.5", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", "dependencies": { "d3-dispatch": "1", "d3-selection": "1" @@ -8262,7 +9063,8 @@ }, "node_modules/dagre-d3/node_modules/d3-dsv": { "version": "1.2.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", + "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", "dependencies": { "commander": "2", "iconv-lite": "0.4", @@ -8282,18 +9084,21 @@ }, "node_modules/dagre-d3/node_modules/d3-ease": { "version": "1.0.7", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" }, "node_modules/dagre-d3/node_modules/d3-fetch": { "version": "1.2.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", + "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", "dependencies": { "d3-dsv": "1" } }, "node_modules/dagre-d3/node_modules/d3-force": { "version": "1.2.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", "dependencies": { "d3-collection": "1", "d3-dispatch": "1", @@ -8303,45 +9108,54 @@ }, "node_modules/dagre-d3/node_modules/d3-format": { "version": "1.4.5", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" }, "node_modules/dagre-d3/node_modules/d3-geo": { "version": "1.12.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", "dependencies": { "d3-array": "1" } }, "node_modules/dagre-d3/node_modules/d3-hierarchy": { "version": "1.1.9", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" }, "node_modules/dagre-d3/node_modules/d3-interpolate": { "version": "1.4.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", "dependencies": { "d3-color": "1" } }, "node_modules/dagre-d3/node_modules/d3-path": { "version": "1.0.9", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" }, "node_modules/dagre-d3/node_modules/d3-polygon": { "version": "1.0.6", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", + "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==" }, "node_modules/dagre-d3/node_modules/d3-quadtree": { "version": "1.0.7", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" }, "node_modules/dagre-d3/node_modules/d3-random": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", + "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" }, "node_modules/dagre-d3/node_modules/d3-scale": { "version": "2.2.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", "dependencies": { "d3-array": "^1.2.0", "d3-collection": "1", @@ -8353,7 +9167,8 @@ }, "node_modules/dagre-d3/node_modules/d3-scale-chromatic": { "version": "1.5.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", "dependencies": { "d3-color": "1", "d3-interpolate": "1" @@ -8361,33 +9176,39 @@ }, "node_modules/dagre-d3/node_modules/d3-selection": { "version": "1.4.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" }, "node_modules/dagre-d3/node_modules/d3-shape": { "version": "1.3.7", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "dependencies": { "d3-path": "1" } }, "node_modules/dagre-d3/node_modules/d3-time": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" }, "node_modules/dagre-d3/node_modules/d3-time-format": { "version": "2.3.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", "dependencies": { "d3-time": "1" } }, "node_modules/dagre-d3/node_modules/d3-timer": { "version": "1.0.10", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" }, "node_modules/dagre-d3/node_modules/d3-transition": { "version": "1.3.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", "dependencies": { "d3-color": "1", "d3-dispatch": "1", @@ -8399,7 +9220,8 @@ }, "node_modules/dagre-d3/node_modules/d3-zoom": { "version": "1.8.3", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", "dependencies": { "d3-dispatch": "1", "d3-drag": "1", @@ -8410,7 +9232,8 @@ }, "node_modules/dagre-d3/node_modules/iconv-lite": { "version": "0.4.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -8420,18 +9243,21 @@ }, "node_modules/damerau-levenshtein": { "version": "1.0.8", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true }, "node_modules/dash-ast": { "version": "2.0.1", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true }, "node_modules/dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "devOptional": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -8441,8 +9267,9 @@ }, "node_modules/debounce-fn": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", + "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^3.0.0" }, @@ -8455,7 +9282,8 @@ }, "node_modules/debug": { "version": "4.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -8470,31 +9298,27 @@ }, "node_modules/decache": { "version": "4.6.1", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.1.tgz", + "integrity": "sha512-ohApBM8u9ygepJCjgBrEZSSxPjc0T/PJkD+uNyxXPkqudyUpdXpwJYp0VISm2WrPVzASU6DZyIi6BWdyw7uJ2Q==", "dev": true, - "license": "MIT", "dependencies": { "callsite": "^1.0.0" } }, "node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, "node_modules/decompress-response": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, - "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -8504,12 +9328,14 @@ }, "node_modules/dedent": { "version": "0.7.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, "node_modules/deep-equal": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dev": true, - "license": "MIT", "dependencies": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", @@ -8524,20 +9350,23 @@ }, "node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/default-gateway": { "version": "6.0.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dependencies": { "execa": "^5.0.0" }, @@ -8546,27 +9375,35 @@ } }, "node_modules/defaults": { - "version": "1.0.3", - "license": "MIT", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dependencies": { "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defer-to-connect": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true }, "node_modules/define-lazy-prop": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "engines": { "node": ">=8" } }, "node_modules/define-properties": { "version": "1.1.4", - "license": "MIT", + "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" @@ -8580,8 +9417,9 @@ }, "node_modules/del": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", "devOptional": true, - "license": "MIT", "dependencies": { "globby": "^5.0.0", "is-path-cwd": "^1.0.0", @@ -8597,8 +9435,9 @@ }, "node_modules/del/node_modules/array-union": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "devOptional": true, - "license": "MIT", "dependencies": { "array-uniq": "^1.0.1" }, @@ -8608,8 +9447,9 @@ }, "node_modules/del/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==", "devOptional": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8617,8 +9457,9 @@ }, "node_modules/del/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "devOptional": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8636,8 +9477,9 @@ }, "node_modules/del/node_modules/globby": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", "devOptional": true, - "license": "MIT", "dependencies": { "array-union": "^1.0.1", "arrify": "^1.0.0", @@ -8652,8 +9494,9 @@ }, "node_modules/del/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8663,16 +9506,18 @@ }, "node_modules/del/node_modules/pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/del/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "devOptional": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -8682,56 +9527,73 @@ }, "node_modules/delaunator": { "version": "5.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", "dependencies": { "robust-predicates": "^3.0.0" } }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/delegate": { "version": "3.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" }, "node_modules/delegates": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, "node_modules/dep-graph": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz", + "integrity": "sha512-/6yUWlSH0Uevjj6HWvO86rDeFzuYfzbaKDqifTEemwfwEPyBrODTb3ox/jFzqmc2+UmgJ3IDMS88BKEBh1Nm2Q==", "dev": true, "dependencies": { "underscore": "1.2.1" + }, + "engines": { + "node": "*" } }, "node_modules/dep-graph/node_modules/underscore": { "version": "1.2.1", - "dev": true + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz", + "integrity": "sha512-HRhh6FYh5I5/zTt7L9MnHRA/nlSFPiwymMCXEremmzT7tHR+8CNP0FXHPaUpafAPwvAlNrvZiH91kQwoo/CqUA==", + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/depd": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { "node": ">= 0.8" } }, "node_modules/dependency-graph": { "version": "0.11.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "engines": { "node": ">= 0.6.0" } }, "node_modules/destroy": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -8739,41 +9601,47 @@ }, "node_modules/detect-indent": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/detect-newline": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/detect-node": { "version": "2.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "node_modules/dfa": { "version": "1.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true }, "node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/dir-compare": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", + "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", "dev": true, - "license": "MIT", "dependencies": { "buffer-equal": "1.0.0", "colors": "1.0.3", @@ -8786,8 +9654,9 @@ }, "node_modules/dir-compare/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8795,16 +9664,18 @@ }, "node_modules/dir-compare/node_modules/colors": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/dir-compare/node_modules/commander": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", "dev": true, - "license": "MIT", "dependencies": { "graceful-readlink": ">= 1.0.0" }, @@ -8814,8 +9685,9 @@ }, "node_modules/dir-compare/node_modules/minimatch": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8825,7 +9697,8 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dependencies": { "path-type": "^4.0.0" }, @@ -8834,13 +9707,14 @@ } }, "node_modules/dmg-builder": { - "version": "23.1.0", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz", + "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==", "dev": true, - "license": "MIT", "dependencies": { - "app-builder-lib": "23.1.0", - "builder-util": "23.0.9", - "builder-util-runtime": "9.0.2", + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", "fs-extra": "^10.0.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" @@ -8851,13 +9725,15 @@ }, "node_modules/dmg-builder/node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/dmg-builder/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -8865,13 +9741,65 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dmg-license/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "optional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/dmg-license/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "optional": true + }, "node_modules/dns-equal": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "node_modules/dns-packet": { "version": "5.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -8881,8 +9809,9 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -8892,8 +9821,9 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -8905,18 +9835,20 @@ }, "node_modules/domelementtype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/domhandler": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -8929,17 +9861,20 @@ }, "node_modules/dommatrix": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz", + "integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==", + "dev": true }, "node_modules/dompurify": { - "version": "2.3.8", - "license": "(MPL-2.0 OR Apache-2.0)" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz", + "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==" }, "node_modules/domutils": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -8951,19 +9886,21 @@ }, "node_modules/dot": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dot/-/dot-1.1.3.tgz", + "integrity": "sha512-/nt74Rm+PcfnirXGEdhZleTwGC2LMnuKTeeTIlI82xb5loBBoXNYzr2ezCroPSMtilK8EZIfcNZwOcHN+ib1Lg==", "dev": true, "engines": [ "node >=0.2.6" ], - "license": "MIT", "bin": { "dottojs": "bin/dot-packer" } }, "node_modules/dot-prop": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, - "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -8973,39 +9910,45 @@ }, "node_modules/dotenv": { "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=10" } }, "node_modules/dotenv-expand": { "version": "5.1.0", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true }, "node_modules/duplexer": { "version": "0.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true }, "node_modules/duplexer2": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "readable-stream": "^2.0.2" } }, "node_modules/duplexer3": { "version": "0.1.5", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true }, "node_modules/ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "devOptional": true, - "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -9013,17 +9956,20 @@ }, "node_modules/editor": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", + "integrity": "sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==", + "dev": true }, "node_modules/ee-first": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/ejs": { "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -9035,10 +9981,11 @@ } }, "node_modules/electron": { - "version": "19.0.9", + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/electron/-/electron-19.1.6.tgz", + "integrity": "sha512-bT6Mr7JbHbONpr/U7R47lwTkMUvuAyOfnoLlbDqvGocQyZCCN3JB436wtf2+r3/IpMEz3T+dHLweFDY5i2wuxw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "@electron/get": "^1.14.1", "@types/node": "^16.11.26", @@ -9052,22 +9999,23 @@ } }, "node_modules/electron-builder": { - "version": "23.1.0", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz", + "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==", "dev": true, - "license": "MIT", "dependencies": { "@types/yargs": "^17.0.1", - "app-builder-lib": "23.1.0", - "builder-util": "23.0.9", - "builder-util-runtime": "9.0.2", + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", "chalk": "^4.1.1", - "dmg-builder": "23.1.0", + "dmg-builder": "23.6.0", "fs-extra": "^10.0.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", "read-config-file": "6.2.0", - "update-notifier": "^5.1.0", - "yargs": "^17.0.1" + "simple-update-notifier": "^1.0.7", + "yargs": "^17.5.1" }, "bin": { "electron-builder": "cli.js", @@ -9079,8 +10027,9 @@ }, "node_modules/electron-builder/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9093,8 +10042,9 @@ }, "node_modules/electron-builder/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9108,8 +10058,9 @@ }, "node_modules/electron-builder/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9117,18 +10068,26 @@ "node": ">=7.0.0" } }, + "node_modules/electron-builder/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/electron-builder/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/electron-builder/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9138,8 +10097,10 @@ }, "node_modules/electron-osx-sign": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", + "deprecated": "Please use @electron/osx-sign moving forward. Be aware the API is slightly different", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "bluebird": "^3.5.0", "compare-version": "^0.1.2", @@ -9158,16 +10119,18 @@ }, "node_modules/electron-osx-sign/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/electron-osx-sign/node_modules/isbinaryfile": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", "dev": true, - "license": "MIT", "dependencies": { "buffer-alloc": "^1.2.0" }, @@ -9177,17 +10140,19 @@ }, "node_modules/electron-osx-sign/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/electron-publish": { - "version": "23.0.9", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz", + "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==", "dev": true, - "license": "MIT", "dependencies": { "@types/fs-extra": "^9.0.11", - "builder-util": "23.0.9", - "builder-util-runtime": "9.0.2", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", "chalk": "^4.1.1", "fs-extra": "^10.0.0", "lazy-val": "^1.0.5", @@ -9196,8 +10161,9 @@ }, "node_modules/electron-publish/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9210,8 +10176,9 @@ }, "node_modules/electron-publish/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9225,8 +10192,9 @@ }, "node_modules/electron-publish/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9234,18 +10202,26 @@ "node": ">=7.0.0" } }, + "node_modules/electron-publish/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/electron-publish/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/electron-publish/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9254,17 +10230,20 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.200", - "license": "ISC" + "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==" }, "node_modules/electron/node_modules/@types/node": { - "version": "16.11.45", - "dev": true, - "license": "MIT" + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true }, "node_modules/elementtree": { "version": "0.1.7", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", "dependencies": { "sax": "1.1.4" }, @@ -9274,34 +10253,40 @@ }, "node_modules/elementtree/node_modules/sax": { "version": "1.1.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==" }, "node_modules/emoji-regex": { "version": "8.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/emoji-toolkit": { "version": "6.6.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-toolkit/-/emoji-toolkit-6.6.0.tgz", + "integrity": "sha512-pEu0kow2p1N8zCKnn/L6H0F3rWUBB3P3hVjr/O5yl1fK7N9jU4vO4G7EFapC5Y3XwZLUCY0FZbOPyTkH+4V2eQ==" }, "node_modules/emojis-list": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "engines": { "node": ">= 4" } }, "node_modules/encodeurl": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } }, "node_modules/encoding": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -9309,15 +10294,17 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/endent": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz", + "integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==", "dependencies": { "dedent": "^0.7.0", "fast-json-parse": "^1.0.3", @@ -9326,7 +10313,8 @@ }, "node_modules/enhanced-resolve": { "version": "5.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -9336,9 +10324,10 @@ } }, "node_modules/entities": { - "version": "4.3.1", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -9348,20 +10337,23 @@ }, "node_modules/env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/err-code": { "version": "2.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true }, "node_modules/errno": { "version": "0.1.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "optional": true, "dependencies": { "prr": "~1.0.1" @@ -9372,36 +10364,39 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.20.1", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dev": true, - "license": "MIT", "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-intrinsic": "^1.1.3", "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-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" @@ -9415,20 +10410,23 @@ }, "node_modules/es-module-lexer": { "version": "0.9.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "node_modules/es-shim-unscopables": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, - "license": "MIT", "dependencies": { "has": "^1.0.3" } }, "node_modules/es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -9442,10 +10440,11 @@ } }, "node_modules/es5-ext": { - "version": "0.10.61", + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, "hasInstallScript": true, - "license": "ISC", "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -9457,14 +10456,16 @@ }, "node_modules/es6-error": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/es6-iterator": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, - "license": "MIT", "dependencies": { "d": "1", "es5-ext": "^0.10.35", @@ -9473,8 +10474,9 @@ }, "node_modules/es6-map": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", "dev": true, - "license": "MIT", "dependencies": { "d": "1", "es5-ext": "~0.10.14", @@ -9486,51 +10488,57 @@ }, "node_modules/es6-promise": { "version": "4.2.8", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "devOptional": true }, "node_modules/es6-promisify": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", "devOptional": true, - "license": "MIT", "dependencies": { "es6-promise": "^4.0.3" } }, "node_modules/es6-set": { - "version": "0.1.5", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", "dev": true, - "license": "MIT", "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" } }, - "node_modules/es6-set/node_modules/es6-symbol": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true }, "node_modules/es6-symbol": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, - "license": "ISC", "dependencies": { "d": "^1.0.1", "ext": "^1.1.2" } }, "node_modules/esbuild": { - "version": "0.14.49", + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz", + "integrity": "sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg==", "hasInstallScript": true, - "license": "MIT", "optional": true, "bin": { "esbuild": "bin/esbuild" @@ -9539,34 +10547,141 @@ "node": ">=12" }, "optionalDependencies": { - "esbuild-android-64": "0.14.49", - "esbuild-android-arm64": "0.14.49", - "esbuild-darwin-64": "0.14.49", - "esbuild-darwin-arm64": "0.14.49", - "esbuild-freebsd-64": "0.14.49", - "esbuild-freebsd-arm64": "0.14.49", - "esbuild-linux-32": "0.14.49", - "esbuild-linux-64": "0.14.49", - "esbuild-linux-arm": "0.14.49", - "esbuild-linux-arm64": "0.14.49", - "esbuild-linux-mips64le": "0.14.49", - "esbuild-linux-ppc64le": "0.14.49", - "esbuild-linux-riscv64": "0.14.49", - "esbuild-linux-s390x": "0.14.49", - "esbuild-netbsd-64": "0.14.49", - "esbuild-openbsd-64": "0.14.49", - "esbuild-sunos-64": "0.14.49", - "esbuild-windows-32": "0.14.49", - "esbuild-windows-64": "0.14.49", - "esbuild-windows-arm64": "0.14.49" + "@esbuild/linux-loong64": "0.15.5", + "esbuild-android-64": "0.15.5", + "esbuild-android-arm64": "0.15.5", + "esbuild-darwin-64": "0.15.5", + "esbuild-darwin-arm64": "0.15.5", + "esbuild-freebsd-64": "0.15.5", + "esbuild-freebsd-arm64": "0.15.5", + "esbuild-linux-32": "0.15.5", + "esbuild-linux-64": "0.15.5", + "esbuild-linux-arm": "0.15.5", + "esbuild-linux-arm64": "0.15.5", + "esbuild-linux-mips64le": "0.15.5", + "esbuild-linux-ppc64le": "0.15.5", + "esbuild-linux-riscv64": "0.15.5", + "esbuild-linux-s390x": "0.15.5", + "esbuild-netbsd-64": "0.15.5", + "esbuild-openbsd-64": "0.15.5", + "esbuild-sunos-64": "0.15.5", + "esbuild-windows-32": "0.15.5", + "esbuild-windows-64": "0.15.5", + "esbuild-windows-arm64": "0.15.5" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz", + "integrity": "sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz", + "integrity": "sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz", + "integrity": "sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz", + "integrity": "sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz", + "integrity": "sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz", + "integrity": "sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz", + "integrity": "sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, "node_modules/esbuild-linux-64": { - "version": "0.14.49", + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz", + "integrity": "sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -9575,9 +10690,145 @@ "node": ">=12" } }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz", + "integrity": "sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz", + "integrity": "sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz", + "integrity": "sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz", + "integrity": "sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz", + "integrity": "sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz", + "integrity": "sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz", + "integrity": "sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz", + "integrity": "sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz", + "integrity": "sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/esbuild-wasm": { - "version": "0.14.49", - "license": "MIT", + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz", + "integrity": "sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A==", "bin": { "esbuild": "bin/esbuild" }, @@ -9585,34 +10836,85 @@ "node": ">=12" } }, + "node_modules/esbuild-windows-32": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz", + "integrity": "sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz", + "integrity": "sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz", + "integrity": "sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { "node": ">=6" } }, "node_modules/escape-goat": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/escape-html": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { "node": ">=0.8.0" } }, "node_modules/escodegen": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", "dev": true, "dependencies": { "esprima": "~1.0.4", @@ -9632,6 +10934,8 @@ }, "node_modules/escodegen/node_modules/esprima": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", "dev": true, "bin": { "esparse": "bin/esparse.js", @@ -9643,6 +10947,8 @@ }, "node_modules/escodegen/node_modules/estraverse": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", "dev": true, "engines": { "node": ">=0.4.0" @@ -9650,6 +10956,8 @@ }, "node_modules/escodegen/node_modules/esutils": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9657,6 +10965,8 @@ }, "node_modules/escodegen/node_modules/source-map": { "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", "dev": true, "optional": true, "dependencies": { @@ -9667,12 +10977,15 @@ } }, "node_modules/eslint": { - "version": "8.20.0", + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", "dev": true, - "license": "MIT", "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -9682,18 +10995,21 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -9704,8 +11020,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -9731,8 +11046,9 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7", "resolve": "^1.20.0" @@ -9740,97 +11056,44 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.7.3", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", "dev": true, - "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-import": { "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.4", "array.prototype.flat": "^1.2.5", @@ -9855,8 +11118,9 @@ }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9864,16 +11128,18 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -9883,8 +11149,9 @@ }, "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9894,25 +11161,26 @@ }, "node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/eslint-plugin-jsdoc": { - "version": "39.3.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.6.tgz", - "integrity": "sha512-R6dZ4t83qPdMhIOGr7g2QII2pwCjYyKP+z0tPOfO1bbAbQyKC20Y2Rd6z1te86Lq3T7uM8bNo+VD9YFpE8HU/g==", + "version": "39.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.2.tgz", + "integrity": "sha512-dvgY/W7eUFoAIIiaWHERIMI61ZWqcz9YFjEeyTzdPlrZc3TY/3aZm5aB91NUoTLWYZmO/vFlYSuQi15tF7uE5A==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.31.0", + "@es-joy/jsdoccomment": "~0.36.0", "comment-parser": "1.3.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "semver": "^7.3.7", + "semver": "^7.3.8", "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": "^14 || ^16 || ^17 || ^18" + "node": "^14 || ^16 || ^17 || ^18 || ^19" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" @@ -9930,6 +11198,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-plugin-jsdoc/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-plugin-prefer-arrow": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", @@ -9941,7 +11236,8 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -9952,8 +11248,9 @@ }, "node_modules/eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -9969,24 +11266,27 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -10000,8 +11300,9 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10014,13 +11315,15 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10028,8 +11331,9 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10043,8 +11347,9 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10052,10 +11357,17 @@ "node": ">=7.0.0" } }, + "node_modules/eslint/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/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -10065,8 +11377,9 @@ }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -10077,16 +11390,34 @@ }, "node_modules/eslint/node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, + "node_modules/eslint/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/eslint/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -10096,8 +11427,9 @@ }, "node_modules/eslint/node_modules/globals": { "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -10110,16 +11442,18 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -10129,13 +11463,30 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT" + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10143,10 +11494,41 @@ "node": "*" } }, + "node_modules/eslint/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/eslint/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/eslint/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10156,8 +11538,9 @@ }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -10166,21 +11549,26 @@ } }, "node_modules/espree": { - "version": "9.3.2", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { "version": "4.0.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -10191,8 +11579,9 @@ }, "node_modules/esquery": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -10202,15 +11591,17 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { "version": "4.3.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dependencies": { "estraverse": "^5.2.0" }, @@ -10220,41 +11611,47 @@ }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { "node": ">=4.0" } }, "node_modules/estree-is-function": { "version": "1.0.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true }, "node_modules/esutils": { "version": "2.0.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, "node_modules/event-emitter": { "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, - "license": "MIT", "dependencies": { "d": "1", "es5-ext": "~0.10.14" @@ -10262,8 +11659,9 @@ }, "node_modules/event-stream": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", "dev": true, - "license": "MIT", "dependencies": { "duplexer": "^0.1.1", "from": "^0.1.7", @@ -10276,22 +11674,26 @@ }, "node_modules/eventemitter-asyncresource": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==" }, "node_modules/eventemitter3": { "version": "4.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/events": { "version": "3.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { "node": ">=0.8.x" } }, "node_modules/execa": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -10312,18 +11714,21 @@ }, "node_modules/exit": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "devOptional": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/express": { - "version": "4.18.1", - "license": "MIT", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -10342,7 +11747,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -10359,14 +11764,16 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/finalhandler": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -10382,10 +11789,13 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -10399,30 +11809,33 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/ext": { - "version": "1.6.0", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, - "license": "ISC", "dependencies": { - "type": "^2.5.0" + "type": "^2.7.2" } }, "node_modules/ext/node_modules/type": { - "version": "2.6.0", - "dev": true, - "license": "ISC" + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true }, "node_modules/extend": { "version": "3.0.2", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "devOptional": true }, "node_modules/external-editor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -10434,7 +11847,8 @@ }, "node_modules/external-editor/node_modules/iconv-lite": { "version": "0.4.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -10444,7 +11858,8 @@ }, "node_modules/external-editor/node_modules/tmp": { "version": "0.0.33", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -10454,8 +11869,9 @@ }, "node_modules/extract-zip": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "concat-stream": "^1.6.2", "debug": "^2.6.9", @@ -10468,16 +11884,18 @@ }, "node_modules/extract-zip/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/extract-zip/node_modules/mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -10487,20 +11905,23 @@ }, "node_modules/extract-zip/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/extsprintf": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", "engines": [ "node >=0.6.0" - ], - "license": "MIT" + ] }, "node_modules/fancy-log": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", "dev": true, - "license": "MIT", "dependencies": { "color-support": "^1.1.3" }, @@ -10508,13 +11929,20 @@ "node": ">=10.13.0" } }, + "node_modules/fast-clone": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz", + "integrity": "sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.2.11", - "license": "MIT", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -10528,32 +11956,38 @@ }, "node_modules/fast-json-parse": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastparse": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true }, "node_modules/fastq": { "version": "1.13.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/faye-websocket": { "version": "0.11.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -10563,15 +11997,17 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/figures": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -10584,8 +12020,9 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -10595,19 +12032,22 @@ }, "node_modules/file-saver": { "version": "2.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, "node_modules/filelist": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, "node_modules/fill-range": { "version": "7.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -10617,8 +12057,9 @@ }, "node_modules/finalhandler": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -10634,21 +12075,24 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/finalhandler/node_modules/on-finished": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -10658,8 +12102,9 @@ }, "node_modules/finalhandler/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -10675,7 +12120,8 @@ }, "node_modules/find-cache-dir": { "version": "3.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -10690,7 +12136,8 @@ }, "node_modules/find-up": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -10701,16 +12148,18 @@ }, "node_modules/findit2": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", + "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.22" } }, "node_modules/flat-cache": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -10720,19 +12169,21 @@ } }, "node_modules/flatted": { - "version": "3.2.6", - "dev": true, - "license": "ISC" + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.1", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -10744,16 +12195,18 @@ }, "node_modules/forever-agent": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "devOptional": true, - "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/form-data": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -10765,21 +12218,24 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { "node": ">= 0.6" } }, "node_modules/frac": { "version": "1.1.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", "engines": { "node": ">=0.8" } }, "node_modules/fraction.js": { "version": "4.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "engines": { "node": "*" }, @@ -10790,19 +12246,22 @@ }, "node_modules/fresh": { "version": "0.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } }, "node_modules/from": { "version": "0.1.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true }, "node_modules/fs-extra": { "version": "10.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -10814,7 +12273,8 @@ }, "node_modules/fs-minipass": { "version": "2.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { "minipass": "^3.0.0" }, @@ -10824,20 +12284,37 @@ }, "node_modules/fs-monkey": { "version": "1.0.3", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" }, "node_modules/fs.realpath": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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", - "license": "MIT" + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -10851,23 +12328,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gauge": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, - "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -10896,26 +12370,30 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "engines": { "node": ">=6.9.0" } }, "node_modules/get-assigned-identifiers": { "version": "1.2.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true }, "node_modules/get-caller-file": { "version": "2.0.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "license": "MIT", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -10927,14 +12405,16 @@ }, "node_modules/get-package-type": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "engines": { "node": ">=8.0.0" } }, "node_modules/get-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, @@ -10944,8 +12424,9 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -10959,15 +12440,17 @@ }, "node_modules/getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "devOptional": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/glob": { "version": "8.0.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10984,7 +12467,8 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -10994,12 +12478,14 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/global-agent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -11014,9 +12500,10 @@ } }, "node_modules/global-dirs": { - "version": "3.0.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, - "license": "MIT", "dependencies": { "ini": "2.0.0" }, @@ -11029,16 +12516,18 @@ }, "node_modules/global-dirs/node_modules/ini": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/global-tunnel-ng": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "dependencies": { "encodeurl": "^1.0.2", @@ -11052,15 +12541,17 @@ }, "node_modules/globals": { "version": "11.12.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { "node": ">=4" } }, "node_modules/globalthis": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "define-properties": "^1.1.3" @@ -11074,8 +12565,9 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -11149,15 +12641,17 @@ }, "node_modules/good-listener": { "version": "1.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", "dependencies": { "delegate": "^3.1.2" } }, "node_modules/got": { "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, - "license": "MIT", "dependencies": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -11177,8 +12671,9 @@ }, "node_modules/got/node_modules/get-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -11188,16 +12683,25 @@ }, "node_modules/graceful-fs": { "version": "4.2.10", - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/graceful-readlink": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true }, "node_modules/graphlib": { "version": "2.1.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", "dependencies": { "lodash": "^4.17.15" } @@ -11213,19 +12717,22 @@ }, "node_modules/hammerjs": { "version": "2.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", "engines": { "node": ">=0.8.0" } }, "node_modules/handle-thing": { "version": "2.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "node_modules/handlebars": { "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -11244,24 +12751,28 @@ }, "node_modules/handlebars/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/har-schema": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "devOptional": true, - "license": "ISC", "engines": { "node": ">=4" } }, "node_modules/har-validator": { "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "devOptional": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -11272,8 +12783,9 @@ }, "node_modules/har-validator/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "devOptional": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11287,12 +12799,14 @@ }, "node_modules/har-validator/node_modules/json-schema-traverse": { "version": "0.4.1", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "devOptional": true }, "node_modules/has": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { "function-bind": "^1.1.1" }, @@ -11302,8 +12816,9 @@ }, "node_modules/has-ansi": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "devOptional": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -11313,30 +12828,35 @@ }, "node_modules/has-ansi/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.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, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.0", - "license": "MIT", + "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" }, @@ -11346,7 +12866,8 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -11356,8 +12877,9 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -11370,20 +12892,23 @@ }, "node_modules/has-unicode": { "version": "2.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true }, "node_modules/has-yarn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hdr-histogram-js": { "version": "2.0.3", - "license": "BSD", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", "dependencies": { "@assemblyscript/loader": "^0.10.1", "base64-js": "^1.2.0", @@ -11392,23 +12917,27 @@ }, "node_modules/hdr-histogram-js/node_modules/pako": { "version": "1.0.11", - "license": "(MIT AND Zlib)" + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/hdr-histogram-percentiles-obj": { "version": "3.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==" }, "node_modules/he": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "bin": { "he": "bin/he" } }, "node_modules/hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -11418,8 +12947,9 @@ }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11429,7 +12959,8 @@ }, "node_modules/hpack.js": { "version": "2.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -11439,10 +12970,13 @@ }, "node_modules/html-entities": { "version": "2.3.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" }, "node_modules/htmlparser2": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -11451,7 +12985,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -11461,8 +12994,9 @@ }, "node_modules/http-auth": { "version": "4.1.9", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", + "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", "dev": true, - "license": "MIT", "dependencies": { "apache-crypt": "^1.1.2", "apache-md5": "^1.0.6", @@ -11474,25 +13008,29 @@ } }, "node_modules/http-auth-connect": { - "version": "1.0.5", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", + "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/http-cache-semantics": { "version": "4.1.0", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true }, "node_modules/http-deceiver": { "version": "1.2.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, "node_modules/http-errors": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -11506,11 +13044,13 @@ }, "node_modules/http-parser-js": { "version": "0.5.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, "node_modules/http-proxy": { "version": "1.18.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -11522,8 +13062,9 @@ }, "node_modules/http-proxy-agent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, - "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -11535,7 +13076,8 @@ }, "node_modules/http-proxy-middleware": { "version": "2.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -11557,8 +13099,9 @@ }, "node_modules/http-signature": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "devOptional": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -11571,7 +13114,8 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dependencies": { "agent-base": "6", "debug": "4" @@ -11582,21 +13126,25 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "engines": { "node": ">=10.17.0" } }, "node_modules/humanize-ms": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.0.0" } }, "node_modules/i18next": { - "version": "21.8.14", + "version": "21.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.10.0.tgz", + "integrity": "sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==", "dev": true, "funding": [ { @@ -11612,14 +13160,31 @@ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" } ], - "license": "MIT", "dependencies": { "@babel/runtime": "^7.17.2" } }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -11629,7 +13194,8 @@ }, "node_modules/icss-utils": { "version": "5.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -11639,6 +13205,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -11652,20 +13220,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, - "license": "ISC", "dependencies": { "minimatch": "^5.0.1" }, @@ -11675,7 +13244,8 @@ }, "node_modules/image-size": { "version": "0.5.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "optional": true, "bin": { "image-size": "bin/image-size.js" @@ -11686,16 +13256,19 @@ }, "node_modules/immediate": { "version": "3.0.6", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "devOptional": true }, "node_modules/immutable": { "version": "4.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" }, "node_modules/import-fresh": { "version": "3.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -11709,40 +13282,46 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "engines": { "node": ">=4" } }, "node_modules/import-lazy": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/imurmurhash": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { "node": ">=8" } }, "node_modules/infer-owner": { "version": "1.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "node_modules/inflight": { "version": "1.0.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -11750,20 +13329,23 @@ }, "node_modules/inherits": { "version": "2.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", + "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", "dev": true, - "license": "ISC", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/init-package-json": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", + "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", "dev": true, - "license": "ISC", "dependencies": { "npm-package-arg": "^8.1.5", "promzard": "^0.3.0", @@ -11779,8 +13361,9 @@ }, "node_modules/init-package-json/node_modules/npm-package-arg": { "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, - "license": "ISC", "dependencies": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", @@ -11792,7 +13375,8 @@ }, "node_modules/inquirer": { "version": "8.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -11816,7 +13400,8 @@ }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -11829,7 +13414,8 @@ }, "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11843,7 +13429,8 @@ }, "node_modules/inquirer/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -11851,16 +13438,23 @@ "node": ">=7.0.0" } }, + "node_modules/inquirer/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==" + }, "node_modules/inquirer/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -11870,13 +13464,15 @@ }, "node_modules/inside": { "version": "1.0.0", - "dev": true, - "license": "Public Domain" + "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", + "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", + "dev": true }, "node_modules/insight": { "version": "0.11.1", + "resolved": "https://registry.npmjs.org/insight/-/insight-0.11.1.tgz", + "integrity": "sha512-TBcZ0qC9dgdmcxL93OoqkY/RZXJtIi0i07phX/QyYk2ysmJtZex59dgTj4Doq50N9CG9dLRe/RIudc/5CCoFNw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "async": "^2.6.2", "chalk": "^4.1.1", @@ -11894,24 +13490,27 @@ }, "node_modules/insight/node_modules/ansi-escapes": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/insight/node_modules/ansi-regex": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/insight/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11924,8 +13523,9 @@ }, "node_modules/insight/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11939,8 +13539,9 @@ }, "node_modules/insight/node_modules/cli-cursor": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^2.0.0" }, @@ -11950,13 +13551,15 @@ }, "node_modules/insight/node_modules/cli-width": { "version": "2.2.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true }, "node_modules/insight/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11964,10 +13567,17 @@ "node": ">=7.0.0" } }, + "node_modules/insight/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/insight/node_modules/figures": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -11977,16 +13587,18 @@ }, "node_modules/insight/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/insight/node_modules/inquirer": { "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -12008,8 +13620,9 @@ }, "node_modules/insight/node_modules/inquirer/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -12019,8 +13632,9 @@ }, "node_modules/insight/node_modules/inquirer/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -12032,29 +13646,33 @@ }, "node_modules/insight/node_modules/inquirer/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/insight/node_modules/inquirer/node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/insight/node_modules/inquirer/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, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/insight/node_modules/inquirer/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -12064,29 +13682,33 @@ }, "node_modules/insight/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/insight/node_modules/mimic-fn": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/insight/node_modules/mute-stream": { "version": "0.0.7", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "dev": true }, "node_modules/insight/node_modules/onetime": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^1.0.0" }, @@ -12096,8 +13718,9 @@ }, "node_modules/insight/node_modules/restore-cursor": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -12108,8 +13731,9 @@ }, "node_modules/insight/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -12119,8 +13743,9 @@ }, "node_modules/insight/node_modules/string-width": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, - "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -12131,16 +13756,18 @@ }, "node_modules/insight/node_modules/string-width/node_modules/ansi-regex": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/insight/node_modules/string-width/node_modules/strip-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -12150,8 +13777,9 @@ }, "node_modules/insight/node_modules/strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -12161,8 +13789,9 @@ }, "node_modules/insight/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12172,13 +13801,15 @@ }, "node_modules/insight/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "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, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -12190,27 +13821,31 @@ }, "node_modules/internmap": { "version": "2.0.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", "engines": { "node": ">=12" } }, "node_modules/ip": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true }, "node_modules/ipaddr.js": { "version": "1.9.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "engines": { "node": ">= 0.10" } }, "node_modules/is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -12224,12 +13859,14 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -12239,7 +13876,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -12249,8 +13887,9 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -12263,9 +13902,10 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12275,8 +13915,9 @@ }, "node_modules/is-ci": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, - "license": "MIT", "dependencies": { "ci-info": "^3.2.0" }, @@ -12285,8 +13926,9 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", - "license": "MIT", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dependencies": { "has": "^1.0.3" }, @@ -12296,8 +13938,9 @@ }, "node_modules/is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -12310,7 +13953,8 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "bin": { "is-docker": "cli.js" }, @@ -12323,21 +13967,24 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { "node": ">=8" } }, "node_modules/is-glob": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -12347,8 +13994,9 @@ }, "node_modules/is-installed-globally": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, - "license": "MIT", "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -12362,20 +14010,23 @@ }, "node_modules/is-interactive": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "engines": { "node": ">=8" } }, "node_modules/is-lambda": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true }, "node_modules/is-negative-zero": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12385,8 +14036,9 @@ }, "node_modules/is-npm": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -12396,15 +14048,17 @@ }, "node_modules/is-number": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "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, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -12417,24 +14071,27 @@ }, "node_modules/is-obj": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-path-cwd": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-path-in-cwd": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "devOptional": true, - "license": "MIT", "dependencies": { "is-path-inside": "^1.0.0" }, @@ -12444,8 +14101,9 @@ }, "node_modules/is-path-in-cwd/node_modules/is-path-inside": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", "devOptional": true, - "license": "MIT", "dependencies": { "path-is-inside": "^1.0.1" }, @@ -12455,14 +14113,16 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "engines": { "node": ">=10" }, @@ -12472,7 +14132,8 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dependencies": { "isobject": "^3.0.1" }, @@ -12482,15 +14143,17 @@ }, "node_modules/is-plain-object/node_modules/isobject": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -12504,8 +14167,9 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -12515,7 +14179,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -12525,8 +14190,9 @@ }, "node_modules/is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -12539,8 +14205,9 @@ }, "node_modules/is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -12553,12 +14220,14 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "devOptional": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "engines": { "node": ">=10" }, @@ -12568,8 +14237,9 @@ }, "node_modules/is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -12579,11 +14249,13 @@ }, "node_modules/is-what": { "version": "3.14.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, "node_modules/is-wsl": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { "is-docker": "^2.0.0" }, @@ -12593,17 +14265,20 @@ }, "node_modules/is-yarn-global": { "version": "0.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true }, "node_modules/isarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isbinaryfile": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8.0.0" }, @@ -12613,31 +14288,36 @@ }, "node_modules/isexe": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/isstream": { "version": "0.1.2", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "devOptional": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "license": "BSD-3-Clause", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -12651,15 +14331,17 @@ }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "6.3.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" } }, "node_modules/jake": { "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -12675,8 +14357,9 @@ }, "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12689,13 +14372,15 @@ }, "node_modules/jake/node_modules/async": { "version": "3.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true }, "node_modules/jake/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -12703,8 +14388,9 @@ }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12718,8 +14404,9 @@ }, "node_modules/jake/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12727,18 +14414,26 @@ "node": ">=7.0.0" } }, + "node_modules/jake/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/jake/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jake/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12748,8 +14443,9 @@ }, "node_modules/jake/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12762,13 +14458,13 @@ "link": true }, "node_modules/jasmine": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.3.0.tgz", - "integrity": "sha512-ieBmwkd8L1DXnvSnxx7tecXgA0JDgMXPAwBcqM4lLPedJeI9hTHuWifPynTC+dLe4Y+GkSPSlbqqrmYIgGzYUw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.5.0.tgz", + "integrity": "sha512-9olGRvNZyADIwYL9XBNBst5BTU/YaePzuddK+YRslc7rI9MdTIE4r3xaBKbv2GEmzYYUfMOdTR8/i6JfLZaxSQ==", "dev": true, "dependencies": { "glob": "^7.1.6", - "jasmine-core": "^4.3.0" + "jasmine-core": "^4.5.0" }, "bin": { "jasmine": "bin/jasmine.js" @@ -12776,8 +14472,9 @@ }, "node_modules/jasmine-core": { "version": "4.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.2.0.tgz", + "integrity": "sha512-OcFpBrIhnbmb9wfI8cqPSJ50pv3Wg4/NSgoZIqHzIwO/2a9qivJWzv8hUvaREIMYYJBas6AvfXATFdVuzzCqVw==", + "dev": true }, "node_modules/jasmine-growl-reporter": { "version": "2.0.0", @@ -12838,8 +14535,9 @@ }, "node_modules/jasmine-spec-reporter": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", + "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "colors": "1.4.0" } @@ -12892,9 +14590,9 @@ } }, "node_modules/jasmine/node_modules/jasmine-core": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.3.0.tgz", - "integrity": "sha512-qybtBUesniQdW6n+QIHMng2vDOHscIC/dEXjW+JzO9+LoAZMb03RCUC5xFOv/btSKPm1xL42fn+RjlU4oB42Lg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz", + "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==", "dev": true }, "node_modules/jasmine/node_modules/minimatch": { @@ -12911,15 +14609,17 @@ }, "node_modules/jasminewd2": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", "devOptional": true, - "license": "MIT", "engines": { "node": ">= 6.9.x" } }, "node_modules/jest-worker": { "version": "27.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -12931,14 +14631,16 @@ }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { "has-flag": "^4.0.0" }, @@ -12949,13 +14651,21 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "3.14.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -12966,8 +14676,9 @@ }, "node_modules/jsbn": { "version": "0.1.1", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "devOptional": true }, "node_modules/jsdoc-type-pratt-parser": { "version": "3.1.0", @@ -12980,7 +14691,8 @@ }, "node_modules/jsesc": { "version": "2.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "bin": { "jsesc": "bin/jsesc" }, @@ -12990,40 +14702,48 @@ }, "node_modules/json-buffer": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema": { "version": "0.4.0", - "devOptional": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "devOptional": true }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-schema-typed": { "version": "7.0.3", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", + "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "devOptional": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "devOptional": true }, "node_modules/json5": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "bin": { "json5": "lib/cli.js" }, @@ -13033,11 +14753,13 @@ }, "node_modules/jsonc-parser": { "version": "3.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==" }, "node_modules/jsonfile": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { "universalify": "^2.0.0" }, @@ -13047,16 +14769,18 @@ }, "node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" - ], - "license": "MIT" + ] }, "node_modules/jsprim": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "devOptional": true, - "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -13069,24 +14793,27 @@ }, "node_modules/jsprim/node_modules/core-util-is": { "version": "1.0.2", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "devOptional": true }, "node_modules/jsprim/node_modules/extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "devOptional": true, "engines": [ "node >=0.6.0" - ], - "license": "MIT" + ] }, "node_modules/jsprim/node_modules/verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "devOptional": true, "engines": [ "node >=0.6.0" ], - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -13094,9 +14821,10 @@ } }, "node_modules/jszip": { - "version": "3.10.0", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "devOptional": true, - "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -13106,23 +14834,26 @@ }, "node_modules/jszip/node_modules/pako": { "version": "1.0.11", - "devOptional": true, - "license": "(MIT AND Zlib)" + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "devOptional": true }, "node_modules/karma-source-map-support": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", "dependencies": { "source-map-support": "^0.5.5" } }, "node_modules/katex": { - "version": "0.16.0", + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.3.tgz", + "integrity": "sha512-3EykQddareoRmbtNiNEDgl3IGjryyrp2eg/25fHDEnlHymIDi33bptkMv6K4EOC2LZCybLW/ZkEo6Le+EM9pmA==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" ], - "license": "MIT", "dependencies": { "commander": "^8.0.0" }, @@ -13132,40 +14863,47 @@ }, "node_modules/katex/node_modules/commander": { "version": "8.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "engines": { "node": ">= 12" } }, "node_modules/keyv": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.0" } }, "node_modules/khroma": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" }, "node_modules/kind-of": { "version": "6.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { "node": ">=0.10.0" } }, "node_modules/klona": { "version": "2.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "engines": { "node": ">= 8" } }, "node_modules/latest-version": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dev": true, - "license": "MIT", "dependencies": { "package-json": "^6.3.0" }, @@ -13175,12 +14913,14 @@ }, "node_modules/lazy-val": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true }, "node_modules/less": { "version": "4.1.3", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -13204,7 +14944,8 @@ }, "node_modules/less-loader": { "version": "11.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.0.0.tgz", + "integrity": "sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw==", "dependencies": { "klona": "^2.0.4" }, @@ -13222,7 +14963,8 @@ }, "node_modules/less/node_modules/make-dir": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "optional": true, "dependencies": { "pify": "^4.0.1", @@ -13234,7 +14976,8 @@ }, "node_modules/less/node_modules/mime": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "optional": true, "bin": { "mime": "cli.js" @@ -13245,7 +14988,8 @@ }, "node_modules/less/node_modules/pify": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "optional": true, "engines": { "node": ">=6" @@ -13253,7 +14997,8 @@ }, "node_modules/less/node_modules/semver": { "version": "5.7.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "optional": true, "bin": { "semver": "bin/semver" @@ -13261,7 +15006,8 @@ }, "node_modules/less/node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true, "engines": { "node": ">=0.10.0" @@ -13269,8 +15015,9 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -13281,7 +15028,8 @@ }, "node_modules/license-webpack-plugin": { "version": "4.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", "dependencies": { "webpack-sources": "^3.0.0" }, @@ -13296,33 +15044,38 @@ }, "node_modules/lie": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "devOptional": true, - "license": "MIT", "dependencies": { "immediate": "~3.0.5" } }, "node_modules/lines-and-columns": { "version": "1.2.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loader-runner": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", "engines": { "node": ">= 12.13.0" } }, "node_modules/locate-path": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { "p-locate": "^4.1.0" }, @@ -13332,7 +15085,8 @@ }, "node_modules/lodash": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", @@ -13341,16 +15095,19 @@ }, "node_modules/lodash.debounce": { "version": "4.0.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -13364,7 +15121,8 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -13377,7 +15135,8 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13391,7 +15150,8 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -13399,16 +15159,23 @@ "node": ">=7.0.0" } }, + "node_modules/log-symbols/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==" + }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -13417,9 +15184,10 @@ } }, "node_modules/loglevel": { - "version": "1.8.0", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -13430,13 +15198,15 @@ }, "node_modules/loglevel-plugin-prefix": { "version": "0.8.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true }, "node_modules/loud-rejection": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", + "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", "dev": true, - "license": "MIT", "dependencies": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.2" @@ -13447,28 +15217,32 @@ }, "node_modules/lowercase-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/lru-cache": { - "version": "7.13.1", - "license": "ISC", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", "engines": { "node": ">=12" } }, "node_modules/lunr": { "version": "2.3.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true }, "node_modules/macos-release": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -13478,7 +15252,8 @@ }, "node_modules/magic-string": { "version": "0.26.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", + "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", "dependencies": { "sourcemap-codec": "^1.4.8" }, @@ -13488,7 +15263,8 @@ }, "node_modules/make-dir": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dependencies": { "semver": "^6.0.0" }, @@ -13501,20 +15277,23 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" } }, "node_modules/make-error": { "version": "1.3.6", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "node_modules/make-fetch-happen": { - "version": "10.2.0", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, - "license": "ISC", "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", @@ -13539,12 +15318,14 @@ }, "node_modules/map-stream": { "version": "0.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", + "dev": true }, "node_modules/marked": { - "version": "4.0.18", - "license": "MIT", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", + "integrity": "sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==", "bin": { "marked": "bin/marked.js" }, @@ -13554,8 +15335,9 @@ }, "node_modules/matcher": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" @@ -13566,8 +15348,9 @@ }, "node_modules/matcher/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=10" @@ -13578,16 +15361,19 @@ }, "node_modules/material-design-icons": { "version": "3.0.1", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/material-design-icons/-/material-design-icons-3.0.1.tgz", + "integrity": "sha512-t19Z+QZBwSZulxptEu05kIm+UyfIdJY1JDwI+nx02j269m6W414whiQz9qfvQIiLrdx71RQv+T48nHhuQXOCIQ==" }, "node_modules/mathjax": { "version": "3.2.2", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz", + "integrity": "sha512-Bt+SSVU8eBG27zChVewOicYs7Xsdt40qm4+UpHyX7k0/O9NliPc+x77k1/FEsPsjKPZGJvtRZM1vO+geW0OhGw==" }, "node_modules/md5-file": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz", + "integrity": "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==", "dev": true, - "license": "MIT", "bin": { "md5-file": "cli.js" }, @@ -13597,14 +15383,16 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } }, "node_modules/memfs": { - "version": "3.4.7", - "license": "Unlicense", + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.11.tgz", + "integrity": "sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w==", "dependencies": { "fs-monkey": "^1.0.3" }, @@ -13614,60 +15402,80 @@ }, "node_modules/merge-descriptors": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/merge-source-map": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", "dev": true, - "license": "MIT", "dependencies": { "source-map": "^0.5.6" } }, "node_modules/merge-source-map/node_modules/source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/merge-stream": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { "node": ">= 8" } }, "node_modules/mermaid": { - "version": "9.1.3", - "license": "MIT", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.2.2.tgz", + "integrity": "sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==", "dependencies": { "@braintree/sanitize-url": "^6.0.0", "d3": "^7.0.0", "dagre": "^0.8.5", "dagre-d3": "^0.6.4", - "dompurify": "2.3.8", + "dompurify": "2.4.0", + "fast-clone": "^1.5.13", "graphlib": "^2.1.8", "khroma": "^2.0.0", + "lodash": "^4.17.21", "moment-mini": "^2.24.0", - "stylis": "^4.0.10" + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.2", + "uuid": "^9.0.0" + } + }, + "node_modules/mermaid/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/methods": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "version": "4.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -13678,8 +15486,9 @@ }, "node_modules/mime": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -13689,14 +15498,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { "mime-db": "1.52.0" }, @@ -13706,23 +15517,26 @@ }, "node_modules/mimic-fn": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/mini-css-extract-plugin": { "version": "2.6.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", "dependencies": { "schema-utils": "^4.0.0" }, @@ -13739,7 +15553,8 @@ }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -13756,11 +15571,13 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimatch": { "version": "5.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -13769,13 +15586,18 @@ } }, "node_modules/minimist": { - "version": "1.2.6", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "devOptional": true, - "license": "MIT" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minipass": { "version": "3.3.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dependencies": { "yallist": "^4.0.0" }, @@ -13785,7 +15607,8 @@ }, "node_modules/minipass-collect": { "version": "1.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dependencies": { "minipass": "^3.0.0" }, @@ -13794,9 +15617,10 @@ } }, "node_modules/minipass-fetch": { - "version": "2.1.0", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, - "license": "MIT", "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", @@ -13811,7 +15635,8 @@ }, "node_modules/minipass-flush": { "version": "1.0.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dependencies": { "minipass": "^3.0.0" }, @@ -13821,8 +15646,9 @@ }, "node_modules/minipass-json-stream": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, - "license": "MIT", "dependencies": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" @@ -13830,7 +15656,8 @@ }, "node_modules/minipass-pipeline": { "version": "1.2.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dependencies": { "minipass": "^3.0.0" }, @@ -13840,8 +15667,9 @@ }, "node_modules/minipass-sized": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -13851,7 +15679,8 @@ }, "node_modules/minizlib": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -13862,7 +15691,8 @@ }, "node_modules/mkdirp": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { "mkdirp": "bin/cmd.js" }, @@ -13871,13 +15701,15 @@ } }, "node_modules/moment-mini": { - "version": "2.24.0", - "license": "MIT" + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", + "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==" }, "node_modules/morgan": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", "dev": true, - "license": "MIT", "dependencies": { "basic-auth": "~2.0.1", "debug": "2.6.9", @@ -13891,21 +15723,24 @@ }, "node_modules/morgan/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/morgan/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/morgan/node_modules/on-finished": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -13915,15 +15750,18 @@ }, "node_modules/mousetrap": { "version": "1.6.5", - "license": "Apache-2.0 WITH LLVM-exception" + "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", + "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==" }, "node_modules/ms": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multicast-dns": { "version": "7.2.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -13934,11 +15772,13 @@ }, "node_modules/mute-stream": { "version": "0.0.8", - "license": "ISC" + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "node_modules/nanoid": { "version": "3.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -13948,12 +15788,20 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true }, "node_modules/needle": { - "version": "3.1.0", - "license": "MIT", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", "optional": true, "dependencies": { "debug": "^3.2.6", @@ -13969,7 +15817,8 @@ }, "node_modules/needle/node_modules/debug": { "version": "3.2.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "optional": true, "dependencies": { "ms": "^2.1.1" @@ -13977,29 +15826,33 @@ }, "node_modules/negotiator": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/next-tick": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true }, "node_modules/ng2-charts": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.0.0.tgz", - "integrity": "sha512-1COLMs1UH8XIurk9C3pBQW3zH4RM3ggPtaC5vGjEmRGZ2cK/j8DqpzN4xMqyk0KB4D2vw/ZejgXmxxZ4Ie58Rw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.0.1.tgz", + "integrity": "sha512-QYXVZHP/RIRhAw36xeXPL6JZz73fXuHePTyGwBiOfIRGCG7EDYLApnSgEn+Mx+QFKYT1VN9Fsj5b04rrd2nrEw==", "dependencies": { "lodash-es": "^4.17.15", "tslib": "^2.3.0" }, "peerDependencies": { + "@angular/cdk": ">=14.0.0", "@angular/common": ">=14.0.0", "@angular/core": ">=14.0.0", "chart.js": "^3.4.0", @@ -14008,7 +15861,8 @@ }, "node_modules/ngx-markdown": { "version": "14.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-14.0.1.tgz", + "integrity": "sha512-y5CY4e0QM0uR6+MvU1rnh1Ks+rku14309kVVojyXLcWl4zlrt8VAYCcf/+A+8z/IDOaz38yTrxNBnvYDJzNzYA==", "dependencies": { "@types/marked": "^4.0.3", "clipboard": "^2.0.11", @@ -14029,7 +15883,8 @@ }, "node_modules/ngx-material-file-input": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ngx-material-file-input/-/ngx-material-file-input-4.0.0.tgz", + "integrity": "sha512-N0lpuwO1Td3VUR/KnylVi0EObJ2f9s/3jvOUyIGWvy25l4fQOs8zl6cf+OqXIoYLsOHBnC2vVRNugbEuT9CaDQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -14042,7 +15897,8 @@ }, "node_modules/ngx-webstorage-service": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ngx-webstorage-service/-/ngx-webstorage-service-5.0.0.tgz", + "integrity": "sha512-adipYzdVGA1HxPF5n62eJoQGohiJRlpCp7lPuNQcOvkHGfFUByAfXZHmmLFzb5OFfeNWh1XZ8M2qppbC5uNXFQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -14052,8 +15908,9 @@ }, "node_modules/nice-napi": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "!win32" @@ -14065,26 +15922,36 @@ }, "node_modules/nice-napi/node_modules/node-addon-api": { "version": "3.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "optional": true + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, "optional": true }, "node_modules/node-forge": { "version": "1.3.1", - "license": "(BSD-3-Clause OR GPL-2.0)", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-gyp": { - "version": "9.1.0", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", + "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", "dev": true, - "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", + "nopt": "^6.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", @@ -14100,7 +15967,8 @@ }, "node_modules/node-gyp-build": { "version": "4.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", "optional": true, "bin": { "node-gyp-build": "bin.js", @@ -14110,8 +15978,9 @@ }, "node_modules/node-gyp/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14119,8 +15988,9 @@ }, "node_modules/node-gyp/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, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14138,8 +16008,9 @@ }, "node_modules/node-gyp/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14147,13 +16018,35 @@ "node": "*" } }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/node-releases": { "version": "2.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, "node_modules/nopt": { "version": "5.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dependencies": { "abbrev": "1" }, @@ -14166,8 +16059,9 @@ }, "node_modules/normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -14180,38 +16074,43 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-range": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/npm-bundled": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, - "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^1.0.1" } }, "node_modules/npm-conf": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "config-chain": "^1.1.11", @@ -14223,8 +16122,9 @@ }, "node_modules/npm-conf/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, - "license": "MIT", "optional": true, "engines": { "node": ">=4" @@ -14232,8 +16132,9 @@ }, "node_modules/npm-install-checks": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -14243,13 +16144,15 @@ }, "node_modules/npm-normalize-package-bin": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true }, "node_modules/npm-package-arg": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", "dev": true, - "license": "ISC", "dependencies": { "hosted-git-info": "^5.0.0", "proc-log": "^2.0.1", @@ -14262,27 +16165,30 @@ }, "node_modules/npm-package-arg/node_modules/builtins": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.0.0" } }, "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "5.0.0", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, - "license": "ISC", "dependencies": { "builtins": "^5.0.0" }, @@ -14291,14 +16197,15 @@ } }, "node_modules/npm-packlist": { - "version": "5.1.1", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", + "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^8.0.1", "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" }, "bin": { "npm-packlist": "bin/index.js" @@ -14307,10 +16214,32 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/npm-packlist/node_modules/npm-bundled": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", + "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm-pick-manifest": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", + "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", "dev": true, - "license": "ISC", "dependencies": { "npm-install-checks": "^5.0.0", "npm-normalize-package-bin": "^1.0.1", @@ -14322,9 +16251,10 @@ } }, "node_modules/npm-registry-fetch": { - "version": "13.3.0", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", + "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", "dev": true, - "license": "ISC", "dependencies": { "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", @@ -14340,7 +16270,8 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { "path-key": "^3.0.0" }, @@ -14350,8 +16281,9 @@ }, "node_modules/npmlog": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, - "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -14364,7 +16296,8 @@ }, "node_modules/nth-check": { "version": "2.1.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dependencies": { "boolbase": "^1.0.0" }, @@ -14374,16 +16307,18 @@ }, "node_modules/number-is-nan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/oauth-sign": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "devOptional": true, - "license": "Apache-2.0", "engines": { "node": "*" } @@ -14399,15 +16334,17 @@ }, "node_modules/object-inspect": { "version": "1.12.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-is": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -14421,18 +16358,22 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "license": "MIT", + "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", - "license": "MIT", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -14443,13 +16384,14 @@ } }, "node_modules/object.values": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -14460,15 +16402,18 @@ }, "node_modules/objectorarray": { "version": "1.0.5", - "license": "ISC" + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==" }, "node_modules/obuf": { "version": "1.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "node_modules/on-finished": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -14478,21 +16423,24 @@ }, "node_modules/on-headers": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -14505,14 +16453,16 @@ }, "node_modules/onetime/node_modules/mimic-fn": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, "node_modules/open": { "version": "8.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -14527,16 +16477,18 @@ }, "node_modules/opencollective-postinstall": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", "dev": true, - "license": "MIT", "bin": { "opencollective-postinstall": "index.js" } }, "node_modules/optionator": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -14551,7 +16503,8 @@ }, "node_modules/ora": { "version": "5.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -14572,7 +16525,8 @@ }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -14585,7 +16539,8 @@ }, "node_modules/ora/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14599,7 +16554,8 @@ }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -14607,16 +16563,23 @@ "node": ">=7.0.0" } }, + "node_modules/ora/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==" + }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -14626,8 +16589,9 @@ }, "node_modules/os-name": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", "dev": true, - "license": "MIT", "dependencies": { "macos-release": "^2.5.0", "windows-release": "^4.0.0" @@ -14641,29 +16605,33 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "engines": { "node": ">=0.10.0" } }, "node_modules/p-cancelable": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/p-finally": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "engines": { "node": ">=4" } }, "node_modules/p-limit": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { "p-try": "^2.0.0" }, @@ -14676,7 +16644,8 @@ }, "node_modules/p-locate": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { "p-limit": "^2.2.0" }, @@ -14686,7 +16655,8 @@ }, "node_modules/p-map": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -14699,7 +16669,8 @@ }, "node_modules/p-retry": { "version": "4.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -14710,22 +16681,25 @@ }, "node_modules/p-retry/node_modules/retry": { "version": "0.13.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "engines": { "node": ">= 4" } }, "node_modules/p-try": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { "node": ">=6" } }, "node_modules/package-json": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dev": true, - "license": "MIT", "dependencies": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", @@ -14738,16 +16712,18 @@ }, "node_modules/package-json/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/pacote": { - "version": "13.6.1", + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", + "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", @@ -14779,20 +16755,22 @@ } }, "node_modules/pacote/node_modules/hosted-git-info": { - "version": "5.0.0", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/pacote/node_modules/normalize-package-data": { - "version": "4.0.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^5.0.0", "is-core-module": "^2.8.1", @@ -14800,30 +16778,42 @@ "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/pacote/node_modules/read-package-json": { - "version": "5.0.1", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", + "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^2.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/pako": { - "version": "2.0.4", - "license": "(MIT AND Zlib)" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" }, "node_modules/parent-module": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dependencies": { "callsites": "^3.0.0" }, @@ -14833,7 +16823,8 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -14849,19 +16840,22 @@ }, "node_modules/parse-node-version": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "engines": { "node": ">= 0.10" } }, "node_modules/parse5": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "optional": true }, "node_modules/parse5-html-rewriting-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", "dependencies": { "parse5": "^6.0.1", "parse5-sax-parser": "^6.0.1" @@ -14869,12 +16863,14 @@ }, "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { "version": "6.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dev": true, - "license": "MIT", "dependencies": { "domhandler": "^5.0.2", "parse5": "^7.0.0" @@ -14884,11 +16880,12 @@ } }, "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "7.0.0", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", "dev": true, - "license": "MIT", "dependencies": { - "entities": "^4.3.0" + "entities": "^4.4.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -14896,85 +16893,95 @@ }, "node_modules/parse5-sax-parser": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", "dependencies": { "parse5": "^6.0.1" } }, "node_modules/parse5-sax-parser/node_modules/parse5": { "version": "6.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "node_modules/parseurl": { "version": "1.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { "node": ">= 0.8" } }, "node_modules/path-browserify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true }, "node_modules/path-exists": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } }, "node_modules/path-is-inside": { "version": "1.0.2", - "devOptional": true, - "license": "(WTFPL OR MIT)" + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "devOptional": true }, "node_modules/path-key": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { "version": "0.1.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/path-type": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "engines": { "node": ">=8" } }, "node_modules/pause-stream": { "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, - "license": [ - "MIT", - "Apache2" - ], "dependencies": { "through": "~2.3" } }, "node_modules/pdfjs-dist": { - "version": "2.14.305", + "version": "2.16.105", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.16.105.tgz", + "integrity": "sha512-J4dn41spsAwUxCpEoVf6GVoz908IAA3mYiLmNxg8J9kfRXc2jxpbUepcP0ocp0alVNLFthTAM8DZ1RaHh8sU0A==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "dommatrix": "^1.0.1", + "dommatrix": "^1.0.3", "web-streams-polyfill": "^3.2.1" }, "peerDependencies": { @@ -14987,9 +16994,10 @@ } }, "node_modules/pdfmake": { - "version": "0.2.5", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.6.tgz", + "integrity": "sha512-gZARnKLJjTuHWKIkqF4G6dafIaPfH7NFqBz9U9wb26PV5koHQ5eeQ/0rgZmIdfJzMKqHzXB9aK25ykG2AnnzEQ==", "dev": true, - "license": "MIT", "dependencies": { "@foliojs-fork/linebreak": "^1.1.1", "@foliojs-fork/pdfkit": "^0.13.0", @@ -15002,21 +17010,25 @@ }, "node_modules/pend": { "version": "1.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true }, "node_modules/performance-now": { "version": "2.1.0", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "devOptional": true }, "node_modules/picocolors": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -15026,8 +17038,9 @@ }, "node_modules/pify": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -15037,16 +17050,18 @@ }, "node_modules/pinkie": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie-promise": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "devOptional": true, - "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -15056,7 +17071,8 @@ }, "node_modules/piscina": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", "dependencies": { "eventemitter-asyncresource": "^1.0.0", "hdr-histogram-js": "^2.0.1", @@ -15068,7 +17084,8 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dependencies": { "find-up": "^4.0.0" }, @@ -15078,8 +17095,9 @@ }, "node_modules/pkg-up": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^3.0.0" }, @@ -15089,8 +17107,9 @@ }, "node_modules/pkg-up/node_modules/find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -15100,8 +17119,9 @@ }, "node_modules/pkg-up/node_modules/locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -15112,8 +17132,9 @@ }, "node_modules/pkg-up/node_modules/p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -15123,15 +17144,17 @@ }, "node_modules/pkg-up/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/plist": { "version": "3.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", + "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", "dependencies": { "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" @@ -15142,10 +17165,14 @@ }, "node_modules/png-js": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", "dev": true }, "node_modules/postcss": { - "version": "8.4.14", + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", "funding": [ { "type": "opencollective", @@ -15156,7 +17183,6 @@ "url": "https://tidelift.com/funding/github/npm/postcss" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -15168,7 +17194,8 @@ }, "node_modules/postcss-attribute-case-insensitive": { "version": "5.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", "dependencies": { "postcss-selector-parser": "^6.0.10" }, @@ -15185,7 +17212,8 @@ }, "node_modules/postcss-clamp": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15198,7 +17226,8 @@ }, "node_modules/postcss-color-functional-notation": { "version": "4.2.4", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15215,7 +17244,8 @@ }, "node_modules/postcss-color-hex-alpha": { "version": "8.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15232,7 +17262,8 @@ }, "node_modules/postcss-color-rebeccapurple": { "version": "7.1.1", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15249,7 +17280,8 @@ }, "node_modules/postcss-custom-media": { "version": "8.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15265,8 +17297,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "12.1.8", - "license": "MIT", + "version": "12.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz", + "integrity": "sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15278,12 +17311,13 @@ "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-custom-selectors": { "version": "6.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -15300,7 +17334,8 @@ }, "node_modules/postcss-dir-pseudo-class": { "version": "6.0.5", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", "dependencies": { "postcss-selector-parser": "^6.0.10" }, @@ -15317,7 +17352,8 @@ }, "node_modules/postcss-double-position-gradients": { "version": "3.1.2", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -15335,7 +17371,8 @@ }, "node_modules/postcss-env-function": { "version": "4.0.6", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15348,7 +17385,8 @@ }, "node_modules/postcss-focus-visible": { "version": "6.0.4", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", "dependencies": { "postcss-selector-parser": "^6.0.9" }, @@ -15361,7 +17399,8 @@ }, "node_modules/postcss-focus-within": { "version": "5.0.4", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", "dependencies": { "postcss-selector-parser": "^6.0.9" }, @@ -15374,14 +17413,16 @@ }, "node_modules/postcss-font-variant": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/postcss-gap-properties": { "version": "3.0.5", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", "engines": { "node": "^12 || ^14 || >=16" }, @@ -15395,7 +17436,8 @@ }, "node_modules/postcss-image-set-function": { "version": "4.0.7", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15411,15 +17453,16 @@ } }, "node_modules/postcss-import": { - "version": "14.1.0", - "license": "MIT", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz", + "integrity": "sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg==", "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "postcss": "^8.0.0" @@ -15427,14 +17470,16 @@ }, "node_modules/postcss-initial": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", "peerDependencies": { "postcss": "^8.0.0" } }, "node_modules/postcss-lab-function": { "version": "4.2.1", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -15452,7 +17497,8 @@ }, "node_modules/postcss-loader": { "version": "7.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", + "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", "dependencies": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", @@ -15472,7 +17518,8 @@ }, "node_modules/postcss-logical": { "version": "5.0.4", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", "engines": { "node": "^12 || ^14 || >=16" }, @@ -15482,7 +17529,8 @@ }, "node_modules/postcss-media-minmax": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", "engines": { "node": ">=10.0.0" }, @@ -15492,7 +17540,8 @@ }, "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -15502,7 +17551,8 @@ }, "node_modules/postcss-modules-local-by-default": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -15517,7 +17567,8 @@ }, "node_modules/postcss-modules-scope": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -15530,7 +17581,8 @@ }, "node_modules/postcss-modules-values": { "version": "4.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dependencies": { "icss-utils": "^5.0.0" }, @@ -15542,8 +17594,9 @@ } }, "node_modules/postcss-nesting": { - "version": "10.1.10", - "license": "CC0-1.0", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", "dependencies": { "@csstools/selector-specificity": "^2.0.0", "postcss-selector-parser": "^6.0.10" @@ -15561,6 +17614,8 @@ }, "node_modules/postcss-opacity-percentage": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", "funding": [ { "type": "kofi", @@ -15571,14 +17626,14 @@ "url": "https://liberapay.com/mrcgrtz" } ], - "license": "MIT", "engines": { "node": "^12 || ^14 || >=16" } }, "node_modules/postcss-overflow-shorthand": { "version": "3.0.4", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15595,14 +17650,16 @@ }, "node_modules/postcss-page-break": { "version": "3.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", "peerDependencies": { "postcss": "^8" } }, "node_modules/postcss-place": { "version": "7.0.5", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15618,55 +17675,58 @@ } }, "node_modules/postcss-preset-env": { - "version": "7.7.2", - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.0.4", - "@csstools/postcss-color-function": "^1.1.0", - "@csstools/postcss-font-format-keywords": "^1.0.0", - "@csstools/postcss-hwb-function": "^1.0.1", - "@csstools/postcss-ic-unit": "^1.0.0", - "@csstools/postcss-is-pseudo-class": "^2.0.6", - "@csstools/postcss-normalize-display-values": "^1.0.0", - "@csstools/postcss-oklab-function": "^1.1.0", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz", + "integrity": "sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA==", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.0.5", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.1", - "@csstools/postcss-unset-value": "^1.0.1", - "autoprefixer": "^10.4.7", - "browserslist": "^4.21.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.8", + "browserslist": "^4.21.3", "css-blank-pseudo": "^3.0.3", "css-has-pseudo": "^3.0.4", "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^6.6.3", - "postcss-attribute-case-insensitive": "^5.0.1", + "cssdb": "^7.0.0", + "postcss-attribute-case-insensitive": "^5.0.2", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.3", + "postcss-color-functional-notation": "^4.2.4", "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.0", + "postcss-color-rebeccapurple": "^7.1.1", "postcss-custom-media": "^8.0.2", "postcss-custom-properties": "^12.1.8", "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.4", - "postcss-double-position-gradients": "^3.1.1", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", "postcss-env-function": "^4.0.6", "postcss-focus-visible": "^6.0.4", "postcss-focus-within": "^5.0.4", "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.3", - "postcss-image-set-function": "^4.0.6", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.0", + "postcss-lab-function": "^4.2.1", "postcss-logical": "^5.0.4", "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.9", + "postcss-nesting": "^10.1.10", "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.3", + "postcss-overflow-shorthand": "^3.0.4", "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.4", - "postcss-pseudo-class-any-link": "^7.1.5", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.0", + "postcss-selector-not": "^6.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -15682,7 +17742,8 @@ }, "node_modules/postcss-pseudo-class-any-link": { "version": "7.1.6", - "license": "CC0-1.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", "dependencies": { "postcss-selector-parser": "^6.0.10" }, @@ -15699,14 +17760,16 @@ }, "node_modules/postcss-replace-overflow-wrap": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", "peerDependencies": { "postcss": "^8.0.3" } }, "node_modules/postcss-selector-not": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", "dependencies": { "postcss-selector-parser": "^6.0.10" }, @@ -15723,7 +17786,8 @@ }, "node_modules/postcss-selector-parser": { "version": "6.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -15734,27 +17798,31 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prepend-http": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/pretty-bytes": { "version": "5.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "engines": { "node": ">=6" }, @@ -15763,13 +17831,15 @@ } }, "node_modules/primeicons": { - "version": "5.0.0", - "license": "MIT", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", + "integrity": "sha512-KDeO94CbWI4pKsPnYpA1FPjo79EsY9I+M8ywoPBSf9XMXoe/0crjbUK7jcQEDHuc0ZMRIZsxH3TYLv4TUtHmAA==", "peer": true }, "node_modules/primeng": { - "version": "14.0.0", - "license": "MIT", + "version": "14.2.2", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-14.2.2.tgz", + "integrity": "sha512-CV7dWwpBYqMgKliryJ6+CJZgdawl04V1Cp5mQmziEedJVhMGPg/QwU2Fi0v7AS9i1uXQRI9c420BDn+yZ+GrDQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -15777,46 +17847,52 @@ "@angular/common": "^14.0.0", "@angular/core": "^14.0.0", "@angular/forms": "^14.0.0", - "primeicons": "^5.0.0", + "primeicons": "^6.0.1", "rxjs": "^6.0.0 || ^7.0.0", - "zone.js": "^0.10.2 || ^0.11.0" + "zone.js": "^0.10.2 || ^0.11.0 || ^0.12.0" } }, "node_modules/prismjs": { - "version": "1.28.0", - "license": "MIT", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "engines": { "node": ">=6" } }, "node_modules/proc-log": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, - "license": "ISC", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/promise-inflight": { "version": "1.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" }, "node_modules/promise-retry": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -15827,15 +17903,17 @@ }, "node_modules/promzard": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", "dev": true, - "license": "ISC", "dependencies": { "read": "1" } }, "node_modules/properties-parser": { "version": "0.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz", + "integrity": "sha512-AkSQxQAviJ89x4FIxOyHGfO3uund0gvYo7lfD0E+Gp7gFQKrTNgtoYQklu8EhrfHVZUzTwKGZx2r/KDSfnljcA==", "dependencies": { "string.prototype.codepointat": "^0.2.0" }, @@ -15845,14 +17923,17 @@ }, "node_modules/proto-list": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true, - "license": "ISC", "optional": true }, "node_modules/protractor": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", + "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", + "deprecated": "We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular", "devOptional": true, - "license": "MIT", "dependencies": { "@types/q": "^0.0.32", "@types/selenium-webdriver": "^3.0.0", @@ -15880,24 +17961,27 @@ }, "node_modules/protractor/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/protractor/node_modules/ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/protractor/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==", "devOptional": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15905,8 +17989,9 @@ }, "node_modules/protractor/node_modules/chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "devOptional": true, - "license": "MIT", "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -15920,8 +18005,9 @@ }, "node_modules/protractor/node_modules/cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "devOptional": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -15930,16 +18016,18 @@ }, "node_modules/protractor/node_modules/cliui/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==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/protractor/node_modules/cliui/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==", "devOptional": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -15949,8 +18037,9 @@ }, "node_modules/protractor/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==", "devOptional": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15958,10 +18047,17 @@ "node": ">=7.0.0" } }, + "node_modules/protractor/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==", + "devOptional": true + }, "node_modules/protractor/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "devOptional": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -15979,8 +18075,9 @@ }, "node_modules/protractor/node_modules/jasmine": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==", "devOptional": true, - "license": "MIT", "dependencies": { "exit": "^0.1.2", "glob": "^7.0.6", @@ -15992,13 +18089,15 @@ }, "node_modules/protractor/node_modules/jasmine-core": { "version": "2.8.0", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==", + "devOptional": true }, "node_modules/protractor/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16008,8 +18107,9 @@ }, "node_modules/protractor/node_modules/q": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -16017,24 +18117,27 @@ }, "node_modules/protractor/node_modules/source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "devOptional": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/protractor/node_modules/source-map-support": { "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "devOptional": true, - "license": "MIT", "dependencies": { "source-map": "^0.5.6" } }, "node_modules/protractor/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "devOptional": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -16044,16 +18147,18 @@ }, "node_modules/protractor/node_modules/supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/protractor/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "devOptional": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -16065,16 +18170,18 @@ }, "node_modules/protractor/node_modules/wrap-ansi/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==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/protractor/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==", "devOptional": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16087,8 +18194,9 @@ }, "node_modules/protractor/node_modules/wrap-ansi/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==", "devOptional": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -16098,13 +18206,15 @@ }, "node_modules/protractor/node_modules/y18n": { "version": "4.0.3", - "devOptional": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "devOptional": true }, "node_modules/protractor/node_modules/yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "devOptional": true, - "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -16124,8 +18234,9 @@ }, "node_modules/protractor/node_modules/yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "devOptional": true, - "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -16136,7 +18247,8 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -16156,18 +18268,21 @@ }, "node_modules/prr": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "optional": true }, "node_modules/psl": { "version": "1.9.0", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "devOptional": true }, "node_modules/pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -16175,15 +18290,17 @@ }, "node_modules/punycode": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "engines": { "node": ">=6" } }, "node_modules/pupa": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dev": true, - "license": "MIT", "dependencies": { "escape-goat": "^2.0.0" }, @@ -16193,15 +18310,17 @@ }, "node_modules/q": { "version": "1.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" } }, "node_modules/qs": { - "version": "6.10.3", - "license": "BSD-3-Clause", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { "side-channel": "^1.0.4" }, @@ -16212,8 +18331,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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 + }, "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==", "funding": [ { "type": "github", @@ -16227,13 +18354,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/quote-stream": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", "dev": true, - "license": "MIT", "dependencies": { "buffer-equal": "0.0.1", "minimist": "^1.1.3", @@ -16245,29 +18372,33 @@ }, "node_modules/quote-stream/node_modules/buffer-equal": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/randombytes": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/range-parser": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -16280,14 +18411,16 @@ }, "node_modules/raw-body/node_modules/bytes": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } }, "node_modules/raw-body/node_modules/iconv-lite": { "version": "0.4.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -16297,8 +18430,9 @@ }, "node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -16311,21 +18445,24 @@ }, "node_modules/rc/node_modules/ini": { "version": "1.3.8", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/read": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, - "license": "ISC", "dependencies": { "mute-stream": "~0.0.4" }, @@ -16335,21 +18472,24 @@ }, "node_modules/read-cache": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dependencies": { "pify": "^2.3.0" } }, "node_modules/read-cache/node_modules/pify": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "engines": { "node": ">=0.10.0" } }, "node_modules/read-chunk": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz", + "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==", "dependencies": { "pify": "^4.0.1", "with-open-file": "^0.1.6" @@ -16360,15 +18500,17 @@ }, "node_modules/read-chunk/node_modules/pify": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "engines": { "node": ">=6" } }, "node_modules/read-config-file": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", + "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", "dev": true, - "license": "MIT", "dependencies": { "dotenv": "^9.0.2", "dotenv-expand": "^5.1.0", @@ -16382,13 +18524,15 @@ }, "node_modules/read-config-file/node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/read-config-file/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -16398,8 +18542,9 @@ }, "node_modules/read-package-json": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", + "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.1", "json-parse-even-better-errors": "^2.3.0", @@ -16412,8 +18557,9 @@ }, "node_modules/read-package-json-fast": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, - "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -16424,8 +18570,9 @@ }, "node_modules/read-package-json/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16433,8 +18580,9 @@ }, "node_modules/read-package-json/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, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16452,8 +18600,9 @@ }, "node_modules/read-package-json/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16463,7 +18612,8 @@ }, "node_modules/readable-stream": { "version": "2.3.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -16476,7 +18626,8 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" }, @@ -16485,29 +18636,32 @@ } }, "node_modules/recursive-readdir": { - "version": "2.2.2", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, - "license": "MIT", "dependencies": { - "minimatch": "3.0.4" + "minimatch": "^3.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, "node_modules/recursive-readdir/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.0.4", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16517,15 +18671,18 @@ }, "node_modules/reflect-metadata": { "version": "0.1.13", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, "node_modules/regenerate": { "version": "1.4.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "license": "MIT", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dependencies": { "regenerate": "^1.4.2" }, @@ -16535,23 +18692,27 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.9", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "node_modules/regenerator-transform": { "version": "0.15.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regex-parser": { "version": "2.2.11", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -16566,8 +18727,9 @@ }, "node_modules/regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -16576,15 +18738,16 @@ } }, "node_modules/regexpu-core": { - "version": "5.1.0", - "license": "MIT", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { "node": ">=4" @@ -16592,8 +18755,9 @@ }, "node_modules/registry-auth-token": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dev": true, - "license": "MIT", "dependencies": { "rc": "1.2.8" }, @@ -16603,8 +18767,9 @@ }, "node_modules/registry-url": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dev": true, - "license": "MIT", "dependencies": { "rc": "^1.2.8" }, @@ -16613,12 +18778,14 @@ } }, "node_modules/regjsgen": { - "version": "0.6.0", - "license": "MIT" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "node_modules/regjsparser": { - "version": "0.8.4", - "license": "BSD-2-Clause", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": "~0.5.0" }, @@ -16628,6 +18795,8 @@ }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "bin": { "jsesc": "bin/jsesc" } @@ -16702,6 +18871,12 @@ "node": ">=7.0.0" } }, + "node_modules/replace-in-file/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/replace-in-file/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -16757,8 +18932,10 @@ }, "node_modules/request": { "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "devOptional": true, - "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -16787,8 +18964,9 @@ }, "node_modules/request/node_modules/form-data": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "devOptional": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -16800,16 +18978,18 @@ }, "node_modules/request/node_modules/qs": { "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "devOptional": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, "node_modules/request/node_modules/tough-cookie": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "devOptional": true, - "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -16820,30 +19000,35 @@ }, "node_modules/request/node_modules/uuid": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "devOptional": true, - "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/require-directory": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "devOptional": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "devOptional": true }, "node_modules/requirejs": { "version": "2.3.6", @@ -16860,11 +19045,13 @@ }, "node_modules/requires-port": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { "version": "1.22.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -16879,14 +19066,16 @@ }, "node_modules/resolve-from": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "engines": { "node": ">=8" } }, "node_modules/resolve-url-loader": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "dependencies": { "adjust-sourcemap-loader": "^4.0.0", "convert-source-map": "^1.7.0", @@ -16899,8 +19088,9 @@ } }, "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.2", - "license": "MIT", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -16912,22 +19102,25 @@ }, "node_modules/resolve-url-loader/node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/responselike": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, - "license": "MIT", "dependencies": { "lowercase-keys": "^1.0.0" } }, "node_modules/restore-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -16938,15 +19131,17 @@ }, "node_modules/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -16954,7 +19149,8 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { "glob": "^7.1.3" }, @@ -16967,7 +19163,8 @@ }, "node_modules/rimraf/node_modules/brace-expansion": { "version": "1.1.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16975,7 +19172,8 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16993,7 +19191,8 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17003,8 +19202,9 @@ }, "node_modules/roarr": { "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -17020,21 +19220,26 @@ }, "node_modules/roboto-fontface": { "version": "0.10.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz", + "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==" }, "node_modules/robust-predicates": { "version": "3.0.1", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", + "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, "node_modules/run-async": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -17049,41 +19254,60 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rw": { "version": "1.3.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "node_modules/rxjs": { - "version": "7.5.6", - "license": "Apache-2.0", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/safer-buffer": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sanitize-filename": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "dev": true, - "license": "WTFPL OR ISC", "dependencies": { "truncate-utf8-bytes": "^1.0.0" } }, "node_modules/sass": { - "version": "1.53.0", - "license": "MIT", + "version": "1.54.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz", + "integrity": "sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -17098,7 +19322,8 @@ }, "node_modules/sass-loader": { "version": "13.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", "dependencies": { "klona": "^2.0.4", "neo-async": "^2.6.2" @@ -17134,6 +19359,8 @@ }, "node_modules/saucelabs": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", "devOptional": true, "dependencies": { "https-proxy-agent": "^2.2.1" @@ -17144,8 +19371,9 @@ }, "node_modules/saucelabs/node_modules/agent-base": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "devOptional": true, - "license": "MIT", "dependencies": { "es6-promisify": "^5.0.0" }, @@ -17155,16 +19383,18 @@ }, "node_modules/saucelabs/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "devOptional": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/saucelabs/node_modules/https-proxy-agent": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "devOptional": true, - "license": "MIT", "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -17175,11 +19405,13 @@ }, "node_modules/sax": { "version": "1.2.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/schema-utils": { "version": "2.7.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dependencies": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", @@ -17195,7 +19427,8 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "6.12.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -17209,19 +19442,22 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "3.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "0.4.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/scope-analyzer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "array-from": "^2.1.1", "dash-ast": "^2.0.1", @@ -17234,7 +19470,8 @@ }, "node_modules/screenfull": { "version": "6.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-6.0.2.tgz", + "integrity": "sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -17244,16 +19481,19 @@ }, "node_modules/select": { "version": "1.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" }, "node_modules/select-hose": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "node_modules/selenium-webdriver": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", "devOptional": true, - "license": "Apache-2.0", "dependencies": { "jszip": "^3.1.3", "rimraf": "^2.5.4", @@ -17266,8 +19506,9 @@ }, "node_modules/selenium-webdriver/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==", "devOptional": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17275,8 +19516,9 @@ }, "node_modules/selenium-webdriver/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "devOptional": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -17294,8 +19536,9 @@ }, "node_modules/selenium-webdriver/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17305,8 +19548,9 @@ }, "node_modules/selenium-webdriver/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "devOptional": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -17316,8 +19560,9 @@ }, "node_modules/selenium-webdriver/node_modules/tmp": { "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", "devOptional": true, - "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.1" }, @@ -17326,8 +19571,9 @@ } }, "node_modules/selfsigned": { - "version": "2.0.1", - "license": "MIT", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "dependencies": { "node-forge": "^1" }, @@ -17337,7 +19583,8 @@ }, "node_modules/semver": { "version": "7.3.7", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -17350,14 +19597,16 @@ }, "node_modules/semver-compare": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/semver-diff": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^6.3.0" }, @@ -17367,31 +19616,35 @@ }, "node_modules/semver-diff/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/semver-dsl": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^5.3.0" } }, "node_modules/semver-dsl/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { "yallist": "^4.0.0" }, @@ -17424,18 +19677,21 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/mime": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "bin": { "mime": "cli.js" }, @@ -17445,12 +19701,14 @@ }, "node_modules/send/node_modules/ms": { "version": "2.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serialize-error": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "type-fest": "^0.13.1" @@ -17464,8 +19722,9 @@ }, "node_modules/serialize-error/node_modules/type-fest": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "optional": true, "engines": { "node": ">=10" @@ -17476,14 +19735,16 @@ }, "node_modules/serialize-javascript": { "version": "6.0.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-index": { "version": "1.9.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -17499,21 +19760,24 @@ }, "node_modules/serve-index/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/serve-index/node_modules/depd": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -17526,26 +19790,31 @@ }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "engines": { "node": ">= 0.6" } }, "node_modules/serve-static": { "version": "1.15.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -17558,21 +19827,25 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "devOptional": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "devOptional": true }, "node_modules/setimmediate": { "version": "1.0.5", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "devOptional": true }, "node_modules/setprototypeof": { "version": "1.2.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shallow-clone": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dependencies": { "kind-of": "^6.0.2" }, @@ -17582,12 +19855,14 @@ }, "node_modules/shallow-copy": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true }, "node_modules/shebang-command": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -17597,25 +19872,27 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { "node": ">=8" } }, "node_modules/shiki": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", - "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz", + "integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==", "dev": true, "dependencies": { "jsonc-parser": "^3.0.0", "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" + "vscode-textmate": "^6.0.0" } }, "node_modules/side-channel": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -17627,20 +19904,95 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-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, + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-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, + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-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, + "optional": true + }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -17648,7 +20000,8 @@ }, "node_modules/sockjs": { "version": "0.3.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -17656,9 +20009,10 @@ } }, "node_modules/socks": { - "version": "2.7.0", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, - "license": "MIT", "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" @@ -17670,8 +20024,9 @@ }, "node_modules/socks-proxy-agent": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -17683,21 +20038,24 @@ }, "node_modules/source-map": { "version": "0.7.4", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "engines": { "node": ">= 8" } }, "node_modules/source-map-js": { "version": "1.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-loader": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.0.tgz", + "integrity": "sha512-i3KVgM3+QPAHNbGavK+VBq03YoJl24m9JWNbLgsjTj8aJzXG9M61bantBTNBt7CNwY2FYf+RJRYJ3pzalKjIrw==", "dependencies": { "abab": "^2.0.6", "iconv-lite": "^0.6.3", @@ -17714,17 +20072,10 @@ "webpack": "^5.72.1" } }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, "node_modules/source-map-support": { "version": "0.5.21", - "license": "MIT", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -17732,19 +20083,22 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/sourcemap-codec": { "version": "1.4.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "node_modules/spdx-correct": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -17752,26 +20106,30 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "dev": true, - "license": "CC-BY-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, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.11", - "dev": true, - "license": "CC0-1.0" + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true }, "node_modules/spdy": { "version": "4.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -17785,7 +20143,8 @@ }, "node_modules/spdy-transport": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -17797,7 +20156,8 @@ }, "node_modules/spdy-transport/node_modules/readable-stream": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -17809,8 +20169,9 @@ }, "node_modules/split": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, - "license": "MIT", "dependencies": { "through": "2" }, @@ -17820,12 +20181,14 @@ }, "node_modules/sprintf-js": { "version": "1.1.2", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true }, "node_modules/ssf": { "version": "0.11.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", "dependencies": { "frac": "~1.1.2" }, @@ -17835,8 +20198,9 @@ }, "node_modules/sshpk": { "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "devOptional": true, - "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -17859,7 +20223,8 @@ }, "node_modules/ssri": { "version": "9.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dependencies": { "minipass": "^3.1.1" }, @@ -17869,24 +20234,27 @@ }, "node_modules/stat-mode": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/static-eval": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", "dev": true, - "license": "MIT", "dependencies": { "escodegen": "^1.11.1" } }, "node_modules/static-eval/node_modules/escodegen": { "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^4.2.0", @@ -17906,8 +20274,9 @@ }, "node_modules/static-eval/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, - "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -17918,8 +20287,9 @@ }, "node_modules/static-eval/node_modules/optionator": { "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -17934,6 +20304,8 @@ }, "node_modules/static-eval/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, "engines": { "node": ">= 0.8.0" @@ -17941,8 +20313,9 @@ }, "node_modules/static-eval/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -17950,8 +20323,9 @@ }, "node_modules/static-eval/node_modules/type-check": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -17961,8 +20335,9 @@ }, "node_modules/static-module": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", "dev": true, - "license": "MIT", "dependencies": { "acorn-node": "^1.3.0", "concat-stream": "~1.6.0", @@ -17982,8 +20357,9 @@ }, "node_modules/static-module/node_modules/escodegen": { "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^4.2.0", @@ -18003,8 +20379,9 @@ }, "node_modules/static-module/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, - "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -18015,16 +20392,18 @@ }, "node_modules/static-module/node_modules/magic-string": { "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", "dev": true, - "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.1" } }, "node_modules/static-module/node_modules/optionator": { "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -18039,6 +20418,8 @@ }, "node_modules/static-module/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, "engines": { "node": ">= 0.8.0" @@ -18046,8 +20427,9 @@ }, "node_modules/static-module/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -18055,8 +20437,9 @@ }, "node_modules/static-module/node_modules/type-check": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -18066,15 +20449,17 @@ }, "node_modules/statuses": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { "node": ">= 0.8" } }, "node_modules/stream-combiner": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", "dev": true, - "license": "MIT", "dependencies": { "duplexer": "~0.1.1", "through": "~2.3.4" @@ -18082,14 +20467,16 @@ }, "node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/string-width": { "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -18101,29 +20488,32 @@ }, "node_modules/string.prototype.codepointat": { "version": "0.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" }, "node_modules/string.prototype.trimend": { - "version": "1.0.5", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.5", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18131,12 +20521,15 @@ }, "node_modules/stringify-package": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", + "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", + "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json", + "dev": true }, "node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -18146,22 +20539,25 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "engines": { "node": ">=8" } }, "node_modules/strip-final-newline": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "engines": { "node": ">=6" } }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -18170,14 +20566,16 @@ } }, "node_modules/stylis": { - "version": "4.1.1", - "license": "MIT" + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" }, "node_modules/stylus": { - "version": "0.58.1", - "license": "MIT", + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz", + "integrity": "sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==", "dependencies": { - "css": "^3.0.0", + "@adobe/css-tools": "^4.0.1", "debug": "^4.3.2", "glob": "^7.1.6", "sax": "~1.2.4", @@ -18188,11 +20586,15 @@ }, "engines": { "node": "*" + }, + "funding": { + "url": "https://opencollective.com/stylus" } }, "node_modules/stylus-loader": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz", + "integrity": "sha512-WTbtLrNfOfLgzTaR9Lj/BPhQroKk/LC1hfTXSUbrxmxgfUo3Y3LpmKRVA2R1XbjvTAvOfaian9vOyfv1z99E+A==", "dependencies": { "fast-glob": "^3.2.11", "klona": "^2.0.5", @@ -18212,7 +20614,8 @@ }, "node_modules/stylus/node_modules/brace-expansion": { "version": "1.1.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -18220,7 +20623,8 @@ }, "node_modules/stylus/node_modules/glob": { "version": "7.2.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -18238,7 +20642,8 @@ }, "node_modules/stylus/node_modules/minimatch": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -18248,8 +20653,9 @@ }, "node_modules/sumchecker": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "debug": "^4.1.0" }, @@ -18259,7 +20665,8 @@ }, "node_modules/supports-color": { "version": "5.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { "has-flag": "^3.0.0" }, @@ -18269,7 +20676,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "engines": { "node": ">= 0.4" }, @@ -18279,20 +20687,23 @@ }, "node_modules/svg-pan-zoom": { "version": "3.6.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/svg-pan-zoom/-/svg-pan-zoom-3.6.1.tgz", + "integrity": "sha512-JaKkGHHfGvRrcMPdJWkssLBeWqM+Isg/a09H7kgNNajT1cX5AztDTNs+C8UzpCxjCTRrG34WbquwaovZbmSk9g==" }, "node_modules/symbol-observable": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/systeminformation": { - "version": "5.12.1", + "version": "5.12.15", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.15.tgz", + "integrity": "sha512-LMctTV27bGqWMBsuhzvNTH3roKOQonTN730F9v0x9YtoYducXcobs0rg3QKNnWDyHJyWIgKY6FiHlFcXJYclTQ==", "dev": true, - "license": "MIT", "os": [ "darwin", "linux", @@ -18316,14 +20727,16 @@ }, "node_modules/tapable": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "engines": { "node": ">=6" } }, "node_modules/tar": { - "version": "6.1.11", - "license": "ISC", + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", + "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -18333,13 +20746,14 @@ "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" } }, "node_modules/temp-file": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", "dev": true, - "license": "MIT", "dependencies": { "async-exit-hook": "^2.0.1", "fs-extra": "^10.0.0" @@ -18347,7 +20761,8 @@ }, "node_modules/terser": { "version": "5.14.2", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -18362,14 +20777,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.3", - "license": "MIT", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.7", + "@jridgewell/trace-mapping": "^0.3.14", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", - "terser": "^5.7.2" + "terser": "^5.14.1" }, "engines": { "node": ">= 10.13.0" @@ -18395,7 +20811,8 @@ }, "node_modules/terser-webpack-plugin/node_modules/ajv": { "version": "6.12.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -18409,18 +20826,21 @@ }, "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { "version": "3.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { "version": "0.4.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -18436,11 +20856,13 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/test-exclude": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -18452,7 +20874,8 @@ }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "1.1.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -18460,7 +20883,8 @@ }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -18478,7 +20902,8 @@ }, "node_modules/test-exclude/node_modules/minimatch": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -18488,16 +20913,19 @@ }, "node_modules/text-table": { "version": "0.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/through": { "version": "2.3.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -18505,29 +20933,34 @@ }, "node_modules/thunky": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, "node_modules/time-stamp": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/tiny-emitter": { "version": "2.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, "node_modules/tiny-inflate": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true }, "node_modules/tmp": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, - "license": "MIT", "dependencies": { "rimraf": "^3.0.0" }, @@ -18537,30 +20970,34 @@ }, "node_modules/tmp-promise": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dev": true, - "license": "MIT", "dependencies": { "tmp": "^0.2.0" } }, "node_modules/to-fast-properties": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "engines": { "node": ">=4" } }, "node_modules/to-readable-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/to-regex-range": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { "is-number": "^7.0.0" }, @@ -18570,36 +21007,44 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } }, "node_modules/tough-cookie": { - "version": "4.0.0", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { "node": ">=6" } }, "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.1.2", + "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, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/traverse": { - "version": "0.6.6", + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", "dev": true, - "license": "MIT" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/traverse-chain": { "version": "0.1.0", @@ -18609,23 +21054,26 @@ }, "node_modules/tree-kill": { "version": "1.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "bin": { "tree-kill": "cli.js" } }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dev": true, - "license": "WTFPL", "dependencies": { "utf8-byte-length": "^1.0.1" } }, "node_modules/ts-morph": { "version": "13.0.3", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-13.0.3.tgz", + "integrity": "sha512-pSOfUMx8Ld/WUreoSzvMFQG5i9uEiWIsBYjpU9+TTASOeUa89j5HykomeqVULm1oqWtBdleI3KEFRLrlA3zGIw==", "dev": true, - "license": "MIT", "dependencies": { "@ts-morph/common": "~0.12.3", "code-block-writer": "^11.0.0" @@ -18633,8 +21081,9 @@ }, "node_modules/ts-node": { "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, - "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -18675,16 +21124,18 @@ }, "node_modules/ts-node/node_modules/acorn-walk": { "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/tsconfig-paths": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", @@ -18694,8 +21145,9 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -18705,20 +21157,24 @@ }, "node_modules/tsconfig-paths/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, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tslib": { - "version": "2.4.0", - "license": "0BSD" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "node_modules/tslint": { "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", @@ -18747,8 +21203,9 @@ }, "node_modules/tslint/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0", @@ -18757,14 +21214,16 @@ }, "node_modules/tslint/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, - "license": "MIT", "peer": true }, "node_modules/tslint/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, - "license": "ISC", "peer": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -18783,8 +21242,9 @@ }, "node_modules/tslint/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -18795,8 +21255,9 @@ }, "node_modules/tslint/node_modules/mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "minimist": "^1.2.6" @@ -18807,8 +21268,9 @@ }, "node_modules/tslint/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "peer": true, "bin": { "semver": "bin/semver" @@ -18816,14 +21278,16 @@ }, "node_modules/tslint/node_modules/tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, - "license": "0BSD", "peer": true }, "node_modules/tslint/node_modules/tsutils": { "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "tslib": "^1.8.1" @@ -18834,8 +21298,9 @@ }, "node_modules/tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -18848,13 +21313,15 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/tunnel": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" @@ -18862,8 +21329,9 @@ }, "node_modules/tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "devOptional": true, - "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -18873,18 +21341,21 @@ }, "node_modules/tweetnacl": { "version": "0.14.5", - "devOptional": true, - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "devOptional": true }, "node_modules/type": { "version": "1.2.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -18894,7 +21365,8 @@ }, "node_modules/type-fest": { "version": "0.21.3", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "engines": { "node": ">=10" }, @@ -18904,7 +21376,8 @@ }, "node_modules/type-is": { "version": "1.6.18", - "license": "MIT", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -18915,31 +21388,34 @@ }, "node_modules/typed-assert": { "version": "1.0.9", - "license": "MIT" + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==" }, "node_modules/typedarray": { "version": "0.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typedoc": { - "version": "0.23.10", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.10.tgz", - "integrity": "sha512-03EUiu/ZuScUBMnY6p0lY+HTH8SwhzvRE3gImoemdPDWXPXlks83UGTx++lyquWeB1MTwm9D9Ca8RIjkK3AFfQ==", + "version": "0.23.21", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.21.tgz", + "integrity": "sha512-VNE9Jv7BgclvyH9moi2mluneSviD43dCE9pY8RWkO88/DrEgJZk9KpUk7WO468c9WWs/+aG6dOnoH7ccjnErhg==", "dev": true, "dependencies": { "lunr": "^2.3.9", - "marked": "^4.0.18", + "marked": "^4.0.19", "minimatch": "^5.1.0", - "shiki": "^0.10.1" + "shiki": "^0.11.1" }, "bin": { "typedoc": "bin/typedoc" @@ -18948,12 +21424,13 @@ "node": ">= 14.14" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x" + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x" } }, "node_modules/typescript": { "version": "4.7.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -18963,9 +21440,10 @@ } }, "node_modules/uglify-js": { - "version": "3.16.3", + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, - "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -18976,8 +21454,9 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -18989,19 +21468,22 @@ } }, "node_modules/underscore": { - "version": "1.13.4", - "license": "MIT" + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -19011,32 +21493,36 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "license": "MIT", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "engines": { "node": ">=4" } }, "node_modules/unicode-properties": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", "dev": true, - "license": "MIT", "dependencies": { "base64-js": "^1.3.0", "unicode-trie": "^2.0.0" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "license": "MIT", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "engines": { "node": ">=4" } }, "node_modules/unicode-trie": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", "dev": true, - "license": "MIT", "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" @@ -19044,27 +21530,31 @@ }, "node_modules/unicode-trie/node_modules/pako": { "version": "0.2.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true }, "node_modules/unique-filename": { "version": "1.1.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dependencies": { "unique-slug": "^2.0.0" } }, "node_modules/unique-slug": { "version": "2.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dependencies": { "imurmurhash": "^0.1.4" } }, "node_modules/unique-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, - "license": "MIT", "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -19074,32 +21564,38 @@ }, "node_modules/universalify": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "engines": { "node": ">= 10.0.0" } }, "node_modules/unix-crypt-td-js": { "version": "1.1.4", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true }, "node_modules/unpipe": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } }, "node_modules/untildify": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "engines": { "node": ">=8" } }, "node_modules/update-browserslist-db": { - "version": "1.0.5", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "funding": [ { "type": "opencollective", @@ -19110,7 +21606,6 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], - "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -19124,8 +21619,9 @@ }, "node_modules/update-notifier": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boxen": "^5.0.0", "chalk": "^4.1.0", @@ -19151,8 +21647,9 @@ }, "node_modules/update-notifier/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -19165,8 +21662,9 @@ }, "node_modules/update-notifier/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -19180,13 +21678,15 @@ }, "node_modules/update-notifier/node_modules/ci-info": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "node_modules/update-notifier/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -19194,18 +21694,26 @@ "node": ">=7.0.0" } }, + "node_modules/update-notifier/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/update-notifier/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/update-notifier/node_modules/is-ci": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, - "license": "MIT", "dependencies": { "ci-info": "^2.0.0" }, @@ -19215,8 +21723,9 @@ }, "node_modules/update-notifier/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -19226,15 +21735,27 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { "punycode": "^2.1.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, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/url-parse-lax": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, - "license": "MIT", "dependencies": { "prepend-http": "^2.0.0" }, @@ -19244,46 +21765,48 @@ }, "node_modules/utf8-byte-length": { "version": "1.0.4", - "dev": true, - "license": "WTFPL" + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", + "dev": true }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true }, "node_modules/valid-identifier": { "version": "0.0.2", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/valid-identifier/-/valid-identifier-0.0.2.tgz", + "integrity": "sha512-zaSmOW6ykXwrkX0YTuFUSoALNEKGaQHpxBJQLb3TXspRNDpBwbfrIQCZqAQ0LKBlKuyn2YOq7NNd6415hvZ33g==", + "dev": true }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -19291,19 +21814,43 @@ }, "node_modules/validate-npm-package-name": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, - "license": "ISC", "dependencies": { "builtins": "^1.0.3" } }, "node_modules/vary": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "optional": true + }, "node_modules/vscode-oniguruma": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", @@ -19311,9 +21858,9 @@ "dev": true }, "node_modules/vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz", + "integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==", "dev": true }, "node_modules/walkdir": { @@ -19327,7 +21874,8 @@ }, "node_modules/watchpack": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -19338,30 +21886,34 @@ }, "node_modules/wbuf": { "version": "1.7.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dependencies": { "minimalistic-assert": "^1.0.0" } }, "node_modules/wcwidth": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/web-streams-polyfill": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webdriver-js-extender": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", "devOptional": true, - "license": "MIT", "dependencies": { "@types/selenium-webdriver": "^3.0.0", "selenium-webdriver": "^3.0.1" @@ -19372,8 +21924,9 @@ }, "node_modules/webdriver-manager": { "version": "12.1.8", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.8.tgz", + "integrity": "sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg==", "devOptional": true, - "license": "MIT", "dependencies": { "adm-zip": "^0.4.9", "chalk": "^1.1.1", @@ -19396,24 +21949,27 @@ }, "node_modules/webdriver-manager/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/webdriver-manager/node_modules/ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/webdriver-manager/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==", "devOptional": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -19421,8 +21977,9 @@ }, "node_modules/webdriver-manager/node_modules/chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "devOptional": true, - "license": "MIT", "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -19436,8 +21993,9 @@ }, "node_modules/webdriver-manager/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "devOptional": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -19455,13 +22013,15 @@ }, "node_modules/webdriver-manager/node_modules/ini": { "version": "1.3.8", - "devOptional": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "devOptional": true }, "node_modules/webdriver-manager/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -19471,8 +22031,9 @@ }, "node_modules/webdriver-manager/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "devOptional": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -19482,16 +22043,18 @@ }, "node_modules/webdriver-manager/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "devOptional": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/webdriver-manager/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "devOptional": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -19501,15 +22064,17 @@ }, "node_modules/webdriver-manager/node_modules/supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/webpack": { - "version": "5.74.0", - "license": "MIT", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -19555,7 +22120,8 @@ }, "node_modules/webpack-dev-middleware": { "version": "5.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", @@ -19576,7 +22142,8 @@ }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -19592,8 +22159,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.9.3", - "license": "MIT", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -19618,7 +22186,7 @@ "p-retry": "^4.5.0", "rimraf": "^3.0.2", "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", + "selfsigned": "^2.1.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", @@ -19646,14 +22214,16 @@ }, "node_modules/webpack-dev-server/node_modules/ipaddr.js": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "engines": { "node": ">= 10" } }, "node_modules/webpack-dev-server/node_modules/schema-utils": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -19670,7 +22240,8 @@ }, "node_modules/webpack-merge": { "version": "5.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" @@ -19681,14 +22252,16 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack-subresource-integrity": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", "dependencies": { "typed-assert": "^1.0.8" }, @@ -19707,7 +22280,8 @@ }, "node_modules/webpack/node_modules/ajv": { "version": "6.12.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -19722,7 +22296,8 @@ }, "node_modules/webpack/node_modules/ajv-keywords": { "version": "3.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peer": true, "peerDependencies": { "ajv": "^6.9.1" @@ -19730,12 +22305,14 @@ }, "node_modules/webpack/node_modules/json-schema-traverse": { "version": "0.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "peer": true }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -19752,7 +22329,8 @@ }, "node_modules/websocket-driver": { "version": "0.7.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -19764,14 +22342,16 @@ }, "node_modules/websocket-extensions": { "version": "0.1.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "engines": { "node": ">=0.8.0" } }, "node_modules/which": { "version": "2.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { "isexe": "^2.0.0" }, @@ -19784,8 +22364,9 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -19799,21 +22380,24 @@ }, "node_modules/which-module": { "version": "2.0.0", - "devOptional": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "devOptional": true }, "node_modules/wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/widest-line": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, - "license": "MIT", "dependencies": { "string-width": "^4.0.0" }, @@ -19823,12 +22407,14 @@ }, "node_modules/wildcard": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, "node_modules/windows-release": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", "dev": true, - "license": "MIT", "dependencies": { "execa": "^4.0.2" }, @@ -19841,8 +22427,9 @@ }, "node_modules/windows-release/node_modules/execa": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -19863,8 +22450,9 @@ }, "node_modules/windows-release/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -19877,15 +22465,17 @@ }, "node_modules/windows-release/node_modules/human-signals": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8.12.0" } }, "node_modules/with-open-file": { "version": "0.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", + "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", "dependencies": { "p-finally": "^1.0.0", "p-try": "^2.1.0", @@ -19897,41 +22487,47 @@ }, "node_modules/with-open-file/node_modules/pify": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "engines": { "node": ">=6" } }, "node_modules/wmf": { "version": "1.0.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", "engines": { "node": ">=0.8" } }, "node_modules/word": { "version": "0.3.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", "engines": { "node": ">=0.8" } }, "node_modules/word-wrap": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wordwrap": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -19946,7 +22542,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -19959,7 +22556,8 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -19967,14 +22565,21 @@ "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==" + }, "node_modules/wrappy": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -19983,8 +22588,9 @@ } }, "node_modules/ws": { - "version": "8.8.1", - "license": "MIT", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "engines": { "node": ">=10.0.0" }, @@ -20003,15 +22609,17 @@ }, "node_modules/xdg-basedir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/xlsx": { "version": "0.18.5", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", "dependencies": { "adler-32": "~1.3.0", "cfb": "~1.2.1", @@ -20030,8 +22638,9 @@ }, "node_modules/xml2js": { "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "devOptional": true, - "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -20042,56 +22651,64 @@ }, "node_modules/xml2js/node_modules/xmlbuilder": { "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=4.0" } }, "node_modules/xmlbuilder": { "version": "15.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", "engines": { "node": ">=8.0" } }, "node_modules/xmldoc": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.2.0.tgz", + "integrity": "sha512-2eN8QhjBsMW2uVj7JHLHkMytpvGHLHxKXBy4J3fAT/HujsEtM6yU84iGjpESYGHg6XwK0Vu4l+KgqQ2dv2cCqg==", "dev": true, - "license": "MIT", "dependencies": { "sax": "^1.2.4" } }, "node_modules/xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", - "license": "ISC", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "engines": { "node": ">= 6" } }, "node_modules/yargs": { "version": "17.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -20106,16 +22723,18 @@ } }, "node_modules/yargs-parser": { - "version": "21.0.1", - "license": "ISC", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "engines": { "node": ">=12" } }, "node_modules/yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -20123,78 +22742,109 @@ }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/yocto-queue": { + "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" + } + }, "node_modules/zone.js": { - "version": "0.11.7", - "license": "MIT", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", + "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", "dependencies": { "tslib": "^2.3.0" } } }, "dependencies": { + "@adobe/css-tools": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", + "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" + }, "@aduh95/viz.js": { "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.7.0.tgz", + "integrity": "sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng==", "dev": true }, "@ampproject/remapping": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "@angular-devkit/architect": { - "version": "0.1401.0", + "version": "0.1402.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.9.tgz", + "integrity": "sha512-I0KTpmtukxq447CkdzKonFpIytRnvC77WuwnX4Sef32EM9KqmeNvfy/gZwm08Lqi4mOAC/iTCajXH1TN/4xllA==", "requires": { - "@angular-devkit/core": "14.1.0", + "@angular-devkit/core": "14.2.9", "rxjs": "6.6.7" }, "dependencies": { "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "requires": { "tslib": "^1.9.0" } }, "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@angular-devkit/build-angular": { - "version": "14.1.0", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.9.tgz", + "integrity": "sha512-/6ul4JLpiKLB4+PJzDF7twgZf28GNHxxJKsheymrxC+ZRMGoMsJCzoU/dmOXE2YY8yGxAFnrTAVIJYomn+QnZQ==", "requires": { "@ampproject/remapping": "2.2.0", - "@angular-devkit/architect": "0.1401.0", - "@angular-devkit/build-webpack": "0.1401.0", - "@angular-devkit/core": "14.1.0", - "@babel/core": "7.18.6", - "@babel/generator": "7.18.7", + "@angular-devkit/architect": "0.1402.9", + "@angular-devkit/build-webpack": "0.1402.9", + "@angular-devkit/core": "14.2.9", + "@babel/core": "7.18.10", + "@babel/generator": "7.18.12", "@babel/helper-annotate-as-pure": "7.18.6", - "@babel/plugin-proposal-async-generator-functions": "7.18.6", + "@babel/plugin-proposal-async-generator-functions": "7.18.10", "@babel/plugin-transform-async-to-generator": "7.18.6", - "@babel/plugin-transform-runtime": "7.18.6", - "@babel/preset-env": "7.18.6", - "@babel/runtime": "7.18.6", - "@babel/template": "7.18.6", + "@babel/plugin-transform-runtime": "7.18.10", + "@babel/preset-env": "7.18.10", + "@babel/runtime": "7.18.9", + "@babel/template": "7.18.10", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "14.1.0", + "@ngtools/webpack": "14.2.9", "ansi-colors": "4.1.3", "babel-loader": "8.2.5", "babel-plugin-istanbul": "6.1.1", "browserslist": "^4.9.1", - "cacache": "16.1.1", + "cacache": "16.1.2", "copy-webpack-plugin": "11.0.0", "critters": "0.0.16", "css-loader": "6.7.1", - "esbuild": "0.14.49", - "esbuild-wasm": "0.14.49", + "esbuild": "0.15.5", + "esbuild-wasm": "0.15.5", "glob": "8.0.3", "https-proxy-agent": "5.0.1", "inquirer": "8.2.4", @@ -20210,33 +22860,35 @@ "ora": "5.4.1", "parse5-html-rewriting-stream": "6.0.1", "piscina": "3.2.0", - "postcss": "8.4.14", - "postcss-import": "14.1.0", + "postcss": "8.4.16", + "postcss-import": "15.0.0", "postcss-loader": "7.0.1", - "postcss-preset-env": "7.7.2", + "postcss-preset-env": "7.8.0", "regenerator-runtime": "0.13.9", "resolve-url-loader": "5.0.0", "rxjs": "6.6.7", - "sass": "1.53.0", + "sass": "1.54.4", "sass-loader": "13.0.2", "semver": "7.3.7", "source-map-loader": "4.0.0", "source-map-support": "0.5.21", - "stylus": "0.58.1", + "stylus": "0.59.0", "stylus-loader": "7.0.0", "terser": "5.14.2", "text-table": "0.2.0", "tree-kill": "1.2.2", "tslib": "2.4.0", - "webpack": "5.73.0", + "webpack": "5.74.0", "webpack-dev-middleware": "5.3.3", - "webpack-dev-server": "4.9.3", + "webpack-dev-server": "4.11.0", "webpack-merge": "5.8.0", "webpack-subresource-integrity": "5.1.0" }, "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -20246,43 +22898,65 @@ }, "ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "requires": {} }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + }, "json-schema-traverse": { - "version": "0.4.1" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "requires": { "tslib": "^1.9.0" }, "dependencies": { "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "schema-utils": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, "webpack": { - "version": "5.73.0", + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", + "acorn": "^8.7.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.3", + "enhanced-resolve": "^5.10.0", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -20295,32 +22969,113 @@ "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", + "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" } + }, + "webpack-dev-server": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz", + "integrity": "sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw==", + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } } } }, "@angular-devkit/build-webpack": { - "version": "0.1401.0", + "version": "0.1402.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.9.tgz", + "integrity": "sha512-J+bseVpEqHAfxvTKYNoo6B+5TmnkQmEn9aNMEiQ+hv8pQyuW3DCWZ6jOQrfCpJzCYMBdrQALfaRpsQuB92UPVw==", "requires": { - "@angular-devkit/architect": "0.1401.0", + "@angular-devkit/architect": "0.1402.9", "rxjs": "6.6.7" }, "dependencies": { "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "requires": { "tslib": "^1.9.0" } }, "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@angular-devkit/core": { - "version": "14.1.0", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.9.tgz", + "integrity": "sha512-+e2OmzH/0gjNNH96xJDgshbuIM/NPSwE0NQlgU/KRb8TZt+7ooTmZJ1vk25HKV2YS99BEYzUSqvVAaJtxX/6Qw==", "requires": { "ajv": "8.11.0", "ajv-formats": "2.1.1", @@ -20331,20 +23086,26 @@ "dependencies": { "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "requires": { "tslib": "^1.9.0" } }, "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@angular-devkit/schematics": { - "version": "14.1.0", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.9.tgz", + "integrity": "sha512-E7muTIbDqysjQld5r9AGXiW8vKHadkHaGe+0QONpmr8TMAtTMqBFxBXRG9vajiUzt/GcFL9dbGGEwM/1dc7VPQ==", "dev": true, "requires": { - "@angular-devkit/core": "14.1.0", + "@angular-devkit/core": "14.2.9", "jsonc-parser": "3.1.0", "magic-string": "0.26.2", "ora": "5.4.1", @@ -20353,6 +23114,8 @@ "dependencies": { "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -20360,51 +23123,65 @@ }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "@angular-eslint/bundled-angular-compiler": { - "version": "14.0.2", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-14.2.0.tgz", + "integrity": "sha512-s0xaBaO8z+YjIQjGxcffIHC2lnkbfZhfmPiUYJHMBquCG0bIHSwVOxLbh3hEei1E3Um+2LXxK2Y9MuPHRFoMYA==", "dev": true }, "@angular-eslint/eslint-plugin": { - "version": "14.0.2", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-14.2.0.tgz", + "integrity": "sha512-YlP/kXqNBtz/xWYtVO11DhKwvXSfd040OIL6bP3JpuKQw2c0Ma+ENGvDUAum1R6WDBOs4NQOgdjZMyUdLYTgog==", "dev": true, "requires": { - "@angular-eslint/utils": "14.0.2", - "@typescript-eslint/utils": "5.29.0" + "@angular-eslint/utils": "14.2.0", + "@typescript-eslint/utils": "5.43.0" } }, "@angular-eslint/utils": { - "version": "14.0.2", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-14.2.0.tgz", + "integrity": "sha512-qTviGL4DbJT5pGIqSiISBrrOaJMsf+SHYOMFzjaBxX/mY4PfpsLLHV85IzqtlQDJ48FkMYTsbznupac85AwjJQ==", "dev": true, "requires": { - "@angular-eslint/bundled-angular-compiler": "14.0.2", - "@typescript-eslint/utils": "5.29.0" + "@angular-eslint/bundled-angular-compiler": "14.2.0", + "@typescript-eslint/utils": "5.43.0" } }, "@angular/animations": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.2.11.tgz", + "integrity": "sha512-HOw8xecbKfs7A5Ezjf+BfXKvvwU7X8I0US5Ey6bOuLvpA3QVOGSLw9BeutY5Q2mPWiRgnNNQW+FOd8Pe9gEkpQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/cdk": { - "version": "14.1.0", + "version": "14.2.7", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-14.2.7.tgz", + "integrity": "sha512-/tEsYaUbDSnfEmKVvAMramIptmhI67O+9STjOV0i+74XR2NospeK0fkbywIANu1n3w6AHGMotvRWJrjmbCElFg==", "requires": { "parse5": "^5.0.0", "tslib": "^2.3.0" } }, "@angular/cli": { - "version": "14.1.0", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.9.tgz", + "integrity": "sha512-1cQE7mRrPyzk1sg2UwpbQ/sXQyPukPKdN69o4Bn59Scfl/4wUh53WRPAAHXNudgPYT2ZT3s9Jj2E1cdhi+gxyQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1401.0", - "@angular-devkit/core": "14.1.0", - "@angular-devkit/schematics": "14.1.0", - "@schematics/angular": "14.1.0", + "@angular-devkit/architect": "0.1402.9", + "@angular-devkit/core": "14.2.9", + "@angular-devkit/schematics": "14.2.9", + "@schematics/angular": "14.2.9", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "debug": "4.3.4", @@ -20415,7 +23192,7 @@ "npm-pick-manifest": "7.0.1", "open": "8.4.0", "ora": "5.4.1", - "pacote": "13.6.1", + "pacote": "13.6.2", "resolve": "1.22.1", "semver": "7.3.7", "symbol-observable": "4.0.0", @@ -20424,19 +23201,25 @@ } }, "@angular/common": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.11.tgz", + "integrity": "sha512-a5w7lz4SoUzCwSDnuUPnfbEYPA8ufFiXz44mOv48P4uIb78q3rZ/R/EyWD1O3yJPof0o8aPNKpKZzuRDv3Q8ow==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.11.tgz", + "integrity": "sha512-QD4tq37qqPxxNK4o0Pd7dJm06evwEPChV67S/ecX3S6UkSDp8lVoWKiVx9htp/5s4iydKZU4eGu9oTOMOLVdOw==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.11.tgz", + "integrity": "sha512-ipIEgueW8bhxVSq6qlgndBLVRCJoTvk1he/TI3w34m2EnZY1ctgGGCm1VbB3XARh+irVesPVMIAxRtjYds7XOw==", "requires": { "@babel/core": "^7.17.2", "chokidar": "^3.0.0", @@ -20451,76 +23234,100 @@ } }, "@angular/core": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.11.tgz", + "integrity": "sha512-4uEIA6ESMLt2f/ivKuVBpME0IbuFHWmpweN4dwJt83DfJBiBfpqdrFYZHz/Kbkh9cGCiP7L4/eKPRWTlAHehhw==", "requires": { "tslib": "^2.3.0" } }, "@angular/flex-layout": { - "version": "14.0.0-beta.40", + "version": "14.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-14.0.0-beta.41.tgz", + "integrity": "sha512-x1YcxqkdFlcbVXEy9ebCgW/F+7n/MXkEkwEcVEIPf5v5qn7HZsjQxgIj35Lf0amvMyF7h35prpoxO1uX5+ntFg==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.11.tgz", + "integrity": "sha512-sItoA3/I8j/pf3zhv8sR37M5dAYUJpezv8rw2fTT2Y+nZJFUpkFWqX2N4qpMlPY0MP9OX++8K8/d2j0Lfi3wJQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/language-service": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-14.2.11.tgz", + "integrity": "sha512-YOQ7zVnRkZaIlAwA+u+x+wUGlvvKQDR+CGkIF19L/C0Zo6b8vFmfcNqWig6Wq8sRwS+5fULcPoOAESaUwq3urw==", "dev": true }, "@angular/material": { - "version": "14.1.0", + "version": "14.2.7", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-14.2.7.tgz", + "integrity": "sha512-WXHh8pEStpgkXZJmYOg2cI8BSHkV82ET4XTJCNPdveumaCn1UYnaNzsXD13kw5z+zmy8CufhFEzdXTrv/yt7KQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.11.tgz", + "integrity": "sha512-lGi9pF0Kf/GGrVKcfxxfStM2eMSluDTmbcYuVAX28iBn5XEdfsonrkfy2cnxUMnQ7nioMAZBNGOJHbQPKz4jwg==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.11.tgz", + "integrity": "sha512-kjcZda+gcAiYd0I3mjLSr6xR/HkUCnmIMyqaFGoHnIDXI2c6wLDxi49pivrJFvUYJPfYAJ6GjlYTM6L9B3XSEQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { - "version": "14.1.0", + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.11.tgz", + "integrity": "sha512-AbnyKXabar2WsG3fL24O1xdwkcRhRKI7u2vc9D8bcp2ks5GOJNxfbtG2Z6PSO18vtDszQxwELRe2cOEe+0TmPQ==", "requires": { "tslib": "^2.3.0" } }, "@assemblyscript/loader": { - "version": "0.10.1" + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" }, "@babel/code-frame": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "requires": { "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.18.8" + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==" }, "@babel/core": { - "version": "7.18.6", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helpers": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -20529,20 +23336,26 @@ }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "@babel/generator": { - "version": "7.18.7", + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", "requires": { - "@babel/types": "^7.18.7", + "@babel/types": "^7.18.10", "@jridgewell/gen-mapping": "^0.3.2", "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==", "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -20553,52 +23366,66 @@ }, "@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==", "requires": { "@babel/types": "^7.18.6" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "requires": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" } }, "@babel/helper-compilation-targets": { - "version": "7.18.9", + "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==", "requires": { - "@babel/compat-data": "^7.18.8", + "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.18.9", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-member-expression-to-functions": "^7.18.9", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-replace-supers": "^7.19.1", "@babel/helper-split-export-declaration": "^7.18.6" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.1.0" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.2", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "requires": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -20609,68 +23436,90 @@ }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "@babel/helper-environment-visitor": { - "version": "7.18.9" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-explode-assignable-expression": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "requires": { "@babel/types": "^7.18.6" } }, "@babel/helper-function-name": { - "version": "7.18.9", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" } }, "@babel/helper-hoist-variables": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "requires": { "@babel/types": "^7.18.6" } }, "@babel/helper-member-expression-to-functions": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", "requires": { "@babel/types": "^7.18.9" } }, "@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==", "requires": { "@babel/types": "^7.18.6" } }, "@babel/helper-module-transforms": { - "version": "7.18.9", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" } }, "@babel/helper-optimise-call-expression": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "requires": { "@babel/types": "^7.18.6" } }, "@babel/helper-plugin-utils": { - "version": "7.18.9" + "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==" }, "@babel/helper-remap-async-to-generator": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -20679,58 +23528,81 @@ } }, "@babel/helper-replace-supers": { - "version": "7.18.9", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.18.9", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" } }, "@babel/helper-simple-access": { - "version": "7.18.6", + "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==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "requires": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.0" } }, "@babel/helper-split-export-declaration": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "requires": { "@babel/types": "^7.18.6" } }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, "@babel/helper-validator-identifier": { - "version": "7.18.6" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.18.6" + "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==" }, "@babel/helper-wrap-function": { - "version": "7.18.9", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", "requires": { - "@babel/helper-function-name": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, "@babel/helpers": { - "version": "7.18.9", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" } }, "@babel/highlight": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -20738,16 +23610,22 @@ } }, "@babel/parser": { - "version": "7.18.9" + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "requires": { "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -20755,16 +23633,20 @@ } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.6", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", + "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", "requires": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -20772,6 +23654,8 @@ }, "@babel/plugin-proposal-class-static-block": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -20780,6 +23664,8 @@ }, "@babel/plugin-proposal-dynamic-import": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -20787,6 +23673,8 @@ }, "@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -20794,6 +23682,8 @@ }, "@babel/plugin-proposal-json-strings": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -20801,6 +23691,8 @@ }, "@babel/plugin-proposal-logical-assignment-operators": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -20808,6 +23700,8 @@ }, "@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -20815,23 +23709,29 @@ }, "@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" + "@babel/plugin-transform-parameters": "^7.20.1" } }, "@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -20839,6 +23739,8 @@ }, "@babel/plugin-proposal-optional-chaining": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -20847,6 +23749,8 @@ }, "@babel/plugin-proposal-private-methods": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -20854,6 +23758,8 @@ }, "@babel/plugin-proposal-private-property-in-object": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -20863,6 +23769,8 @@ }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -20870,102 +23778,136 @@ }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-class-properties": { "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "requires": { "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "requires": { "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "requires": { "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-async-to-generator": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "requires": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -20974,43 +23916,56 @@ }, "@babel/plugin-transform-block-scoped-functions": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "requires": { "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.18.9", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-classes": { - "version": "7.18.9", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "requires": { "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-destructuring": { - "version": "7.18.9", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-dotall-regex": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -21018,12 +23973,16 @@ }, "@babel/plugin-transform-duplicate-keys": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "requires": { "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-exponentiation-operator": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -21031,12 +23990,16 @@ }, "@babel/plugin-transform-for-of": { "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "requires": { "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-function-name": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "requires": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", @@ -21045,84 +24008,105 @@ }, "@babel/plugin-transform-literals": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "requires": { "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-member-expression-literals": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "requires": { "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.18.6", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.18.9", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "requires": { "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" } }, "@babel/plugin-transform-modules-umd": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "requires": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-new-target": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "requires": { "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-object-super": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" } }, "@babel/plugin-transform-parameters": { - "version": "7.18.8", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-property-literals": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "requires": { "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-regenerator": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "requires": { "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" @@ -21130,91 +24114,113 @@ }, "@babel/plugin-transform-reserved-words": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "requires": { "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-runtime": { - "version": "7.18.6", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", + "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", "requires": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", + "@babel/helper-plugin-utils": "^7.18.9", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "@babel/plugin-transform-shorthand-properties": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "requires": { "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-spread": { - "version": "7.18.9", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", "requires": { - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" } }, "@babel/plugin-transform-sticky-regex": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "requires": { "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-template-literals": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "requires": { "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-typeof-symbol": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "requires": { "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.6", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-unicode-regex": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/preset-env": { - "version": "7.18.6", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", + "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", "requires": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-validator-option": "^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6", - "@babel/plugin-proposal-async-generator-functions": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-class-static-block": "^7.18.6", "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", "@babel/plugin-proposal-private-methods": "^7.18.6", "@babel/plugin-proposal-private-property-in-object": "^7.18.6", "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", @@ -21236,51 +24242,55 @@ "@babel/plugin-transform-arrow-functions": "^7.18.6", "@babel/plugin-transform-async-to-generator": "^7.18.6", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.6", - "@babel/plugin-transform-classes": "^7.18.6", - "@babel/plugin-transform-computed-properties": "^7.18.6", - "@babel/plugin-transform-destructuring": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.6", - "@babel/plugin-transform-function-name": "^7.18.6", - "@babel/plugin-transform-literals": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", "@babel/plugin-transform-member-expression-literals": "^7.18.6", "@babel/plugin-transform-modules-amd": "^7.18.6", "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", "@babel/plugin-transform-modules-umd": "^7.18.6", "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", "@babel/plugin-transform-property-literals": "^7.18.6", "@babel/plugin-transform-regenerator": "^7.18.6", "@babel/plugin-transform-reserved-words": "^7.18.6", "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.6", - "@babel/plugin-transform-typeof-symbol": "^7.18.6", - "@babel/plugin-transform-unicode-escapes": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", "core-js-compat": "^3.22.1", "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "@babel/preset-modules": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -21290,44 +24300,54 @@ } }, "@babel/runtime": { - "version": "7.18.6", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.18.6", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, "@babel/traverse": { - "version": "7.18.9", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", + "@babel/generator": "^7.20.1", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.18.9", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", "requires": { - "@babel/types": "^7.18.9", + "@babel/types": "^7.20.2", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" } }, "@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==", "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -21337,17 +24357,24 @@ } }, "@babel/types": { - "version": "7.18.9", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", "requires": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, "@braintree/sanitize-url": { - "version": "6.0.0" + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" }, "@compodoc/compodoc": { "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.19.tgz", + "integrity": "sha512-09vdSIgoAXWD1MiLZNhiljLNQ1XzHw/w5shw5IPcUImr/I+1Y52srUL46mEXN8AXo0hbHb5LZcgs70mmrOvY7Q==", "dev": true, "requires": { "@angular-devkit/schematics": "^13.2.4", @@ -21389,6 +24416,8 @@ "dependencies": { "@angular-devkit/core": { "version": "13.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.9.tgz", + "integrity": "sha512-XqCuIWyoqIsLABjV3GQL/+EiBCt3xVPPtNp3Mg4gjBsDLW7PEnvbb81yGkiZQmIsq4EIyQC/6fQa3VdjsCshGg==", "dev": true, "requires": { "ajv": "8.9.0", @@ -21401,6 +24430,8 @@ }, "@angular-devkit/schematics": { "version": "13.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.9.tgz", + "integrity": "sha512-oNHLNtwbtEJ0dYPPXy1NpfRdSiFsYBl7+ozJklLgNV/AEOxlSi2qlVx6DoxNVjz5XgQ7Z+eoVDMw7ewGPnGSyA==", "dev": true, "requires": { "@angular-devkit/core": "13.3.9", @@ -21412,6 +24443,8 @@ }, "ajv": { "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -21422,6 +24455,8 @@ }, "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" @@ -21429,6 +24464,8 @@ }, "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", @@ -21437,6 +24474,8 @@ }, "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", @@ -21445,13 +24484,23 @@ }, "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 + }, "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", @@ -21464,14 +24513,20 @@ }, "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 }, "jsonc-parser": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, "magic-string": { "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, "requires": { "sourcemap-codec": "^1.4.4" @@ -21479,6 +24534,8 @@ }, "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" @@ -21486,6 +24543,8 @@ }, "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -21493,10 +24552,14 @@ }, "source-map": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true }, "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" @@ -21504,12 +24567,16 @@ }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "@compodoc/live-server": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", + "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", "dev": true, "requires": { "chokidar": "^3.5.2", @@ -21530,6 +24597,8 @@ }, "@compodoc/ngd-core": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.0.tgz", + "integrity": "sha512-nyBH7J7SJJ2AV6OeZhJ02kRtVB7ALnZJKgShjoL9CNmOFEj8AkdhP9qTBIgjaDrbsW5pF4nx32KQL2fT7RFnqw==", "dev": true, "requires": { "ansi-colors": "^4.1.1", @@ -21539,6 +24608,8 @@ "dependencies": { "fancy-log": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, "requires": { "ansi-gray": "^0.1.1", @@ -21551,6 +24622,8 @@ }, "@compodoc/ngd-transformer": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.0.tgz", + "integrity": "sha512-Jo4VCMzIUtgIAdRmhHhOoRRE01gCjc5CyrUERRx0VgEzkkCm1Wmu/XHSsQP6tSpCYHBjERghqaDqH5DabkR2oQ==", "dev": true, "requires": { "@aduh95/viz.js": "^3.1.0", @@ -21561,6 +24634,8 @@ "dependencies": { "fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { "at-least-node": "^1.0.0", @@ -21573,6 +24648,8 @@ }, "@cspotcode/source-map-support": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "requires": { "@jridgewell/trace-mapping": "0.3.9" @@ -21580,6 +24657,8 @@ "dependencies": { "@jridgewell/trace-mapping": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", @@ -21589,7 +24668,9 @@ } }, "@csstools/postcss-cascade-layers": { - "version": "1.0.5", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", "requires": { "@csstools/selector-specificity": "^2.0.2", "postcss-selector-parser": "^6.0.10" @@ -21597,6 +24678,8 @@ }, "@csstools/postcss-color-function": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -21604,18 +24687,24 @@ }, "@csstools/postcss-font-format-keywords": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-hwb-function": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-ic-unit": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -21623,19 +24712,33 @@ }, "@csstools/postcss-is-pseudo-class": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", "requires": { "@csstools/selector-specificity": "^2.0.0", "postcss-selector-parser": "^6.0.10" } }, + "@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, "@csstools/postcss-normalize-display-values": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-oklab-function": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -21643,32 +24746,52 @@ }, "@csstools/postcss-progressive-custom-properties": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-stepped-value-functions": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-trigonometric-functions": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-unset-value": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", "requires": {} }, "@csstools/selector-specificity": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", "requires": {} }, "@develar/schema-utils": { "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", "dev": true, "requires": { "ajv": "^6.12.0", @@ -21677,6 +24800,8 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -21687,20 +24812,28 @@ }, "ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, "requires": {} }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true } } }, "@discoveryjs/json-ext": { - "version": "0.5.7" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" }, "@electron/get": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -21716,6 +24849,8 @@ "dependencies": { "fs-extra": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -21725,6 +24860,8 @@ }, "jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "requires": { "graceful-fs": "^4.1.6" @@ -21732,16 +24869,22 @@ }, "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "universalify": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true } } }, "@electron/universal": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", + "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==", "dev": true, "requires": { "@malept/cross-spawn-promise": "^1.1.0", @@ -21755,6 +24898,8 @@ "dependencies": { "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", @@ -21763,6 +24908,8 @@ }, "fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { "at-least-node": "^1.0.0", @@ -21773,6 +24920,8 @@ }, "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" @@ -21781,9 +24930,9 @@ } }, "@es-joy/jsdoccomment": { - "version": "0.31.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", - "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==", + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.0.tgz", + "integrity": "sha512-u0XZyvUF6Urb2cSivSXA8qXIpT/CxkHcdtZKoWusAzgzmsTWpg0F2FpWXsolHmMUyVY3dLWaoy+0ccJ5uf2QjA==", "dev": true, "requires": { "comment-parser": "1.3.1", @@ -21791,13 +24940,21 @@ "jsdoc-type-pratt-parser": "~3.1.0" } }, + "@esbuild/linux-loong64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz", + "integrity": "sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A==", + "optional": true + }, "@eslint/eslintrc": { - "version": "1.3.0", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", + "espree": "^9.4.0", "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -21808,6 +24965,8 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -21818,10 +24977,14 @@ }, "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "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", @@ -21830,6 +24993,8 @@ }, "globals": { "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -21837,6 +25002,8 @@ }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -21844,10 +25011,14 @@ }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "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" @@ -21855,12 +25026,16 @@ }, "type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, "@foliojs-fork/fontkit": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", "dev": true, "requires": { "@foliojs-fork/restructure": "^2.0.2", @@ -21877,6 +25052,8 @@ }, "@foliojs-fork/linebreak": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", "dev": true, "requires": { "base64-js": "1.3.1", @@ -21886,12 +25063,16 @@ "dependencies": { "base64-js": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true } } }, "@foliojs-fork/pdfkit": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", "dev": true, "requires": { "@foliojs-fork/fontkit": "^1.9.1", @@ -21902,22 +25083,30 @@ }, "@foliojs-fork/restructure": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", "dev": true }, "@gar/promisify": { - "version": "1.1.3" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" }, "@humanwhocodes/config-array": { - "version": "0.9.5", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "dependencies": { "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", @@ -21926,6 +25115,8 @@ }, "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" @@ -21933,12 +25124,22 @@ } } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "requires": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -21948,23 +25149,33 @@ } }, "@istanbuljs/schema": { - "version": "0.1.3" + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, "@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==", "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@jridgewell/resolve-uri": { - "version": "3.1.0" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@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==", "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -21972,6 +25183,8 @@ "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==", "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -21981,20 +25194,28 @@ } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.14", + "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==", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@leichtgewicht/ip-codec": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "@malept/cross-spawn-promise": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", "dev": true, "requires": { "cross-spawn": "^7.0.1" @@ -22002,6 +25223,8 @@ }, "@malept/flatpak-bundler": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", "dev": true, "requires": { "debug": "^4.1.1", @@ -22012,6 +25235,8 @@ "dependencies": { "fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { "at-least-node": "^1.0.0", @@ -22024,6 +25249,8 @@ }, "@netflix/nerror": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@netflix/nerror/-/nerror-1.1.3.tgz", + "integrity": "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==", "requires": { "assert-plus": "^1.0.0", "extsprintf": "^1.4.0", @@ -22031,41 +25258,55 @@ } }, "@ngtools/webpack": { - "version": "14.1.0", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.9.tgz", + "integrity": "sha512-P2zgvsfSpN4BkNzZWnPKUVOzv3y/SUWdnx/nhAG5gsQkLBp0Vf2evwQnbPUKuCrbMpYd1V/5SHb48+0B6FbUtQ==", "requires": {} }, "@ngx-matomo/tracker": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ngx-matomo/tracker/-/tracker-3.2.0.tgz", + "integrity": "sha512-sSVnC9VXAo6RHwJ6ZNYdP5drIYct1ZjJIAhawgzYM9NV4yRM3l9H4tz9d8qilWIhWColrWhyIwQJ1hOWJX6x8g==", "requires": { "tslib": "^2.0.0" } }, "@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==", "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@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==", "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@npmcli/fs": { - "version": "2.1.1", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "requires": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, "@npmcli/git": { - "version": "3.0.1", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", + "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", "dev": true, "requires": { "@npmcli/promise-spawn": "^3.0.0", @@ -22081,6 +25322,8 @@ }, "@npmcli/installed-package-contents": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, "requires": { "npm-bundled": "^1.1.1", @@ -22088,7 +25331,9 @@ } }, "@npmcli/move-file": { - "version": "2.0.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", "requires": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -22096,17 +25341,23 @@ }, "@npmcli/node-gyp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true }, "@npmcli/promise-spawn": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, "requires": { "infer-owner": "^1.0.4" } }, "@npmcli/run-script": { - "version": "4.1.7", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", + "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", "dev": true, "requires": { "@npmcli/node-gyp": "^2.0.0", @@ -22117,20 +25368,26 @@ } }, "@schematics/angular": { - "version": "14.1.0", + "version": "14.2.9", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.9.tgz", + "integrity": "sha512-pt/eN+D9a6JeOjgqEdWP8lU6VQIoo3F8RcoVEVXHhjXzF2mIe1a3ZJTwY3ssdemKV4mZgseTJBG99/jxrHK0XQ==", "dev": true, "requires": { - "@angular-devkit/core": "14.1.0", - "@angular-devkit/schematics": "14.1.0", + "@angular-devkit/core": "14.2.9", + "@angular-devkit/schematics": "14.2.9", "jsonc-parser": "3.1.0" } }, "@sindresorhus/is": { "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "dev": true }, "@szmarczak/http-timer": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dev": true, "requires": { "defer-to-connect": "^1.0.1" @@ -22138,10 +25395,14 @@ }, "@tootallnate/once": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, "@ts-morph/common": { "version": "0.12.3", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.12.3.tgz", + "integrity": "sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w==", "dev": true, "requires": { "fast-glob": "^3.2.7", @@ -22152,6 +25413,8 @@ "dependencies": { "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", @@ -22160,6 +25423,8 @@ }, "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" @@ -22169,18 +25434,26 @@ }, "@tsconfig/node10": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true }, "@tsconfig/node12": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true }, "@tsconfig/node14": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true }, "@tsconfig/node16": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, "@types/base-64": { @@ -22190,6 +25463,8 @@ }, "@types/body-parser": { "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "requires": { "@types/connect": "*", "@types/node": "*" @@ -22197,18 +25472,24 @@ }, "@types/bonjour": { "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "requires": { "@types/node": "*" } }, "@types/connect": { "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "requires": { "@types/node": "*" } }, "@types/connect-history-api-fallback": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "requires": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -22216,13 +25497,17 @@ }, "@types/debug": { "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", "dev": true, "requires": { "@types/ms": "*" } }, "@types/eslint": { - "version": "8.4.5", + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "requires": { "@types/estree": "*", "@types/json-schema": "*" @@ -22230,16 +25515,22 @@ }, "@types/eslint-scope": { "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "requires": { "@types/eslint": "*", "@types/estree": "*" } }, "@types/estree": { - "version": "0.0.51" + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "@types/express": { - "version": "4.17.13", + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -22248,7 +25539,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.29", + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", "requires": { "@types/node": "*", "@types/qs": "*", @@ -22257,10 +25550,14 @@ }, "@types/file-saver": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==", "dev": true }, "@types/fs-extra": { "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, "requires": { "@types/node": "*" @@ -22268,6 +25565,8 @@ }, "@types/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "optional": true, "requires": { @@ -22277,102 +25576,174 @@ }, "@types/http-proxy": { "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", "requires": { "@types/node": "*" } }, "@types/jasmine": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", + "integrity": "sha512-Opp1LvvEuZdk8fSSvchK2mZwhVrsNT0JgJE9Di6MjnaIpmEXM8TLCPPrVtNTYh8+5MPdY8j9bAHMu2SSfwpZJg==", "dev": true }, "@types/jasminewd2": { "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.10.tgz", + "integrity": "sha512-J7mDz7ovjwjc+Y9rR9rY53hFWKATcIkrr9DwQWmOas4/pnIPJTXawnzjwpHm3RSxz/e3ZVUvQ7cRbd5UQLo10g==", "dev": true, "requires": { "@types/jasmine": "*" } }, "@types/json-schema": { - "version": "7.0.11" + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "@types/marked": { - "version": "4.0.3" + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.7.tgz", + "integrity": "sha512-eEAhnz21CwvKVW+YvRvcTuFKNU9CV1qH+opcgVK3pIMI6YZzDm6gc8o2vHjldFk6MGKt5pueSB7IOpvpx5Qekw==" }, "@types/mime": { - "version": "1.3.2" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "@types/minimatch": { - "version": "3.0.5", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true, "optional": true }, "@types/mousetrap": { - "version": "1.6.9" + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.11.tgz", + "integrity": "sha512-F0oAily9Q9QQpv9JKxKn0zMKfOo36KHCW7myYsmUyf2t0g+sBTbG3UleTPoguHdE1z3GLFr3p7/wiOio52QFjQ==" }, "@types/ms": { "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "dev": true }, "@types/node": { - "version": "18.6.1" + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, "@types/pako": { - "version": "1.0.4" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.4.tgz", + "integrity": "sha512-Z+5bJSm28EXBSUJEgx29ioWeEEHUh6TiMkZHDhLwjc9wVFH+ressbkmX6waUZc5R3Gobn4Qu5llGxaoflZ+yhA==" }, "@types/parse-json": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } }, "@types/q": { "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==", "devOptional": true }, "@types/qs": { - "version": "6.9.7" + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, "@types/range-parser": { - "version": "1.2.4" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "@types/retry": { - "version": "0.12.0" + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "@types/selenium-webdriver": { "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.20.tgz", + "integrity": "sha512-6d8Q5fqS9DWOXEhMDiF6/2FjyHdmP/jSTAUyeQR7QwrFeNmYyzmvGxD5aLIHL445HjWgibs0eAig+KPnbaesXA==", "devOptional": true }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "@types/serve-index": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "requires": { "@types/express": "*" } }, "@types/serve-static": { - "version": "1.13.10", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", "requires": { - "@types/mime": "^1", + "@types/mime": "*", "@types/node": "*" } }, "@types/sockjs": { "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "requires": { "@types/node": "*" } }, "@types/sprintf-js": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-hkgzYF+qnIl8uTO8rmUSVSfQ8BIfMXC4yJAF4n8BE758YsKBZvFC4NumnAegj7KmylP0liEZNpb9RRGFMbFejA==" + }, + "@types/verror": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", + "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==", + "dev": true, + "optional": true }, "@types/ws": { "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", "requires": { "@types/node": "*" } }, "@types/yargs": { - "version": "17.0.10", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -22380,110 +25751,85 @@ }, "@types/yargs-parser": { "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/type-utils": "5.31.0", - "@typescript-eslint/utils": "5.31.0", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" - }, - "dependencies": { - "@typescript-eslint/utils": { - "version": "5.31.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - } } }, "@typescript-eslint/eslint-plugin-tslint": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-5.43.0.tgz", + "integrity": "sha512-IKy2fJm9PlNflb2ZW5gDJHb0Inte2lVv9+Dq9ZaNP2pUMFdTYKUV7VcFkG6TlFEGjNsoEPZGHQY6JUMRKIYtFA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.31.0", + "@typescript-eslint/utils": "5.43.0", "lodash": "^4.17.21" - }, - "dependencies": { - "@typescript-eslint/utils": { - "version": "5.31.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - } } }, "@typescript-eslint/parser": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0" + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" } }, "@typescript-eslint/type-utils": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.31.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "debug": "^4.3.4", "tsutils": "^3.21.0" - }, - "dependencies": { - "@typescript-eslint/utils": { - "version": "5.31.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - } } }, "@typescript-eslint/types": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -22492,78 +25838,59 @@ } }, "@typescript-eslint/utils": { - "version": "5.29.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "5.29.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0" - } - }, - "@typescript-eslint/types": { - "version": "5.29.0", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.29.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.29.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.29.0", - "eslint-visitor-keys": "^3.3.0" - } - } + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { - "version": "5.31.0", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/types": "5.43.0", "eslint-visitor-keys": "^3.3.0" } }, "@webassemblyjs/ast": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "requires": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "@webassemblyjs/helper-api-error": { - "version": "1.11.1" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.1" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "@webassemblyjs/helper-numbers": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -22571,10 +25898,14 @@ } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "@webassemblyjs/helper-wasm-section": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -22584,21 +25915,29 @@ }, "@webassemblyjs/ieee754": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.1" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "@webassemblyjs/wasm-edit": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -22612,6 +25951,8 @@ }, "@webassemblyjs/wasm-gen": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -22622,6 +25963,8 @@ }, "@webassemblyjs/wasm-opt": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -22631,6 +25974,8 @@ }, "@webassemblyjs/wasm-parser": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -22642,52 +25987,76 @@ }, "@webassemblyjs/wast-printer": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "requires": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, "@xtuc/ieee754": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "@xtuc/long": { - "version": "4.2.2" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "@yarnpkg/lockfile": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, "7zip-bin": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", "dev": true }, "abab": { - "version": "2.0.6" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, "abbrev": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "acorn": { - "version": "8.8.0" + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" }, "acorn-import-assertions": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "requires": {} }, "acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "acorn-node": { "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, "requires": { "acorn": "^7.0.0", @@ -22697,23 +26066,31 @@ "dependencies": { "acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": 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 }, "adjust-sourcemap-loader": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "requires": { "loader-utils": "^2.0.0", "regex-parser": "^2.2.11" }, "dependencies": { "loader-utils": { - "version": "2.0.2", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -22723,20 +26100,28 @@ } }, "adler-32": { - "version": "1.3.1" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" }, "adm-zip": { "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "devOptional": 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==", "requires": { "debug": "4" } }, "agentkeepalive": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -22746,12 +26131,16 @@ "dependencies": { "depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true } } }, "aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -22759,6 +26148,8 @@ }, "ajv": { "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -22768,34 +26159,46 @@ }, "ajv-formats": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "requires": { "ajv": "^8.0.0" } }, "ajv-keywords": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "requires": { "fast-deep-equal": "^3.1.3" } }, "amdefine": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, "optional": true }, "android-versions": { - "version": "1.7.0", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.8.1.tgz", + "integrity": "sha512-5a0YyylAk6pPM2Ezi0vWaPPNbS6tSNRs+micbgk5NpHEN5YW1ez+T94G5orysfwBEBDMHoxm5GNc5ZDUPgRrhw==", "requires": { "semver": "^5.7.1" }, "dependencies": { "semver": { - "version": "5.7.1" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "angular2-hotkeys": { "version": "13.1.0", + "resolved": "https://registry.npmjs.org/angular2-hotkeys/-/angular2-hotkeys-13.1.0.tgz", + "integrity": "sha512-irsQLLiHCHqz73ocDV8N5K7Zel7mJyLQHwLrRePOwUumQfyBc2TTuO+ccdQAAM7/RK+IdT6P5YoiP0FEbA19Uw==", "requires": { "@types/mousetrap": "^1.6.9", "mousetrap": "^1.6.5", @@ -22803,71 +26206,99 @@ } }, "ansi": { - "version": "0.3.1" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==" }, "ansi-align": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, "requires": { "string-width": "^4.1.0" } }, "ansi-colors": { - "version": "4.1.3" + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" }, "ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { "type-fest": "^0.21.3" } }, "ansi-gray": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", "dev": true, "requires": { "ansi-wrap": "0.1.0" } }, "ansi-html-community": { - "version": "0.0.8" + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" }, "ansi-regex": { - "version": "5.0.1" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "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==", "requires": { "color-convert": "^1.9.0" } }, "ansi-wrap": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", "dev": true }, "anymatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "apache-crypt": { - "version": "1.2.5", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", + "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", "dev": true, "requires": { "unix-crypt-td-js": "^1.1.4" } }, "apache-md5": { - "version": "1.1.7", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", "dev": true }, "app-builder-bin": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", "dev": true }, "app-builder-lib": { - "version": "23.1.0", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz", + "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==", "dev": true, "requires": { "@develar/schema-utils": "~2.6.5", @@ -22876,13 +26307,13 @@ "7zip-bin": "~5.1.1", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "23.0.9", - "builder-util-runtime": "9.0.2", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", "chromium-pickle-js": "^0.2.0", "debug": "^4.3.4", "ejs": "^3.1.7", "electron-osx-sign": "^0.6.0", - "electron-publish": "23.0.9", + "electron-publish": "23.6.0", "form-data": "^4.0.0", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", @@ -22900,10 +26331,14 @@ "dependencies": { "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "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", @@ -22912,6 +26347,8 @@ }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -22919,6 +26356,8 @@ }, "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" @@ -22927,15 +26366,21 @@ } }, "app-root-path": { - "version": "3.0.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", "dev": true }, "aproba": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "are-we-there-yet": { - "version": "3.0.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, "requires": { "delegates": "^1.0.0", @@ -22944,6 +26389,8 @@ "dependencies": { "readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -22955,21 +26402,29 @@ }, "arg": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { "sprintf-js": "~1.0.2" }, "dependencies": { "sprintf-js": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" } } }, "aria-query": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", "dev": true, "requires": { "ast-types-flow": "0.0.7", @@ -22978,56 +26433,76 @@ "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 } } }, "array-find-index": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", "dev": true }, "array-flatten": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "array-from": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", "dev": true }, "array-includes": { - "version": "3.1.5", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" } }, "array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "array-uniq": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "devOptional": true }, "array.prototype.flat": { - "version": "1.3.0", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" } }, "arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "devOptional": true }, "asar": { - "version": "3.1.0", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", + "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", "dev": true, "requires": { "@types/glob": "^7.1.1", @@ -23039,6 +26514,8 @@ "dependencies": { "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", @@ -23047,10 +26524,14 @@ }, "commander": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true }, "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", @@ -23063,6 +26544,8 @@ }, "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" @@ -23072,16 +26555,22 @@ }, "asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "devOptional": true, "requires": { "safer-buffer": "~2.1.0" } }, "assert-plus": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, "ast-transform": { "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", "dev": true, "requires": { "escodegen": "~1.2.0", @@ -23091,20 +26580,35 @@ "dependencies": { "esprima": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", "dev": true } } }, "ast-types": { "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", "dev": true }, "ast-types-flow": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "optional": true + }, "async": { "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { "lodash": "^4.17.14" @@ -23112,27 +26616,34 @@ }, "async-exit-hook": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", "dev": true }, "asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "devOptional": true }, "at-least-node": { - "version": "1.0.0" - }, - "atob": { - "version": "2.1.2" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "atomically": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", + "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", "dev": true }, "autoprefixer": { - "version": "10.4.7", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "requires": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -23141,14 +26652,20 @@ }, "aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "devOptional": true }, "aws4": { "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "devOptional": true }, "axobject-query": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", "dev": true, "requires": { "ast-types-flow": "0.0.7" @@ -23156,6 +26673,8 @@ }, "babel-loader": { "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", "requires": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", @@ -23164,7 +26683,9 @@ }, "dependencies": { "loader-utils": { - "version": "2.0.2", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -23173,14 +26694,10 @@ } } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "requires": { - "object.assign": "^4.1.0" - } - }, "babel-plugin-istanbul": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -23190,33 +26707,43 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.2", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "requires": { "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "babel-plugin-polyfill-corejs3": { "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", + "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", "requires": { "@babel/helper-define-polyfill-provider": "^0.3.2", "core-js-compat": "^3.21.0" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.3.3" } }, "balanced-match": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base-64": { "version": "1.0.0", @@ -23224,20 +26751,28 @@ "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" }, "base64-js": { - "version": "1.5.1" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "basic-auth": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "dev": true, "requires": { "safe-buffer": "5.1.2" } }, "batch": { - "version": "0.6.1" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "devOptional": true, "requires": { "tweetnacl": "^0.14.3" @@ -23245,19 +26780,29 @@ }, "bcryptjs": { "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", "dev": true }, "big-integer": { - "version": "1.6.51" + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" }, "big.js": { - "version": "5.2.2" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "binary-extensions": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -23266,6 +26811,8 @@ "dependencies": { "readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -23276,6 +26823,8 @@ }, "blocking-proxy": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", "devOptional": true, "requires": { "minimist": "^1.2.0" @@ -23283,17 +26832,23 @@ }, "bluebird": { "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "bluebird-lst": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", "dev": true, "requires": { "bluebird": "^3.5.5" } }, "body-parser": { - "version": "1.20.0", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -23303,34 +26858,44 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" }, "dependencies": { "bytes": { - "version": "3.1.2" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "bonjour-service": { - "version": "1.0.13", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", "requires": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", @@ -23339,20 +26904,28 @@ }, "dependencies": { "array-flatten": { - "version": "2.1.2" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" } } }, "boolbase": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "boolean": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "dev": true, "optional": true }, "boxen": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "requires": { "ansi-align": "^3.0.0", @@ -23367,6 +26940,8 @@ "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" @@ -23374,10 +26949,14 @@ }, "camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "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", @@ -23386,17 +26965,29 @@ }, "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": "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" @@ -23404,30 +26995,40 @@ }, "type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, "bplist-parser": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", "requires": { "big-integer": "^1.6.44" } }, "brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "requires": { "balanced-match": "^1.0.0" } }, "braces": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { "fill-range": "^7.0.1" } }, "brfs": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", "dev": true, "requires": { "quote-stream": "^1.0.1", @@ -23438,6 +27039,8 @@ }, "brotli": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", "dev": true, "requires": { "base64-js": "^1.1.2" @@ -23445,6 +27048,8 @@ }, "browser-resolve": { "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", "dev": true, "requires": { "resolve": "1.1.7" @@ -23452,12 +27057,16 @@ "dependencies": { "resolve": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", "dev": true } } }, "browserify-optional": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", "dev": true, "requires": { "ast-transform": "0.0.0", @@ -23466,16 +27075,20 @@ } }, "browserslist": { - "version": "4.21.2", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "requires": { - "caniuse-lite": "^1.0.30001366", - "electron-to-chromium": "^1.4.188", + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.4" + "update-browserslist-db": "^1.0.9" } }, "browserstack": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", + "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", "devOptional": true, "requires": { "https-proxy-agent": "^2.2.1" @@ -23483,6 +27096,8 @@ "dependencies": { "agent-base": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "devOptional": true, "requires": { "es6-promisify": "^5.0.0" @@ -23490,6 +27105,8 @@ }, "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "devOptional": true, "requires": { "ms": "^2.1.1" @@ -23497,6 +27114,8 @@ }, "https-proxy-agent": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "devOptional": true, "requires": { "agent-base": "^4.3.0", @@ -23507,6 +27126,8 @@ }, "buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -23514,6 +27135,8 @@ }, "buffer-alloc": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { "buffer-alloc-unsafe": "^1.1.0", @@ -23522,25 +27145,37 @@ }, "buffer-alloc-unsafe": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, "buffer-crc32": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true }, "buffer-equal": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", "dev": true }, "buffer-fill": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "dev": true }, "buffer-from": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "builder-util": { - "version": "23.0.9", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz", + "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==", "dev": true, "requires": { "@types/debug": "^4.1.6", @@ -23548,7 +27183,7 @@ "7zip-bin": "~5.1.1", "app-builder-bin": "4.0.0", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.0.2", + "builder-util-runtime": "9.1.1", "chalk": "^4.1.1", "cross-spawn": "^7.0.3", "debug": "^4.3.4", @@ -23564,6 +27199,8 @@ "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" @@ -23571,10 +27208,14 @@ }, "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "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", @@ -23583,17 +27224,29 @@ }, "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 }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -23601,6 +27254,8 @@ }, "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" @@ -23609,7 +27264,9 @@ } }, "builder-util-runtime": { - "version": "9.0.2", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", "dev": true, "requires": { "debug": "^4.3.4", @@ -23618,18 +27275,26 @@ }, "builtin-modules": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true, "peer": true }, "builtins": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", "dev": true }, "bytes": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, "cacache": { - "version": "16.1.1", + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", + "integrity": "sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA==", "requires": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", @@ -23653,6 +27318,8 @@ }, "cacheable-request": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dev": true, "requires": { "clone-response": "^1.0.2", @@ -23666,6 +27333,8 @@ "dependencies": { "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { "pump": "^3.0.0" @@ -23673,12 +27342,16 @@ }, "lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "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==", "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -23686,23 +27359,35 @@ }, "callsite": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", "dev": true }, "callsites": { - "version": "3.1.0" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { - "version": "5.3.1" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { - "version": "1.0.30001370" + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" }, "caseless": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "devOptional": true }, "cfb": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", "requires": { "adler-32": "~1.3.0", "crc-32": "~1.2.0" @@ -23710,6 +27395,8 @@ }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -23717,7 +27404,9 @@ } }, "chardet": { - "version": "0.7.0" + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chart.js": { "version": "3.9.1", @@ -23735,6 +27424,8 @@ }, "cheerio": { "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dev": true, "requires": { "cheerio-select": "^2.1.0", @@ -23747,16 +27438,20 @@ }, "dependencies": { "parse5": { - "version": "7.0.0", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", "dev": true, "requires": { - "entities": "^4.3.0" + "entities": "^4.4.0" } } } }, "cheerio-select": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, "requires": { "boolbase": "^1.0.0", @@ -23769,6 +27464,8 @@ }, "chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -23781,40 +27478,71 @@ } }, "chownr": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "chrome-trace-event": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, "chromium-pickle-js": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", "dev": true }, "ci-info": { - "version": "3.3.2", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", + "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", "dev": true }, "clean-stack": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, "cli-boxes": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true }, "cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { "restore-cursor": "^3.1.0" } }, "cli-spinners": { - "version": "2.7.0" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==" + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "optional": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } }, "cli-width": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, "clipboard": { "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", "requires": { "good-listener": "^1.2.2", "select": "^1.1.2", @@ -23823,6 +27551,8 @@ }, "cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -23830,10 +27560,14 @@ } }, "clone": { - "version": "1.0.4" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" }, "clone-deep": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "requires": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -23842,21 +27576,29 @@ }, "clone-response": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "requires": { "mimic-response": "^1.0.0" } }, "code-block-writer": { - "version": "11.0.2", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz", + "integrity": "sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==", "dev": true }, "code-point-at": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true }, "codelyzer": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", + "integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==", "dev": true, "requires": { "@angular/compiler": "9.0.0", @@ -23877,16 +27619,22 @@ "dependencies": { "@angular/compiler": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", + "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", "dev": true, "requires": {} }, "@angular/core": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", + "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", "dev": true, "requires": {} }, "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -23894,20 +27642,28 @@ }, "source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "zone.js": { "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", "dev": true } } }, "codepage": { - "version": "1.15.0" + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" }, "coffeescript": { "version": "1.12.7", @@ -23917,38 +27673,47 @@ }, "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==", "requires": { "color-name": "1.1.3" - }, - "dependencies": { - "color-name": { - "version": "1.1.3" - } } }, "color-name": { - "version": "1.1.4" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "color-support": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, "colorette": { - "version": "2.0.19" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "colors": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "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==", "devOptional": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "9.4.0", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", "dev": true }, "comment-parser": { @@ -23958,20 +27723,28 @@ "dev": true }, "commondir": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "compare-version": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", "dev": true }, "compressible": { "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "requires": { "mime-db": ">= 1.43.0 < 2" } }, "compression": { "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -23984,20 +27757,28 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "concat-map": { - "version": "0.0.1" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "concat-stream": { "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -24007,7 +27788,9 @@ } }, "conf": { - "version": "10.1.2", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", + "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", "dev": true, "requires": { "ajv": "^8.6.3", @@ -24024,6 +27807,8 @@ "dependencies": { "dot-prop": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, "requires": { "is-obj": "^2.0.0" @@ -24033,6 +27818,8 @@ }, "config-chain": { "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, "optional": true, "requires": { @@ -24042,6 +27829,8 @@ "dependencies": { "ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "optional": true } @@ -24049,6 +27838,8 @@ }, "configstore": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, "requires": { "dot-prop": "^5.2.0", @@ -24061,6 +27852,8 @@ }, "connect": { "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", @@ -24071,6 +27864,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -24078,51 +27873,70 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "connect-history-api-fallback": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" }, "console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "content-disposition": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { "safe-buffer": "5.2.1" }, "dependencies": { "safe-buffer": { - "version": "5.2.1" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, "content-type": { - "version": "1.0.4" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "convert-source-map": { - "version": "1.8.0", - "requires": { - "safe-buffer": "~5.1.1" - } + "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==" }, "cookie": { - "version": "0.5.0" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, "cookie-signature": { - "version": "1.0.6" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "copy-anything": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "requires": { "is-what": "^3.14.1" } }, "copy-webpack-plugin": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "requires": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", @@ -24134,12 +27948,16 @@ "dependencies": { "glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "requires": { "is-glob": "^4.0.3" } }, "globby": { "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", "requires": { "dir-glob": "^3.0.1", "fast-glob": "^3.2.11", @@ -24150,6 +27968,8 @@ }, "schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -24158,12 +27978,16 @@ } }, "slash": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" } } }, "cordova": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/cordova/-/cordova-11.0.0.tgz", + "integrity": "sha512-Hu2YeT0naeP/1sEm/xfJYUsXN48XV6zagxbi1+4q0Ei9c5TKsIq8v4EWukvSHF4UO2pnh+9ViaDlGMcS1Wrnfg==", "dev": true, "requires": { "configstore": "^5.0.1", @@ -24183,6 +28007,8 @@ }, "cordova-android": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-11.0.0.tgz", + "integrity": "sha512-ZhvSF5BYY8gmrAu1PtMPdHFsRoom/emT4OtTcecmh3Zj22900y4Golg5whhBPcYcTPC7BU6PG/EmG9BBHcX9tQ==", "requires": { "android-versions": "^1.7.0", "cordova-common": "^4.0.2", @@ -24199,10 +28025,14 @@ }, "cordova-app-hello-world": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cordova-app-hello-world/-/cordova-app-hello-world-6.0.0.tgz", + "integrity": "sha512-wPZsm+fzNUwdiTRODT+fQuPV410RNmd3Buiw63vT8BPxjC+cn6Bu8emrgwrDM4pbmU5sa5Unwu3xPcbQGQ3G3g==", "dev": true }, "cordova-common": { - "version": "4.0.2", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-4.1.0.tgz", + "integrity": "sha512-sYfOSfpYGQOmUDlsARUbpT/EvVKT/E+GI3zwTXt+C6DjZ7xs6ZQVHs3umHKSidjf9yVM2LLmvGFpGrGX7aGxug==", "requires": { "@netflix/nerror": "^1.1.3", "ansi": "^0.3.1", @@ -24222,6 +28052,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -24229,6 +28061,8 @@ }, "fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -24238,6 +28072,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -24249,6 +28085,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -24257,6 +28095,8 @@ }, "cordova-create": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cordova-create/-/cordova-create-4.0.0.tgz", + "integrity": "sha512-t/4zaDZ4ZsFpC7j6x7s9hR9OeEo8nD2m7rSrzV2PUEfA4BPQujkmk0AIC+5iBvjfR7+ReHOHKsY/NfB1LnMQxQ==", "dev": true, "requires": { "cordova-app-hello-world": "^6.0.0", @@ -24274,6 +28114,8 @@ "dependencies": { "npm-package-arg": { "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", @@ -24285,6 +28127,8 @@ }, "cordova-fetch": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cordova-fetch/-/cordova-fetch-3.0.1.tgz", + "integrity": "sha512-bxXk6H3FtGXpCtlO+XyXM4pa72azQomdurNeHbZai9eYBzA5vjyPnsgxsYcylLUc1wQFeR+XWQVfgJitx6ghEw==", "dev": true, "requires": { "cordova-common": "^4.0.0", @@ -24299,6 +28143,8 @@ "dependencies": { "@npmcli/fs": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, "requires": { "@gar/promisify": "^1.0.1", @@ -24307,6 +28153,8 @@ }, "@npmcli/git": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", "dev": true, "requires": { "@npmcli/promise-spawn": "^1.3.2", @@ -24321,6 +28169,8 @@ }, "@npmcli/move-file": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "dev": true, "requires": { "mkdirp": "^1.0.4", @@ -24329,10 +28179,14 @@ }, "@npmcli/node-gyp": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", "dev": true }, "@npmcli/promise-spawn": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", "dev": true, "requires": { "infer-owner": "^1.0.4" @@ -24340,6 +28194,8 @@ }, "@npmcli/run-script": { "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", "dev": true, "requires": { "@npmcli/node-gyp": "^1.0.2", @@ -24350,18 +28206,26 @@ }, "@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 }, "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true }, "aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, "are-we-there-yet": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "dev": true, "requires": { "delegates": "^1.0.0", @@ -24370,6 +28234,8 @@ }, "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", @@ -24378,6 +28244,8 @@ }, "cacache": { "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "requires": { "@npmcli/fs": "^1.0.0", @@ -24402,6 +28270,8 @@ }, "fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { "at-least-node": "^1.0.0", @@ -24412,6 +28282,8 @@ }, "gauge": { "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "dev": true, "requires": { "aproba": "^1.0.3", @@ -24426,6 +28298,8 @@ }, "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", @@ -24438,6 +28312,8 @@ }, "http-proxy-agent": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { "@tootallnate/once": "1", @@ -24447,6 +28323,8 @@ }, "ignore-walk": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "dev": true, "requires": { "minimatch": "^3.0.4" @@ -24454,6 +28332,8 @@ }, "is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "requires": { "number-is-nan": "^1.0.0" @@ -24461,6 +28341,8 @@ }, "lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -24468,6 +28350,8 @@ }, "make-fetch-happen": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, "requires": { "agentkeepalive": "^4.1.3", @@ -24490,6 +28374,8 @@ }, "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" @@ -24497,6 +28383,8 @@ }, "minipass-fetch": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "dev": true, "requires": { "encoding": "^0.1.12", @@ -24507,6 +28395,8 @@ }, "node-gyp": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", "dev": true, "requires": { "env-paths": "^2.2.0", @@ -24523,6 +28413,8 @@ }, "npm-install-checks": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", "dev": true, "requires": { "semver": "^7.1.1" @@ -24530,6 +28422,8 @@ }, "npm-package-arg": { "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", @@ -24539,6 +28433,8 @@ }, "npm-packlist": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", "dev": true, "requires": { "glob": "^7.1.6", @@ -24549,6 +28445,8 @@ }, "npm-pick-manifest": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", "dev": true, "requires": { "npm-install-checks": "^4.0.0", @@ -24559,6 +28457,8 @@ }, "npm-registry-fetch": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", "dev": true, "requires": { "make-fetch-happen": "^9.0.1", @@ -24571,6 +28471,8 @@ }, "npmlog": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -24581,6 +28483,8 @@ }, "pacote": { "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", "dev": true, "requires": { "@npmcli/git": "^2.1.0", @@ -24606,6 +28510,8 @@ }, "socks-proxy-agent": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "dev": true, "requires": { "agent-base": "^6.0.2", @@ -24615,6 +28521,8 @@ }, "ssri": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -24622,6 +28530,8 @@ }, "string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "requires": { "code-point-at": "^1.0.0", @@ -24631,6 +28541,8 @@ }, "strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -24640,6 +28552,8 @@ }, "cordova-lib": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/cordova-lib/-/cordova-lib-11.0.0.tgz", + "integrity": "sha512-3XSCIAlS060/hzxWKDrF+sMfv3PVU8bglCaL31HMCyj3YrZn1CZhqrRRrW5lwRxtz7Sh4XCxv97rNxF38uj9hg==", "dev": true, "requires": { "cordova-common": "^4.0.2", @@ -24661,10 +28575,14 @@ } }, "cordova-plugin-advanced-http": { - "version": "3.3.1" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/cordova-plugin-advanced-http/-/cordova-plugin-advanced-http-3.3.1.tgz", + "integrity": "sha512-hESuB3mxIHCUrzb5lm7juda6PSNcC5N8Invizj5wGV2rSldCapiNxMTEpzKR1UVPDDP2XOtBzO0SAYS+3+g/ig==" }, "cordova-plugin-androidx-adapter": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cordova-plugin-androidx-adapter/-/cordova-plugin-androidx-adapter-1.1.3.tgz", + "integrity": "sha512-W1SImn0cCCvOSTSfWWp5TnanIQrSuh2Bch+dcZXIzEn0km3Qb7VryeAqHhgBQYwwzC5Ollk1DtUAk/AJSojuZA==", "dev": true, "requires": { "q": "^1.5.1", @@ -24672,25 +28590,39 @@ } }, "cordova-plugin-app-version": { - "version": "0.1.14" + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/cordova-plugin-app-version/-/cordova-plugin-app-version-0.1.14.tgz", + "integrity": "sha512-HN6Yz6IIdRO+iMvCHN/qMe8/O4miOpHH/pDtWNjIYTjV3MzP+XdzFJoFnq2zxlNNXFz0Zn8REGQhFY77vV4AWQ==" }, "cordova-plugin-badge": { - "version": "0.8.8" + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/cordova-plugin-badge/-/cordova-plugin-badge-0.8.8.tgz", + "integrity": "sha512-RhIBtd5xhD/iLnxjt35jvOae28oNW/wtMZBOmQR3Rf0y4wirvA1bpAZEhBoFqL+rZGhsd6ddOdQXdex1T0DRyQ==" }, "cordova-plugin-device": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.1.0.tgz", + "integrity": "sha512-FU0Lw1jZpuKOgG4v80LrfMAOIMCGfAVPumn7AwaX9S1iU/X3OPZUyoKUgP09q4bxL35IeNPkqNWVKYduAXZ1sg==" }, "cordova-plugin-file": { - "version": "7.0.0" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-7.0.0.tgz", + "integrity": "sha512-mSwy9GE5pHq2ZHhu/wYk/VhrwR5VLk+XQsk3+IiiFmDgcPsrVIyELkM2FZKX09cC6i+bJVTFVKUlwteSStj3ow==" }, "cordova-plugin-file-opener2": { - "version": "3.0.5" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/cordova-plugin-file-opener2/-/cordova-plugin-file-opener2-3.0.5.tgz", + "integrity": "sha512-tjLHDamH5+y0bJZYVe2967L1S4R8tL4Y0rJUzJGoxsyiw3FUlrJNS199POOpzZZ6Xhlntn9a2o7+84r1dMN21A==" }, "cordova-plugin-local-notification": { - "version": "0.9.0-beta.2" + "version": "0.9.0-beta.2", + "resolved": "https://registry.npmjs.org/cordova-plugin-local-notification/-/cordova-plugin-local-notification-0.9.0-beta.2.tgz", + "integrity": "sha512-63n77K1pt8dnbWnNR8QWETi9Glezi1bvNHvHWmGNIOv0xCb0phZnm+Ku49BQ+omwe8Z5voMvrA4I03SYPpv38w==" }, "cordova-serve": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.0.tgz", + "integrity": "sha512-gzTLeBQzNP8aM/nG0/7sSfICfNazUgwvEU2kiDaybbYXmxwioo2v96h4tzE0XOyA64beyYwAyRYEEqWA4AMZjw==", "dev": true, "requires": { "chalk": "^3.0.0", @@ -24702,6 +28634,8 @@ "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" @@ -24709,6 +28643,8 @@ }, "chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -24717,17 +28653,29 @@ }, "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 }, "open": { "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "requires": { "is-docker": "^2.0.0", @@ -24736,6 +28684,8 @@ }, "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" @@ -24744,22 +28694,22 @@ } }, "core-js": { - "version": "3.24.0" + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", + "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==" }, "core-js-compat": { - "version": "3.24.0", + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", "requires": { - "browserslist": "^4.21.2", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0" - } + "browserslist": "^4.21.4" } }, "core-util-is": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cors": { "version": "2.8.5", @@ -24772,7 +28722,9 @@ } }, "cosmiconfig": { - "version": "7.0.1", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -24781,15 +28733,31 @@ "yaml": "^1.10.0" } }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.1.0" + } + }, "crc-32": { - "version": "1.2.2" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" }, "create-require": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, "critters": { "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", "requires": { "chalk": "^4.1.0", "css-select": "^4.2.0", @@ -24801,12 +28769,16 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "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==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24814,12 +28786,21 @@ }, "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==", "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==" + }, "css-select": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "requires": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -24830,6 +28811,8 @@ }, "dom-serializer": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -24838,12 +28821,16 @@ }, "domhandler": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "requires": { "domelementtype": "^2.2.0" } }, "domutils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -24851,22 +28838,32 @@ } }, "entities": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, "has-flag": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "parse5": { - "version": "6.0.1" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "parse5-htmlparser2-tree-adapter": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "requires": { "parse5": "^6.0.1" } }, "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==", "requires": { "has-flag": "^4.0.0" } @@ -24875,6 +28872,8 @@ }, "cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -24883,39 +28882,36 @@ }, "crypto-js": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", "dev": true }, "crypto-random-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, - "css": { - "version": "3.0.0", - "requires": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1" - } - } - }, "css-blank-pseudo": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", "requires": { "postcss-selector-parser": "^6.0.9" } }, "css-has-pseudo": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", "requires": { "postcss-selector-parser": "^6.0.9" } }, "css-loader": { "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", "requires": { "icss-utils": "^5.1.0", "postcss": "^8.4.7", @@ -24929,10 +28925,14 @@ }, "css-prefers-color-scheme": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", "requires": {} }, "css-select": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, "requires": { "boolbase": "^1.0.0", @@ -24944,6 +28944,8 @@ }, "css-selector-tokenizer": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -24951,23 +28953,33 @@ } }, "css-what": { - "version": "6.1.0" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" }, "cssauron": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==", "dev": true, "requires": { "through": "X.X.X" } }, "cssdb": { - "version": "6.6.3" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.1.0.tgz", + "integrity": "sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==" }, "cssesc": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "currently-unhandled": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", "dev": true, "requires": { "array-find-index": "^1.0.1" @@ -24975,6 +28987,8 @@ }, "d": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, "requires": { "es5-ext": "^0.10.50", @@ -24983,6 +28997,8 @@ }, "d3": { "version": "7.6.1", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.6.1.tgz", + "integrity": "sha512-txMTdIHFbcpLx+8a0IFhZsbp+PfBBPt8yfbmukZTQFroKuFqIwqswF0qE5JXWefylaAVpSXFoKm3yP+jpNLFLw==", "requires": { "d3-array": "3", "d3-axis": "3", @@ -25018,15 +29034,21 @@ }, "d3-array": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", + "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", "requires": { "internmap": "1 - 2" } }, "d3-axis": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" }, "d3-brush": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", "requires": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -25037,33 +29059,47 @@ }, "d3-chord": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", "requires": { "d3-path": "1 - 3" } }, "d3-collection": { - "version": "1.0.7" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" }, "d3-color": { - "version": "3.1.0" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" }, "d3-contour": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.0.tgz", + "integrity": "sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==", "requires": { "d3-array": "^3.2.0" } }, "d3-delaunay": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", + "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", "requires": { "delaunator": "5" } }, "d3-dispatch": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" }, "d3-drag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", "requires": { "d3-dispatch": "1 - 3", "d3-selection": "3" @@ -25071,6 +29107,8 @@ }, "d3-dsv": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", "requires": { "commander": "7", "iconv-lite": "0.6", @@ -25078,21 +29116,29 @@ }, "dependencies": { "commander": { - "version": "7.2.0" + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" } } }, "d3-ease": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" }, "d3-fetch": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", "requires": { "d3-dsv": "1 - 3" } }, "d3-force": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", "requires": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", @@ -25100,37 +29146,55 @@ } }, "d3-format": { - "version": "3.1.0" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" }, "d3-geo": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz", + "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==", "requires": { "d3-array": "2.5.0 - 3" } }, "d3-hierarchy": { - "version": "3.1.2" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" }, "d3-interpolate": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", "requires": { "d3-color": "1 - 3" } }, "d3-path": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", + "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==" }, "d3-polygon": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" }, "d3-quadtree": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" }, "d3-random": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" }, "d3-scale": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", "requires": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -25141,37 +29205,51 @@ }, "d3-scale-chromatic": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", "requires": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" } }, "d3-selection": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" }, "d3-shape": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz", + "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==", "requires": { "d3-path": "1 - 3" } }, "d3-time": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", "requires": { "d3-array": "2 - 3" } }, "d3-time-format": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", "requires": { "d3-time": "1 - 3" } }, "d3-timer": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" }, "d3-transition": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", "requires": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", @@ -25181,10 +29259,14 @@ } }, "d3-voronoi": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" }, "d3-zoom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", "requires": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -25195,6 +29277,8 @@ }, "dagre": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", "requires": { "graphlib": "^2.1.8", "lodash": "^4.17.15" @@ -25202,6 +29286,8 @@ }, "dagre-d3": { "version": "0.6.4", + "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", + "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", "requires": { "d3": "^5.14", "dagre": "^0.8.5", @@ -25210,10 +29296,14 @@ }, "dependencies": { "commander": { - "version": "2.20.3" + "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==" }, "d3": { "version": "5.16.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", + "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", "requires": { "d3-array": "1", "d3-axis": "1", @@ -25249,13 +29339,19 @@ } }, "d3-array": { - "version": "1.2.4" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" }, "d3-axis": { - "version": "1.0.12" + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" }, "d3-brush": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", + "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", "requires": { "d3-dispatch": "1", "d3-drag": "1", @@ -25266,25 +29362,35 @@ }, "d3-chord": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", "requires": { "d3-array": "1", "d3-path": "1" } }, "d3-color": { - "version": "1.4.1" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" }, "d3-contour": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", "requires": { "d3-array": "^1.1.1" } }, "d3-dispatch": { - "version": "1.0.6" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" }, "d3-drag": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", "requires": { "d3-dispatch": "1", "d3-selection": "1" @@ -25292,6 +29398,8 @@ }, "d3-dsv": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", + "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", "requires": { "commander": "2", "iconv-lite": "0.4", @@ -25299,16 +29407,22 @@ } }, "d3-ease": { - "version": "1.0.7" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" }, "d3-fetch": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", + "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", "requires": { "d3-dsv": "1" } }, "d3-force": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", "requires": { "d3-collection": "1", "d3-dispatch": "1", @@ -25317,37 +29431,55 @@ } }, "d3-format": { - "version": "1.4.5" + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" }, "d3-geo": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", "requires": { "d3-array": "1" } }, "d3-hierarchy": { - "version": "1.1.9" + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" }, "d3-interpolate": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", "requires": { "d3-color": "1" } }, "d3-path": { - "version": "1.0.9" + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" }, "d3-polygon": { - "version": "1.0.6" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", + "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==" }, "d3-quadtree": { - "version": "1.0.7" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" }, "d3-random": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", + "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" }, "d3-scale": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", "requires": { "d3-array": "^1.2.0", "d3-collection": "1", @@ -25359,34 +29491,48 @@ }, "d3-scale-chromatic": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", "requires": { "d3-color": "1", "d3-interpolate": "1" } }, "d3-selection": { - "version": "1.4.2" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" }, "d3-shape": { "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "requires": { "d3-path": "1" } }, "d3-time": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" }, "d3-time-format": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", "requires": { "d3-time": "1" } }, "d3-timer": { - "version": "1.0.10" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" }, "d3-transition": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", "requires": { "d3-color": "1", "d3-dispatch": "1", @@ -25398,6 +29544,8 @@ }, "d3-zoom": { "version": "1.8.3", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", "requires": { "d3-dispatch": "1", "d3-drag": "1", @@ -25408,6 +29556,8 @@ }, "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -25416,14 +29566,20 @@ }, "damerau-levenshtein": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, "dash-ast": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", "dev": true }, "dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "devOptional": true, "requires": { "assert-plus": "^1.0.0" @@ -25431,6 +29587,8 @@ }, "debounce-fn": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", + "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", "dev": true, "requires": { "mimic-fn": "^3.0.0" @@ -25438,12 +29596,16 @@ }, "debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } }, "decache": { "version": "4.6.1", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.1.tgz", + "integrity": "sha512-ohApBM8u9ygepJCjgBrEZSSxPjc0T/PJkD+uNyxXPkqudyUpdXpwJYp0VISm2WrPVzASU6DZyIi6BWdyw7uJ2Q==", "dev": true, "requires": { "callsite": "^1.0.0" @@ -25451,23 +29613,28 @@ }, "decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "devOptional": true }, - "decode-uri-component": { - "version": "0.2.0" - }, "decompress-response": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "requires": { "mimic-response": "^1.0.0" } }, "dedent": { - "version": "0.7.0" + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, "deep-equal": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dev": true, "requires": { "is-arguments": "^1.0.4", @@ -25480,33 +29647,48 @@ }, "deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "default-gateway": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "requires": { "execa": "^5.0.0" } }, "defaults": { - "version": "1.0.3", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "requires": { "clone": "^1.0.2" } }, "defer-to-connect": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, "define-lazy-prop": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "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" @@ -25514,6 +29696,8 @@ }, "del": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", "devOptional": true, "requires": { "globby": "^5.0.0", @@ -25527,6 +29711,8 @@ "dependencies": { "array-union": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "devOptional": true, "requires": { "array-uniq": "^1.0.1" @@ -25534,6 +29720,8 @@ }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "devOptional": true, "requires": { "balanced-match": "^1.0.0", @@ -25542,6 +29730,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "devOptional": true, "requires": { "fs.realpath": "^1.0.0", @@ -25554,6 +29744,8 @@ }, "globby": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", "devOptional": true, "requires": { "array-union": "^1.0.1", @@ -25566,6 +29758,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, "requires": { "brace-expansion": "^1.1.7" @@ -25573,10 +29767,14 @@ }, "pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "devOptional": true }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "devOptional": true, "requires": { "glob": "^7.1.3" @@ -25586,23 +29784,33 @@ }, "delaunator": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", "requires": { "robust-predicates": "^3.0.0" } }, "delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "devOptional": true }, "delegate": { - "version": "3.2.0" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" }, "delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "dep-graph": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz", + "integrity": "sha512-/6yUWlSH0Uevjj6HWvO86rDeFzuYfzbaKDqifTEemwfwEPyBrODTb3ox/jFzqmc2+UmgJ3IDMS88BKEBh1Nm2Q==", "dev": true, "requires": { "underscore": "1.2.1" @@ -25610,40 +29818,60 @@ "dependencies": { "underscore": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz", + "integrity": "sha512-HRhh6FYh5I5/zTt7L9MnHRA/nlSFPiwymMCXEremmzT7tHR+8CNP0FXHPaUpafAPwvAlNrvZiH91kQwoo/CqUA==", "dev": true } } }, "depd": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "dependency-graph": { - "version": "0.11.0" + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" }, "destroy": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detect-indent": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, "detect-newline": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, "detect-node": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "dfa": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", "dev": true }, "diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "dir-compare": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", + "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", "dev": true, "requires": { "buffer-equal": "1.0.0", @@ -25654,6 +29882,8 @@ "dependencies": { "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", @@ -25662,10 +29892,14 @@ }, "colors": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", "dev": true }, "commander": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", "dev": true, "requires": { "graceful-readlink": ">= 1.0.0" @@ -25673,6 +29907,8 @@ }, "minimatch": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -25682,17 +29918,21 @@ }, "dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "requires": { "path-type": "^4.0.0" } }, "dmg-builder": { - "version": "23.1.0", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz", + "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==", "dev": true, "requires": { - "app-builder-lib": "23.1.0", - "builder-util": "23.0.9", - "builder-util-runtime": "9.0.2", + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", "dmg-license": "^1.0.11", "fs-extra": "^10.0.0", "iconv-lite": "^0.6.2", @@ -25701,10 +29941,14 @@ "dependencies": { "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -25712,17 +29956,62 @@ } } }, + "dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "requires": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "optional": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "optional": true + } + } + }, "dns-equal": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "dns-packet": { "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "requires": { "@leichtgewicht/ip-codec": "^2.0.1" } }, "doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -25730,6 +30019,8 @@ }, "dom-serializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "requires": { "domelementtype": "^2.3.0", @@ -25738,10 +30029,14 @@ } }, "domelementtype": { - "version": "2.3.0" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" }, "domhandler": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, "requires": { "domelementtype": "^2.3.0" @@ -25749,13 +30044,19 @@ }, "dommatrix": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz", + "integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==", "dev": true }, "dompurify": { - "version": "2.3.8" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz", + "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==" }, "domutils": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "dev": true, "requires": { "dom-serializer": "^2.0.0", @@ -25765,10 +30066,14 @@ }, "dot": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dot/-/dot-1.1.3.tgz", + "integrity": "sha512-/nt74Rm+PcfnirXGEdhZleTwGC2LMnuKTeeTIlI82xb5loBBoXNYzr2ezCroPSMtilK8EZIfcNZwOcHN+ib1Lg==", "dev": true }, "dot-prop": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { "is-obj": "^2.0.0" @@ -25776,18 +30081,26 @@ }, "dotenv": { "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", "dev": true }, "dotenv-expand": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, "duplexer": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, "duplexer2": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, "requires": { "readable-stream": "^2.0.2" @@ -25795,10 +30108,14 @@ }, "duplexer3": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, "ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "devOptional": true, "requires": { "jsbn": "~0.1.0", @@ -25807,20 +30124,28 @@ }, "editor": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", + "integrity": "sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==", "dev": true }, "ee-first": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "ejs": { "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dev": true, "requires": { "jake": "^10.8.5" } }, "electron": { - "version": "19.0.9", + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/electron/-/electron-19.1.6.tgz", + "integrity": "sha512-bT6Mr7JbHbONpr/U7R47lwTkMUvuAyOfnoLlbDqvGocQyZCCN3JB436wtf2+r3/IpMEz3T+dHLweFDY5i2wuxw==", "dev": true, "requires": { "@electron/get": "^1.14.1", @@ -25829,31 +30154,37 @@ }, "dependencies": { "@types/node": { - "version": "16.11.45", + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", "dev": true } } }, "electron-builder": { - "version": "23.1.0", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz", + "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==", "dev": true, "requires": { "@types/yargs": "^17.0.1", - "app-builder-lib": "23.1.0", - "builder-util": "23.0.9", - "builder-util-runtime": "9.0.2", + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", "chalk": "^4.1.1", - "dmg-builder": "23.1.0", + "dmg-builder": "23.6.0", "fs-extra": "^10.0.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", "read-config-file": "6.2.0", - "update-notifier": "^5.1.0", - "yargs": "^17.0.1" + "simple-update-notifier": "^1.0.7", + "yargs": "^17.5.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" @@ -25861,6 +30192,8 @@ }, "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", @@ -25869,17 +30202,29 @@ }, "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": "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" @@ -25889,6 +30234,8 @@ }, "electron-osx-sign": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", "dev": true, "requires": { "bluebird": "^3.5.0", @@ -25901,6 +30248,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -25908,6 +30257,8 @@ }, "isbinaryfile": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", "dev": true, "requires": { "buffer-alloc": "^1.2.0" @@ -25915,17 +30266,21 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "electron-publish": { - "version": "23.0.9", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz", + "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==", "dev": true, "requires": { "@types/fs-extra": "^9.0.11", - "builder-util": "23.0.9", - "builder-util-runtime": "9.0.2", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", "chalk": "^4.1.1", "fs-extra": "^10.0.0", "lazy-val": "^1.0.5", @@ -25934,6 +30289,8 @@ "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" @@ -25941,6 +30298,8 @@ }, "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", @@ -25949,17 +30308,29 @@ }, "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": "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" @@ -25968,33 +30339,49 @@ } }, "electron-to-chromium": { - "version": "1.4.200" + "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==" }, "elementtree": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", "requires": { "sax": "1.1.4" }, "dependencies": { "sax": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==" } } }, "emoji-regex": { - "version": "8.0.0" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emoji-toolkit": { - "version": "6.6.0" + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/emoji-toolkit/-/emoji-toolkit-6.6.0.tgz", + "integrity": "sha512-pEu0kow2p1N8zCKnn/L6H0F3rWUBB3P3hVjr/O5yl1fK7N9jU4vO4G7EFapC5Y3XwZLUCY0FZbOPyTkH+4V2eQ==" }, "emojis-list": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, "encodeurl": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "encoding": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, "optional": true, "requires": { @@ -26003,6 +30390,8 @@ }, "end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" @@ -26010,6 +30399,8 @@ }, "endent": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz", + "integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==", "requires": { "dedent": "^0.7.0", "fast-json-parse": "^1.0.3", @@ -26018,25 +30409,35 @@ }, "enhanced-resolve": { "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "entities": { - "version": "4.3.1", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", "dev": true }, "env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true }, "err-code": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, "errno": { "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "optional": true, "requires": { "prr": "~1.0.1" @@ -26044,44 +30445,53 @@ }, "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==", "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.20.1", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "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-intrinsic": "^1.1.3", "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-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" } }, "es-module-lexer": { - "version": "0.9.3" + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "es-shim-unscopables": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, "requires": { "has": "^1.0.3" @@ -26089,6 +30499,8 @@ }, "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", @@ -26097,7 +30509,9 @@ } }, "es5-ext": { - "version": "0.10.61", + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, "requires": { "es6-iterator": "^2.0.3", @@ -26107,11 +30521,15 @@ }, "es6-error": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "optional": true }, "es6-iterator": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, "requires": { "d": "1", @@ -26121,6 +30539,8 @@ }, "es6-map": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", "dev": true, "requires": { "d": "1", @@ -26133,38 +30553,45 @@ }, "es6-promise": { "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "devOptional": true }, "es6-promisify": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", "devOptional": true, "requires": { "es6-promise": "^4.0.3" } }, "es6-set": { - "version": "0.1.5", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" }, "dependencies": { - "es6-symbol": { - "version": "3.1.1", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true } } }, "es6-symbol": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, "requires": { "d": "^1.0.1", @@ -26172,53 +30599,184 @@ } }, "esbuild": { - "version": "0.14.49", + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz", + "integrity": "sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg==", "optional": true, "requires": { - "esbuild-android-64": "0.14.49", - "esbuild-android-arm64": "0.14.49", - "esbuild-darwin-64": "0.14.49", - "esbuild-darwin-arm64": "0.14.49", - "esbuild-freebsd-64": "0.14.49", - "esbuild-freebsd-arm64": "0.14.49", - "esbuild-linux-32": "0.14.49", - "esbuild-linux-64": "0.14.49", - "esbuild-linux-arm": "0.14.49", - "esbuild-linux-arm64": "0.14.49", - "esbuild-linux-mips64le": "0.14.49", - "esbuild-linux-ppc64le": "0.14.49", - "esbuild-linux-riscv64": "0.14.49", - "esbuild-linux-s390x": "0.14.49", - "esbuild-netbsd-64": "0.14.49", - "esbuild-openbsd-64": "0.14.49", - "esbuild-sunos-64": "0.14.49", - "esbuild-windows-32": "0.14.49", - "esbuild-windows-64": "0.14.49", - "esbuild-windows-arm64": "0.14.49" - } + "@esbuild/linux-loong64": "0.15.5", + "esbuild-android-64": "0.15.5", + "esbuild-android-arm64": "0.15.5", + "esbuild-darwin-64": "0.15.5", + "esbuild-darwin-arm64": "0.15.5", + "esbuild-freebsd-64": "0.15.5", + "esbuild-freebsd-arm64": "0.15.5", + "esbuild-linux-32": "0.15.5", + "esbuild-linux-64": "0.15.5", + "esbuild-linux-arm": "0.15.5", + "esbuild-linux-arm64": "0.15.5", + "esbuild-linux-mips64le": "0.15.5", + "esbuild-linux-ppc64le": "0.15.5", + "esbuild-linux-riscv64": "0.15.5", + "esbuild-linux-s390x": "0.15.5", + "esbuild-netbsd-64": "0.15.5", + "esbuild-openbsd-64": "0.15.5", + "esbuild-sunos-64": "0.15.5", + "esbuild-windows-32": "0.15.5", + "esbuild-windows-64": "0.15.5", + "esbuild-windows-arm64": "0.15.5" + } + }, + "esbuild-android-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz", + "integrity": "sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg==", + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz", + "integrity": "sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg==", + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz", + "integrity": "sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ==", + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz", + "integrity": "sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg==", + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz", + "integrity": "sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA==", + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz", + "integrity": "sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w==", + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz", + "integrity": "sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ==", + "optional": true }, "esbuild-linux-64": { - "version": "0.14.49", + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz", + "integrity": "sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg==", + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz", + "integrity": "sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q==", + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz", + "integrity": "sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA==", + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz", + "integrity": "sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ==", + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz", + "integrity": "sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw==", + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz", + "integrity": "sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA==", + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz", + "integrity": "sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ==", + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz", + "integrity": "sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w==", + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz", + "integrity": "sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA==", + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz", + "integrity": "sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA==", "optional": true }, "esbuild-wasm": { - "version": "0.14.49" + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz", + "integrity": "sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A==" + }, + "esbuild-windows-32": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz", + "integrity": "sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg==", + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz", + "integrity": "sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw==", + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz", + "integrity": "sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA==", + "optional": true }, "escalade": { - "version": "3.1.1" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-goat": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true }, "escape-html": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "escodegen": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", "dev": true, "requires": { "esprima": "~1.0.4", @@ -26229,18 +30787,26 @@ "dependencies": { "esprima": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", "dev": true }, "estraverse": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", "dev": true }, "esutils": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", "dev": true }, "source-map": { "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", "dev": true, "optional": true, "requires": { @@ -26250,11 +30816,15 @@ } }, "eslint": { - "version": "8.20.0", + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -26264,18 +30834,21 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -26286,12 +30859,13 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -26302,6 +30876,8 @@ }, "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" @@ -26309,10 +30885,14 @@ }, "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "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", @@ -26321,6 +30901,8 @@ }, "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", @@ -26329,17 +30911,29 @@ }, "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 + }, "escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "eslint-scope": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -26348,10 +30942,24 @@ }, "estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { "is-glob": "^4.0.3" @@ -26359,6 +30967,8 @@ }, "globals": { "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -26366,10 +30976,14 @@ }, "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 }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -26377,17 +30991,50 @@ }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "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" + } + }, "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" } }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "supports-color": { "version": "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" @@ -26395,6 +31042,8 @@ }, "type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } @@ -26408,6 +31057,8 @@ }, "eslint-import-resolver-node": { "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, "requires": { "debug": "^3.2.7", @@ -26416,6 +31067,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -26424,61 +31077,29 @@ } }, "eslint-module-utils": { - "version": "2.7.3", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", "dev": true, "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } - }, - "find-up": { - "version": "2.1.0", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "dev": true } } }, "eslint-plugin-import": { "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -26498,6 +31119,8 @@ "dependencies": { "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", @@ -26506,6 +31129,8 @@ }, "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -26513,6 +31138,8 @@ }, "doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -26520,6 +31147,8 @@ }, "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" @@ -26527,22 +31156,24 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "eslint-plugin-jsdoc": { - "version": "39.3.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.6.tgz", - "integrity": "sha512-R6dZ4t83qPdMhIOGr7g2QII2pwCjYyKP+z0tPOfO1bbAbQyKC20Y2Rd6z1te86Lq3T7uM8bNo+VD9YFpE8HU/g==", + "version": "39.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.2.tgz", + "integrity": "sha512-dvgY/W7eUFoAIIiaWHERIMI61ZWqcz9YFjEeyTzdPlrZc3TY/3aZm5aB91NUoTLWYZmO/vFlYSuQi15tF7uE5A==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "~0.31.0", + "@es-joy/jsdoccomment": "~0.36.0", "comment-parser": "1.3.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "semver": "^7.3.7", + "semver": "^7.3.8", "spdx-expression-parse": "^3.0.1" }, "dependencies": { @@ -26551,6 +31182,24 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, @@ -26563,6 +31212,8 @@ }, "eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -26570,6 +31221,8 @@ }, "eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" @@ -26577,28 +31230,38 @@ "dependencies": { "eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, "eslint-visitor-keys": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "9.3.2", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } }, "esprima": { - "version": "4.0.1" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -26606,36 +31269,52 @@ "dependencies": { "estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { "estraverse": "^5.2.0" }, "dependencies": { "estraverse": { - "version": "5.3.0" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" } } }, "estraverse": { - "version": "4.3.0" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "estree-is-function": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", "dev": true }, "esutils": { - "version": "2.0.3" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { - "version": "1.8.1" + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "event-emitter": { "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, "requires": { "d": "1", @@ -26644,6 +31323,8 @@ }, "event-stream": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", "dev": true, "requires": { "duplexer": "^0.1.1", @@ -26656,16 +31337,24 @@ } }, "eventemitter-asyncresource": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==" }, "eventemitter3": { - "version": "4.0.7" + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "events": { - "version": "3.3.0" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -26680,14 +31369,18 @@ }, "exit": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "devOptional": true }, "express": { - "version": "4.18.1", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -26706,7 +31399,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -26720,12 +31413,16 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "finalhandler": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -26737,32 +31434,44 @@ } }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "safe-buffer": { - "version": "5.2.1" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, "ext": { - "version": "1.6.0", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, "requires": { - "type": "^2.5.0" + "type": "^2.7.2" }, "dependencies": { "type": { - "version": "2.6.0", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", "dev": true } } }, "extend": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "devOptional": true }, "external-editor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -26771,12 +31480,16 @@ "dependencies": { "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { "os-tmpdir": "~1.0.2" } @@ -26785,6 +31498,8 @@ }, "extract-zip": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", "dev": true, "requires": { "concat-stream": "^1.6.2", @@ -26795,6 +31510,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -26802,6 +31519,8 @@ }, "mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { "minimist": "^1.2.6" @@ -26809,25 +31528,40 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "extsprintf": { - "version": "1.4.1" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==" }, "fancy-log": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", "dev": true, "requires": { "color-support": "^1.1.3" } }, + "fast-clone": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz", + "integrity": "sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==" + }, "fast-deep-equal": { - "version": "3.1.3" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.11", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -26837,33 +31571,47 @@ } }, "fast-json-parse": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" }, "fast-json-stable-stringify": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "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 }, "fastparse": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true }, "fastq": { "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "requires": { "reusify": "^1.0.4" } }, "faye-websocket": { "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "requires": { "websocket-driver": ">=0.5.1" } }, "fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "requires": { "pend": "~1.2.0" @@ -26871,22 +31619,30 @@ }, "figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" } }, "file-saver": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, "filelist": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "requires": { "minimatch": "^5.0.1" @@ -26894,12 +31650,16 @@ }, "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==", "requires": { "to-regex-range": "^5.0.1" } }, "finalhandler": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", @@ -26913,6 +31673,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -26920,10 +31682,14 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "on-finished": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "requires": { "ee-first": "1.1.1" @@ -26931,6 +31697,8 @@ }, "statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true } } @@ -26946,6 +31714,8 @@ }, "find-cache-dir": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "requires": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -26954,6 +31724,8 @@ }, "find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -26961,10 +31733,14 @@ }, "findit2": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", + "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==", "dev": true }, "flat-cache": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { "flatted": "^3.1.0", @@ -26972,18 +31748,26 @@ } }, "flatted": { - "version": "3.2.6", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "follow-redirects": { - "version": "1.15.1" + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "forever-agent": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "devOptional": true }, "form-data": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -26992,23 +31776,35 @@ } }, "forwarded": { - "version": "0.2.0" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "frac": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" }, "fraction.js": { - "version": "4.2.0" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" }, "fresh": { - "version": "0.5.2" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "from": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", "dev": true }, "fs-extra": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -27017,21 +31813,37 @@ }, "fs-minipass": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "requires": { "minipass": "^3.0.0" } }, "fs-monkey": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" }, "fs.realpath": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true }, "function-bind": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "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", @@ -27040,16 +31852,16 @@ "functions-have-names": "^1.2.2" } }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, "functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, "gauge": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", @@ -27072,17 +31884,25 @@ } }, "gensync": { - "version": "1.0.0-beta.2" + "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==" }, "get-assigned-identifiers": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, "get-caller-file": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.1.2", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -27090,13 +31910,19 @@ } }, "get-package-type": { - "version": "0.1.0" + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, "get-stream": { - "version": "6.0.1" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, "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", @@ -27105,6 +31931,8 @@ }, "getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "devOptional": true, "requires": { "assert-plus": "^1.0.0" @@ -27112,6 +31940,8 @@ }, "glob": { "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -27122,15 +31952,21 @@ }, "glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { "is-glob": "^4.0.1" } }, "glob-to-regexp": { - "version": "0.4.1" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "global-agent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, "optional": true, "requires": { @@ -27143,7 +31979,9 @@ } }, "global-dirs": { - "version": "3.0.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, "requires": { "ini": "2.0.0" @@ -27151,12 +31989,16 @@ "dependencies": { "ini": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true } } }, "global-tunnel-ng": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", "dev": true, "optional": true, "requires": { @@ -27167,10 +32009,14 @@ } }, "globals": { - "version": "11.12.0" + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globalthis": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "optional": true, "requires": { @@ -27179,6 +32025,8 @@ }, "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", @@ -27237,12 +32085,16 @@ }, "good-listener": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", "requires": { "delegate": "^3.1.2" } }, "got": { "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, "requires": { "@sindresorhus/is": "^0.14.0", @@ -27260,6 +32112,8 @@ "dependencies": { "get-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { "pump": "^3.0.0" @@ -27268,14 +32122,26 @@ } }, "graceful-fs": { - "version": "4.2.10" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "graceful-readlink": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, "graphlib": { "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", "requires": { "lodash": "^4.17.15" } @@ -27287,13 +32153,19 @@ "dev": true }, "hammerjs": { - "version": "2.0.8" + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==" }, "handle-thing": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "handlebars": { "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -27305,16 +32177,22 @@ "dependencies": { "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "har-schema": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "devOptional": true }, "har-validator": { "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "devOptional": true, "requires": { "ajv": "^6.12.3", @@ -27323,6 +32201,8 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "devOptional": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -27333,18 +32213,24 @@ }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "devOptional": true } } }, "has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { "function-bind": "^1.1.1" } }, "has-ansi": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "devOptional": true, "requires": { "ansi-regex": "^2.0.0" @@ -27352,28 +32238,41 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "devOptional": true } } }, "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" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "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" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "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" @@ -27381,14 +32280,20 @@ }, "has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "has-yarn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, "hdr-histogram-js": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", "requires": { "@assemblyscript/loader": "^0.10.1", "base64-js": "^1.2.0", @@ -27396,18 +32301,26 @@ }, "dependencies": { "pako": { - "version": "1.0.11" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" } } }, "hdr-histogram-percentiles-obj": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==" }, "he": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -27415,6 +32328,8 @@ "dependencies": { "lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -27424,6 +32339,8 @@ }, "hpack.js": { "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "requires": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -27432,10 +32349,14 @@ } }, "html-entities": { - "version": "2.3.3" + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" }, "htmlparser2": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", "dev": true, "requires": { "domelementtype": "^2.3.0", @@ -27446,6 +32367,8 @@ }, "http-auth": { "version": "4.1.9", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", + "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", "dev": true, "requires": { "apache-crypt": "^1.1.2", @@ -27455,18 +32378,26 @@ } }, "http-auth-connect": { - "version": "1.0.5", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", + "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", "dev": true }, "http-cache-semantics": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "http-deceiver": { - "version": "1.2.7" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, "http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { "depd": "2.0.0", "inherits": "2.0.4", @@ -27476,10 +32407,14 @@ } }, "http-parser-js": { - "version": "0.5.8" + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, "http-proxy": { "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "requires": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -27488,6 +32423,8 @@ }, "http-proxy-agent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "requires": { "@tootallnate/once": "2", @@ -27497,6 +32434,8 @@ }, "http-proxy-middleware": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "requires": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -27507,6 +32446,8 @@ }, "http-signature": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "devOptional": true, "requires": { "assert-plus": "^1.0.0", @@ -27516,46 +32457,75 @@ }, "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==", "requires": { "agent-base": "6", "debug": "4" } }, "human-signals": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, "humanize-ms": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "requires": { "ms": "^2.0.0" } }, "i18next": { - "version": "21.8.14", + "version": "21.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.10.0.tgz", + "integrity": "sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==", "dev": true, "requires": { "@babel/runtime": "^7.17.2" } }, + "iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "requires": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + } + }, "iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "icss-utils": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "requires": {} }, "ieee754": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.0" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "ignore-walk": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, "requires": { "minimatch": "^5.0.1" @@ -27563,56 +32533,82 @@ }, "image-size": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "optional": true }, "immediate": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", "devOptional": true }, "immutable": { - "version": "4.1.0" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" }, "import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, "dependencies": { "resolve-from": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" } } }, "import-lazy": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true }, "imurmurhash": { - "version": "0.1.4" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "indent-string": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "infer-owner": { - "version": "1.0.4" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", + "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", "dev": true }, "init-package-json": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", + "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", "dev": true, "requires": { "npm-package-arg": "^8.1.5", @@ -27626,6 +32622,8 @@ "dependencies": { "npm-package-arg": { "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", @@ -27637,6 +32635,8 @@ }, "inquirer": { "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -27657,12 +32657,16 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "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==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -27670,15 +32674,26 @@ }, "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==", "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==" + }, "has-flag": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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==", "requires": { "has-flag": "^4.0.0" } @@ -27687,10 +32702,14 @@ }, "inside": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", + "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", "dev": true }, "insight": { "version": "0.11.1", + "resolved": "https://registry.npmjs.org/insight/-/insight-0.11.1.tgz", + "integrity": "sha512-TBcZ0qC9dgdmcxL93OoqkY/RZXJtIi0i07phX/QyYk2ysmJtZex59dgTj4Doq50N9CG9dLRe/RIudc/5CCoFNw==", "dev": true, "requires": { "async": "^2.6.2", @@ -27706,14 +32725,20 @@ "dependencies": { "ansi-escapes": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true }, "ansi-regex": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true }, "ansi-styles": { "version": "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" @@ -27721,6 +32746,8 @@ }, "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", @@ -27729,6 +32756,8 @@ }, "cli-cursor": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, "requires": { "restore-cursor": "^2.0.0" @@ -27736,17 +32765,29 @@ }, "cli-width": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "figures": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -27754,10 +32795,14 @@ }, "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 }, "inquirer": { "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -27777,6 +32822,8 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -27784,6 +32831,8 @@ }, "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", @@ -27793,6 +32842,8 @@ }, "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" @@ -27800,14 +32851,20 @@ }, "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 }, "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 }, "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" @@ -27817,18 +32874,26 @@ }, "is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true }, "mimic-fn": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "mute-stream": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", "dev": true }, "onetime": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dev": true, "requires": { "mimic-fn": "^1.0.0" @@ -27836,6 +32901,8 @@ }, "restore-cursor": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, "requires": { "onetime": "^2.0.0", @@ -27844,6 +32911,8 @@ }, "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -27851,6 +32920,8 @@ }, "string-width": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -27859,10 +32930,14 @@ "dependencies": { "ansi-regex": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "strip-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "requires": { "ansi-regex": "^3.0.0" @@ -27872,6 +32947,8 @@ }, "strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" @@ -27879,6 +32956,8 @@ }, "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" @@ -27886,12 +32965,16 @@ }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "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", @@ -27900,17 +32983,25 @@ } }, "internmap": { - "version": "2.0.3" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" }, "ip": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "ipaddr.js": { - "version": "1.9.1" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -27918,10 +33009,14 @@ } }, "is-arrayish": { - "version": "0.2.1" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "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" @@ -27929,12 +33024,16 @@ }, "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==", "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", @@ -27942,46 +33041,64 @@ } }, "is-callable": { - "version": "1.2.4", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "requires": { "ci-info": "^3.2.0" } }, "is-core-module": { - "version": "2.9.0", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "requires": { "has": "^1.0.3" } }, "is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-docker": { - "version": "2.2.1" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-extglob": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { - "version": "3.0.0" + "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==" }, "is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } }, "is-installed-globally": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "requires": { "global-dirs": "^3.0.0", @@ -27989,25 +33106,37 @@ } }, "is-interactive": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, "is-lambda": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, "is-negative-zero": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-npm": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true }, "is-number": { - "version": "7.0.0" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "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" @@ -28015,14 +33144,20 @@ }, "is-obj": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, "is-path-cwd": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", "devOptional": true }, "is-path-in-cwd": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "devOptional": true, "requires": { "is-path-inside": "^1.0.0" @@ -28030,6 +33165,8 @@ "dependencies": { "is-path-inside": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", "devOptional": true, "requires": { "path-is-inside": "^1.0.1" @@ -28038,24 +33175,34 @@ } }, "is-path-inside": { - "version": "3.0.3" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-plain-obj": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" }, "is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "^3.0.1" }, "dependencies": { "isobject": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" } } }, "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", @@ -28064,16 +33211,22 @@ }, "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" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "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" @@ -28081,6 +33234,8 @@ }, "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" @@ -28088,54 +33243,80 @@ }, "is-typedarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "devOptional": true }, "is-unicode-supported": { - "version": "0.1.0" + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, "is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { "call-bind": "^1.0.2" } }, "is-what": { - "version": "3.14.1" + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, "is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "requires": { "is-docker": "^2.0.0" } }, "is-yarn-global": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", "dev": true }, "isarray": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "isbinaryfile": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true }, "isexe": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", "dev": true }, "isstream": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "devOptional": true }, "istanbul-lib-coverage": { - "version": "3.2.0" + "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==" }, "istanbul-lib-instrument": { - "version": "5.2.0", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "requires": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -28145,12 +33326,16 @@ }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "jake": { "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, "requires": { "async": "^3.2.3", @@ -28161,6 +33346,8 @@ "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" @@ -28168,10 +33355,14 @@ }, "async": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "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", @@ -28180,6 +33371,8 @@ }, "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", @@ -28188,17 +33381,29 @@ }, "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 }, "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" @@ -28206,6 +33411,8 @@ }, "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" @@ -28253,13 +33460,13 @@ } }, "jasmine": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.3.0.tgz", - "integrity": "sha512-ieBmwkd8L1DXnvSnxx7tecXgA0JDgMXPAwBcqM4lLPedJeI9hTHuWifPynTC+dLe4Y+GkSPSlbqqrmYIgGzYUw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.5.0.tgz", + "integrity": "sha512-9olGRvNZyADIwYL9XBNBst5BTU/YaePzuddK+YRslc7rI9MdTIE4r3xaBKbv2GEmzYYUfMOdTR8/i6JfLZaxSQ==", "dev": true, "requires": { "glob": "^7.1.6", - "jasmine-core": "^4.3.0" + "jasmine-core": "^4.5.0" }, "dependencies": { "brace-expansion": { @@ -28287,9 +33494,9 @@ } }, "jasmine-core": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.3.0.tgz", - "integrity": "sha512-qybtBUesniQdW6n+QIHMng2vDOHscIC/dEXjW+JzO9+LoAZMb03RCUC5xFOv/btSKPm1xL42fn+RjlU4oB42Lg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz", + "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==", "dev": true }, "minimatch": { @@ -28305,6 +33512,8 @@ }, "jasmine-core": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.2.0.tgz", + "integrity": "sha512-OcFpBrIhnbmb9wfI8cqPSJ50pv3Wg4/NSgoZIqHzIwO/2a9qivJWzv8hUvaREIMYYJBas6AvfXATFdVuzzCqVw==", "dev": true }, "jasmine-growl-reporter": { @@ -28365,6 +33574,8 @@ }, "jasmine-spec-reporter": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", + "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", "dev": true, "requires": { "colors": "1.4.0" @@ -28381,10 +33592,14 @@ }, "jasminewd2": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", "devOptional": true }, "jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -28392,21 +33607,35 @@ }, "dependencies": { "has-flag": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "requires": { "has-flag": "^4.0.0" } } } }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "js-tokens": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -28414,6 +33643,8 @@ }, "jsbn": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "devOptional": true }, "jsdoc-type-pratt-parser": { @@ -28423,42 +33654,64 @@ "dev": true }, "jsesc": { - "version": "2.5.2" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-buffer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, "json-parse-even-better-errors": { - "version": "2.3.1" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "devOptional": true }, "json-schema-traverse": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "json-schema-typed": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", + "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json-stringify-safe": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "devOptional": true }, "json5": { - "version": "2.2.1" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, "jsonc-parser": { - "version": "3.1.0" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==" }, "jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -28466,10 +33719,14 @@ }, "jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, "jsprim": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "devOptional": true, "requires": { "assert-plus": "1.0.0", @@ -28480,14 +33737,20 @@ "dependencies": { "core-util-is": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "devOptional": true }, "extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "devOptional": true }, "verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "devOptional": true, "requires": { "assert-plus": "^1.0.0", @@ -28498,7 +33761,9 @@ } }, "jszip": { - "version": "3.10.0", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "devOptional": true, "requires": { "lie": "~3.3.0", @@ -28509,45 +33774,63 @@ "dependencies": { "pako": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "devOptional": true } } }, "karma-source-map-support": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", "requires": { "source-map-support": "^0.5.5" } }, "katex": { - "version": "0.16.0", + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.3.tgz", + "integrity": "sha512-3EykQddareoRmbtNiNEDgl3IGjryyrp2eg/25fHDEnlHymIDi33bptkMv6K4EOC2LZCybLW/ZkEo6Le+EM9pmA==", "requires": { "commander": "^8.0.0" }, "dependencies": { "commander": { - "version": "8.3.0" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" } } }, "keyv": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dev": true, "requires": { "json-buffer": "3.0.0" } }, "khroma": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" }, "kind-of": { - "version": "6.0.3" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "klona": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" }, "latest-version": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dev": true, "requires": { "package-json": "^6.3.0" @@ -28555,10 +33838,14 @@ }, "lazy-val": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "dev": true }, "less": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", "requires": { "copy-anything": "^2.0.1", "errno": "^0.1.1", @@ -28574,6 +33861,8 @@ "dependencies": { "make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "optional": true, "requires": { "pify": "^4.0.1", @@ -28582,30 +33871,42 @@ }, "mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "optional": true }, "pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "optional": true }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "optional": true }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true } } }, "less-loader": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.0.0.tgz", + "integrity": "sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw==", "requires": { "klona": "^2.0.4" } }, "levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { "prelude-ls": "^1.2.1", @@ -28614,34 +33915,48 @@ }, "license-webpack-plugin": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", "requires": { "webpack-sources": "^3.0.0" } }, "lie": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "devOptional": true, "requires": { "immediate": "~3.0.5" } }, "lines-and-columns": { - "version": "1.2.4" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "loader-runner": { - "version": "4.3.0" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" }, "loader-utils": { - "version": "3.2.0" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==" }, "locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.21" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash-es": { "version": "4.17.21", @@ -28649,14 +33964,20 @@ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "lodash.debounce": { - "version": "4.0.8" + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -28664,12 +33985,16 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "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==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28677,15 +34002,26 @@ }, "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==", "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==" + }, "has-flag": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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==", "requires": { "has-flag": "^4.0.0" } @@ -28693,15 +34029,21 @@ } }, "loglevel": { - "version": "1.8.0", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", "dev": true }, "loglevel-plugin-prefix": { "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", "dev": true }, "loud-rejection": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", + "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", "dev": true, "requires": { "currently-unhandled": "^0.4.1", @@ -28710,42 +34052,60 @@ }, "lowercase-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, "lru-cache": { - "version": "7.13.1" + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==" }, "lunr": { "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, "macos-release": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", "dev": true }, "magic-string": { "version": "0.26.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", + "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", "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==", "requires": { "semver": "^6.0.0" }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "make-error": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "make-fetch-happen": { - "version": "10.2.0", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "requires": { "agentkeepalive": "^4.2.1", @@ -28768,13 +34128,19 @@ }, "map-stream": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", "dev": true }, "marked": { - "version": "4.0.18" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", + "integrity": "sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==" }, "matcher": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, "optional": true, "requires": { @@ -28783,35 +34149,51 @@ "dependencies": { "escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "optional": true } } }, "material-design-icons": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/material-design-icons/-/material-design-icons-3.0.1.tgz", + "integrity": "sha512-t19Z+QZBwSZulxptEu05kIm+UyfIdJY1JDwI+nx02j269m6W414whiQz9qfvQIiLrdx71RQv+T48nHhuQXOCIQ==" }, "mathjax": { - "version": "3.2.2" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz", + "integrity": "sha512-Bt+SSVU8eBG27zChVewOicYs7Xsdt40qm4+UpHyX7k0/O9NliPc+x77k1/FEsPsjKPZGJvtRZM1vO+geW0OhGw==" }, "md5-file": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz", + "integrity": "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==", "dev": true }, "media-typer": { - "version": "0.3.0" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "memfs": { - "version": "3.4.7", + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.11.tgz", + "integrity": "sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w==", "requires": { "fs-monkey": "^1.0.3" } }, "merge-descriptors": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "merge-source-map": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", "dev": true, "requires": { "source-map": "^0.5.6" @@ -28819,35 +34201,58 @@ "dependencies": { "source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true } } }, "merge-stream": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { - "version": "1.4.1" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "mermaid": { - "version": "9.1.3", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.2.2.tgz", + "integrity": "sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==", "requires": { "@braintree/sanitize-url": "^6.0.0", "d3": "^7.0.0", "dagre": "^0.8.5", "dagre-d3": "^0.6.4", - "dompurify": "2.3.8", + "dompurify": "2.4.0", + "fast-clone": "^1.5.13", "graphlib": "^2.1.8", "khroma": "^2.0.0", + "lodash": "^4.17.21", "moment-mini": "^2.24.0", - "stylis": "^4.0.10" + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.2", + "uuid": "^9.0.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + } } }, "methods": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -28855,33 +34260,47 @@ }, "mime": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "mime-db": { - "version": "1.52.0" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "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==", "requires": { "mime-db": "1.52.0" } }, "mimic-fn": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", "dev": true }, "mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, "mini-css-extract-plugin": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", "requires": { "schema-utils": "^4.0.0" }, "dependencies": { "schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -28892,32 +34311,44 @@ } }, "minimalistic-assert": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimatch": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "requires": { "brace-expansion": "^2.0.1" } }, "minimist": { - "version": "1.2.6", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "devOptional": true }, "minipass": { "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "requires": { "yallist": "^4.0.0" } }, "minipass-collect": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "requires": { "minipass": "^3.0.0" } }, "minipass-fetch": { - "version": "2.1.0", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, "requires": { "encoding": "^0.1.13", @@ -28928,12 +34359,16 @@ }, "minipass-flush": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "requires": { "minipass": "^3.0.0" } }, "minipass-json-stream": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, "requires": { "jsonparse": "^1.3.1", @@ -28942,12 +34377,16 @@ }, "minipass-pipeline": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "requires": { "minipass": "^3.0.0" } }, "minipass-sized": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -28955,19 +34394,27 @@ }, "minizlib": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "mkdirp": { - "version": "1.0.4" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "moment-mini": { - "version": "2.24.0" + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", + "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==" }, "morgan": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", "dev": true, "requires": { "basic-auth": "~2.0.1", @@ -28979,6 +34426,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -28986,10 +34435,14 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "on-finished": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "requires": { "ee-first": "1.1.1" @@ -28998,30 +34451,50 @@ } }, "mousetrap": { - "version": "1.6.5" + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", + "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==" }, "ms": { - "version": "2.1.2" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multicast-dns": { "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "requires": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" } }, "mute-stream": { - "version": "0.0.8" + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nanoid": { - "version": "3.3.4" + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, "needle": { - "version": "3.1.0", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", "optional": true, "requires": { "debug": "^3.2.6", @@ -29031,6 +34504,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "optional": true, "requires": { "ms": "^2.1.1" @@ -29039,19 +34514,25 @@ } }, "negotiator": { - "version": "0.6.3" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { - "version": "2.6.2" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "next-tick": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true }, "ng2-charts": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.0.0.tgz", - "integrity": "sha512-1COLMs1UH8XIurk9C3pBQW3zH4RM3ggPtaC5vGjEmRGZ2cK/j8DqpzN4xMqyk0KB4D2vw/ZejgXmxxZ4Ie58Rw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.0.1.tgz", + "integrity": "sha512-QYXVZHP/RIRhAw36xeXPL6JZz73fXuHePTyGwBiOfIRGCG7EDYLApnSgEn+Mx+QFKYT1VN9Fsj5b04rrd2nrEw==", "requires": { "lodash-es": "^4.17.15", "tslib": "^2.3.0" @@ -29059,6 +34540,8 @@ }, "ngx-markdown": { "version": "14.0.1", + "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-14.0.1.tgz", + "integrity": "sha512-y5CY4e0QM0uR6+MvU1rnh1Ks+rku14309kVVojyXLcWl4zlrt8VAYCcf/+A+8z/IDOaz38yTrxNBnvYDJzNzYA==", "requires": { "@types/marked": "^4.0.3", "clipboard": "^2.0.11", @@ -29072,18 +34555,24 @@ }, "ngx-material-file-input": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ngx-material-file-input/-/ngx-material-file-input-4.0.0.tgz", + "integrity": "sha512-N0lpuwO1Td3VUR/KnylVi0EObJ2f9s/3jvOUyIGWvy25l4fQOs8zl6cf+OqXIoYLsOHBnC2vVRNugbEuT9CaDQ==", "requires": { "tslib": "^2.3.0" } }, "ngx-webstorage-service": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ngx-webstorage-service/-/ngx-webstorage-service-5.0.0.tgz", + "integrity": "sha512-adipYzdVGA1HxPF5n62eJoQGohiJRlpCp7lPuNQcOvkHGfFUByAfXZHmmLFzb5OFfeNWh1XZ8M2qppbC5uNXFQ==", "requires": { "tslib": "^2.3.0" } }, "nice-napi": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", "optional": true, "requires": { "node-addon-api": "^3.0.0", @@ -29092,22 +34581,35 @@ "dependencies": { "node-addon-api": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "optional": true } } }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + }, "node-forge": { - "version": "1.3.1" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "node-gyp": { - "version": "9.1.0", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", + "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", + "nopt": "^6.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", @@ -29117,6 +34619,8 @@ "dependencies": { "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", @@ -29125,6 +34629,8 @@ }, "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", @@ -29137,28 +34643,52 @@ }, "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" } + }, + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } } } }, "node-gyp-build": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", "optional": true }, "node-releases": { - "version": "2.0.6" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, "nopt": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { "abbrev": "1" } }, "normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", @@ -29168,17 +34698,25 @@ } }, "normalize-path": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-range": { - "version": "0.1.2" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" }, "normalize-url": { "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, "npm-bundled": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, "requires": { "npm-normalize-package-bin": "^1.0.1" @@ -29186,6 +34724,8 @@ }, "npm-conf": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", "dev": true, "optional": true, "requires": { @@ -29195,6 +34735,8 @@ "dependencies": { "pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "optional": true } @@ -29202,6 +34744,8 @@ }, "npm-install-checks": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", "dev": true, "requires": { "semver": "^7.1.1" @@ -29209,10 +34753,14 @@ }, "npm-normalize-package-bin": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true }, "npm-package-arg": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", "dev": true, "requires": { "hosted-git-info": "^5.0.0", @@ -29223,13 +34771,17 @@ "dependencies": { "builtins": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "requires": { "semver": "^7.0.0" } }, "hosted-git-info": { - "version": "5.0.0", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "requires": { "lru-cache": "^7.5.1" @@ -29237,6 +34789,8 @@ }, "validate-npm-package-name": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "requires": { "builtins": "^5.0.0" @@ -29245,17 +34799,38 @@ } }, "npm-packlist": { - "version": "5.1.1", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", + "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", "dev": true, "requires": { "glob": "^8.0.1", "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-bundled": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", + "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^2.0.0" + } + }, + "npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true + } } }, "npm-pick-manifest": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", + "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", "dev": true, "requires": { "npm-install-checks": "^5.0.0", @@ -29265,7 +34840,9 @@ } }, "npm-registry-fetch": { - "version": "13.3.0", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", + "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", "dev": true, "requires": { "make-fetch-happen": "^10.0.6", @@ -29279,12 +34856,16 @@ }, "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==", "requires": { "path-key": "^3.0.0" } }, "npmlog": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "requires": { "are-we-there-yet": "^3.0.0", @@ -29295,16 +34876,22 @@ }, "nth-check": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "requires": { "boolbase": "^1.0.0" } }, "number-is-nan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true }, "oauth-sign": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "devOptional": true }, "object-assign": { @@ -29314,10 +34901,14 @@ "devOptional": true }, "object-inspect": { - "version": "1.12.2" + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" }, "object-is": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -29325,60 +34916,84 @@ } }, "object-keys": { - "version": "1.1.1" + "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", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "object.values": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "objectorarray": { - "version": "1.0.5" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==" }, "obuf": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } }, "on-headers": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, "once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } }, "onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { "mimic-fn": "^2.1.0" }, "dependencies": { "mimic-fn": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" } } }, "open": { "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "requires": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -29387,10 +35002,14 @@ }, "opencollective-postinstall": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", "dev": true }, "optionator": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { "deep-is": "^0.1.3", @@ -29403,6 +35022,8 @@ }, "ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "requires": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -29417,12 +35038,16 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "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==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -29430,15 +35055,26 @@ }, "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==", "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==" + }, "has-flag": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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==", "requires": { "has-flag": "^4.0.0" } @@ -29447,6 +35083,8 @@ }, "os-name": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", "dev": true, "requires": { "macos-release": "^2.5.0", @@ -29454,50 +35092,70 @@ } }, "os-tmpdir": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "p-cancelable": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, "p-finally": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" }, "p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { "p-limit": "^2.2.0" } }, "p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "requires": { "aggregate-error": "^3.0.0" } }, "p-retry": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "requires": { "@types/retry": "0.12.0", "retry": "^0.13.1" }, "dependencies": { "retry": { - "version": "0.13.1" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" } } }, "p-try": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "package-json": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dev": true, "requires": { "got": "^9.6.0", @@ -29508,12 +35166,16 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "pacote": { - "version": "13.6.1", + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", + "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", "dev": true, "requires": { "@npmcli/git": "^3.0.0", @@ -29540,14 +35202,18 @@ }, "dependencies": { "hosted-git-info": { - "version": "5.0.0", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "requires": { "lru-cache": "^7.5.1" } }, "normalize-package-data": { - "version": "4.0.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", "dev": true, "requires": { "hosted-git-info": "^5.0.0", @@ -29556,29 +35222,43 @@ "validate-npm-package-license": "^3.0.4" } }, + "npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true + }, "read-package-json": { - "version": "5.0.1", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", + "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", "dev": true, "requires": { "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^2.0.0" } } } }, "pako": { - "version": "2.0.4" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" }, "parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "requires": { "callsites": "^3.0.0" } }, "parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -29587,26 +35267,36 @@ } }, "parse-node-version": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" }, "parse5": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "optional": true }, "parse5-html-rewriting-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", "requires": { "parse5": "^6.0.1", "parse5-sax-parser": "^6.0.1" }, "dependencies": { "parse5": { - "version": "6.0.1" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" } } }, "parse5-htmlparser2-tree-adapter": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dev": true, "requires": { "domhandler": "^5.0.2", @@ -29614,71 +35304,101 @@ }, "dependencies": { "parse5": { - "version": "7.0.0", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", "dev": true, "requires": { - "entities": "^4.3.0" + "entities": "^4.4.0" } } } }, "parse5-sax-parser": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", "requires": { "parse5": "^6.0.1" }, "dependencies": { "parse5": { - "version": "6.0.1" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" } } }, "parseurl": { - "version": "1.3.3" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "path-browserify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, "path-exists": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-is-inside": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", "devOptional": true }, "path-key": { - "version": "3.1.1" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { - "version": "1.0.7" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { - "version": "0.1.7" + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "path-type": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pause-stream": { "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, "requires": { "through": "~2.3" } }, "pdfjs-dist": { - "version": "2.14.305", + "version": "2.16.105", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.16.105.tgz", + "integrity": "sha512-J4dn41spsAwUxCpEoVf6GVoz908IAA3mYiLmNxg8J9kfRXc2jxpbUepcP0ocp0alVNLFthTAM8DZ1RaHh8sU0A==", "dev": true, "requires": { - "dommatrix": "^1.0.1", + "dommatrix": "^1.0.3", "web-streams-polyfill": "^3.2.1" } }, "pdfmake": { - "version": "0.2.5", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.6.tgz", + "integrity": "sha512-gZARnKLJjTuHWKIkqF4G6dafIaPfH7NFqBz9U9wb26PV5koHQ5eeQ/0rgZmIdfJzMKqHzXB9aK25ykG2AnnzEQ==", "dev": true, "requires": { "@foliojs-fork/linebreak": "^1.1.1", @@ -29689,28 +35409,42 @@ }, "pend": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, "performance-now": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "devOptional": true }, "picocolors": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { - "version": "2.3.1" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pify": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true }, "pinkie": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "devOptional": true }, "pinkie-promise": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "devOptional": true, "requires": { "pinkie": "^2.0.0" @@ -29718,6 +35452,8 @@ }, "piscina": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", "requires": { "eventemitter-asyncresource": "^1.0.0", "hdr-histogram-js": "^2.0.1", @@ -29727,12 +35463,16 @@ }, "pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "requires": { "find-up": "^4.0.0" } }, "pkg-up": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dev": true, "requires": { "find-up": "^3.0.0" @@ -29740,6 +35480,8 @@ "dependencies": { "find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" @@ -29747,6 +35489,8 @@ }, "locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", @@ -29755,6 +35499,8 @@ }, "p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" @@ -29762,12 +35508,16 @@ }, "path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true } } }, "plist": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", + "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", "requires": { "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" @@ -29775,10 +35525,14 @@ }, "png-js": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", "dev": true }, "postcss": { - "version": "8.4.14", + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -29787,60 +35541,80 @@ }, "postcss-attribute-case-insensitive": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", "requires": { "postcss-selector-parser": "^6.0.10" } }, "postcss-clamp": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-color-functional-notation": { "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-color-hex-alpha": { "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-color-rebeccapurple": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-custom-media": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-custom-properties": { - "version": "12.1.8", + "version": "12.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz", + "integrity": "sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-custom-selectors": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", "requires": { "postcss-selector-parser": "^6.0.4" } }, "postcss-dir-pseudo-class": { "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", "requires": { "postcss-selector-parser": "^6.0.10" } }, "postcss-double-position-gradients": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -29848,38 +35622,52 @@ }, "postcss-env-function": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-focus-visible": { "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", "requires": { "postcss-selector-parser": "^6.0.9" } }, "postcss-focus-within": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", "requires": { "postcss-selector-parser": "^6.0.9" } }, "postcss-font-variant": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", "requires": {} }, "postcss-gap-properties": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", "requires": {} }, "postcss-image-set-function": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-import": { - "version": "14.1.0", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz", + "integrity": "sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg==", "requires": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -29888,10 +35676,14 @@ }, "postcss-initial": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", "requires": {} }, "postcss-lab-function": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -29899,6 +35691,8 @@ }, "postcss-loader": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", + "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", "requires": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", @@ -29907,18 +35701,26 @@ }, "postcss-logical": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", "requires": {} }, "postcss-media-minmax": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", "requires": {} }, "postcss-modules-extract-imports": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "requires": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -29927,160 +35729,210 @@ }, "postcss-modules-scope": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "requires": { "postcss-selector-parser": "^6.0.4" } }, "postcss-modules-values": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "requires": { "icss-utils": "^5.0.0" } }, "postcss-nesting": { - "version": "10.1.10", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", "requires": { "@csstools/selector-specificity": "^2.0.0", "postcss-selector-parser": "^6.0.10" } }, "postcss-opacity-percentage": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==" }, "postcss-overflow-shorthand": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-page-break": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", "requires": {} }, "postcss-place": { "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-preset-env": { - "version": "7.7.2", - "requires": { - "@csstools/postcss-cascade-layers": "^1.0.4", - "@csstools/postcss-color-function": "^1.1.0", - "@csstools/postcss-font-format-keywords": "^1.0.0", - "@csstools/postcss-hwb-function": "^1.0.1", - "@csstools/postcss-ic-unit": "^1.0.0", - "@csstools/postcss-is-pseudo-class": "^2.0.6", - "@csstools/postcss-normalize-display-values": "^1.0.0", - "@csstools/postcss-oklab-function": "^1.1.0", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz", + "integrity": "sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA==", + "requires": { + "@csstools/postcss-cascade-layers": "^1.0.5", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.1", - "@csstools/postcss-unset-value": "^1.0.1", - "autoprefixer": "^10.4.7", - "browserslist": "^4.21.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.8", + "browserslist": "^4.21.3", "css-blank-pseudo": "^3.0.3", "css-has-pseudo": "^3.0.4", "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^6.6.3", - "postcss-attribute-case-insensitive": "^5.0.1", + "cssdb": "^7.0.0", + "postcss-attribute-case-insensitive": "^5.0.2", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.3", + "postcss-color-functional-notation": "^4.2.4", "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.0", + "postcss-color-rebeccapurple": "^7.1.1", "postcss-custom-media": "^8.0.2", "postcss-custom-properties": "^12.1.8", "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.4", - "postcss-double-position-gradients": "^3.1.1", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", "postcss-env-function": "^4.0.6", "postcss-focus-visible": "^6.0.4", "postcss-focus-within": "^5.0.4", "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.3", - "postcss-image-set-function": "^4.0.6", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.0", + "postcss-lab-function": "^4.2.1", "postcss-logical": "^5.0.4", "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.9", + "postcss-nesting": "^10.1.10", "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.3", + "postcss-overflow-shorthand": "^3.0.4", "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.4", - "postcss-pseudo-class-any-link": "^7.1.5", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.0", + "postcss-selector-not": "^6.0.1", "postcss-value-parser": "^4.2.0" } }, "postcss-pseudo-class-any-link": { "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", "requires": { "postcss-selector-parser": "^6.0.10" } }, "postcss-replace-overflow-wrap": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", "requires": {} }, "postcss-selector-not": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", "requires": { "postcss-selector-parser": "^6.0.10" } }, "postcss-selector-parser": { "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "postcss-value-parser": { - "version": "4.2.0" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prepend-http": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true }, "pretty-bytes": { - "version": "5.6.0" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" }, "primeicons": { - "version": "5.0.0", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", + "integrity": "sha512-KDeO94CbWI4pKsPnYpA1FPjo79EsY9I+M8ywoPBSf9XMXoe/0crjbUK7jcQEDHuc0ZMRIZsxH3TYLv4TUtHmAA==", "peer": true }, "primeng": { - "version": "14.0.0", + "version": "14.2.2", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-14.2.2.tgz", + "integrity": "sha512-CV7dWwpBYqMgKliryJ6+CJZgdawl04V1Cp5mQmziEedJVhMGPg/QwU2Fi0v7AS9i1uXQRI9c420BDn+yZ+GrDQ==", "requires": { "tslib": "^2.3.0" } }, "prismjs": { - "version": "1.28.0" + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" }, "proc-log": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true }, "process-nextick-args": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "promise-inflight": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" }, "promise-retry": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "requires": { "err-code": "^2.0.2", @@ -30089,6 +35941,8 @@ }, "promzard": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", "dev": true, "requires": { "read": "1" @@ -30096,17 +35950,23 @@ }, "properties-parser": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz", + "integrity": "sha512-AkSQxQAviJ89x4FIxOyHGfO3uund0gvYo7lfD0E+Gp7gFQKrTNgtoYQklu8EhrfHVZUzTwKGZx2r/KDSfnljcA==", "requires": { "string.prototype.codepointat": "^0.2.0" } }, "proto-list": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true, "optional": true }, "protractor": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", + "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", "devOptional": true, "requires": { "@types/q": "^0.0.32", @@ -30128,14 +35988,20 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "devOptional": true }, "ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "devOptional": true }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "devOptional": true, "requires": { "balanced-match": "^1.0.0", @@ -30144,6 +36010,8 @@ }, "chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "devOptional": true, "requires": { "ansi-styles": "^2.2.1", @@ -30155,6 +36023,8 @@ }, "cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "devOptional": true, "requires": { "string-width": "^4.2.0", @@ -30164,10 +36034,14 @@ "dependencies": { "ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "devOptional": true }, "strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "devOptional": true, "requires": { "ansi-regex": "^5.0.1" @@ -30177,13 +36051,23 @@ }, "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==", "devOptional": 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==", + "devOptional": true + }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "devOptional": true, "requires": { "fs.realpath": "^1.0.0", @@ -30196,6 +36080,8 @@ }, "jasmine": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==", "devOptional": true, "requires": { "exit": "^0.1.2", @@ -30205,10 +36091,14 @@ }, "jasmine-core": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==", "devOptional": true }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, "requires": { "brace-expansion": "^1.1.7" @@ -30216,14 +36106,20 @@ }, "q": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==", "devOptional": true }, "source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "devOptional": true }, "source-map-support": { "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "devOptional": true, "requires": { "source-map": "^0.5.6" @@ -30231,6 +36127,8 @@ }, "strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "devOptional": true, "requires": { "ansi-regex": "^2.0.0" @@ -30238,10 +36136,14 @@ }, "supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "devOptional": true }, "wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "devOptional": true, "requires": { "ansi-styles": "^4.0.0", @@ -30251,10 +36153,14 @@ "dependencies": { "ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "devOptional": true }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "devOptional": true, "requires": { "color-convert": "^2.0.1" @@ -30262,6 +36168,8 @@ }, "strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "devOptional": true, "requires": { "ansi-regex": "^5.0.1" @@ -30271,10 +36179,14 @@ }, "y18n": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "devOptional": true }, "yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "devOptional": true, "requires": { "cliui": "^6.0.0", @@ -30292,6 +36204,8 @@ }, "yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "devOptional": true, "requires": { "camelcase": "^5.0.0", @@ -30302,6 +36216,8 @@ }, "proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -30315,14 +36231,20 @@ }, "prr": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "optional": true }, "psl": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "devOptional": true }, "pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -30330,29 +36252,47 @@ } }, "punycode": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "pupa": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dev": true, "requires": { "escape-goat": "^2.0.0" } }, "q": { - "version": "1.5.1" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" }, "qs": { - "version": "6.10.3", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "requires": { "side-channel": "^1.0.4" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "queue-microtask": { - "version": "1.2.3" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "quote-stream": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", "dev": true, "requires": { "buffer-equal": "0.0.1", @@ -30362,21 +36302,29 @@ "dependencies": { "buffer-equal": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", "dev": true } } }, "randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { "safe-buffer": "^5.1.0" } }, "range-parser": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -30385,10 +36333,14 @@ }, "dependencies": { "bytes": { - "version": "3.1.2" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -30397,6 +36349,8 @@ }, "rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { "deep-extend": "^0.6.0", @@ -30407,16 +36361,22 @@ "dependencies": { "ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true } } }, "read": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "requires": { "mute-stream": "~0.0.4" @@ -30424,29 +36384,39 @@ }, "read-cache": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "requires": { "pify": "^2.3.0" }, "dependencies": { "pify": { - "version": "2.3.0" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" } } }, "read-chunk": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz", + "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==", "requires": { "pify": "^4.0.1", "with-open-file": "^0.1.6" }, "dependencies": { "pify": { - "version": "4.0.1" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" } } }, "read-config-file": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", + "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", "dev": true, "requires": { "dotenv": "^9.0.2", @@ -30458,10 +36428,14 @@ "dependencies": { "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -30471,6 +36445,8 @@ }, "read-package-json": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", + "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", "dev": true, "requires": { "glob": "^7.1.1", @@ -30481,6 +36457,8 @@ "dependencies": { "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", @@ -30489,6 +36467,8 @@ }, "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", @@ -30501,6 +36481,8 @@ }, "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" @@ -30510,6 +36492,8 @@ }, "read-package-json-fast": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, "requires": { "json-parse-even-better-errors": "^2.3.0", @@ -30518,6 +36502,8 @@ }, "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -30530,19 +36516,25 @@ }, "readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } }, "recursive-readdir": { - "version": "2.2.2", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.5" }, "dependencies": { "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", @@ -30550,7 +36542,9 @@ } }, "minimatch": { - "version": "3.0.4", + "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" @@ -30559,31 +36553,45 @@ } }, "reflect-metadata": { - "version": "0.1.13" + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, "regenerate": { - "version": "1.4.2" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.0.1", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "requires": { "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.9" + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regenerator-transform": { "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "requires": { "@babel/runtime": "^7.8.4" } }, "regex-parser": { - "version": "2.2.11" + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" }, "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", @@ -30593,21 +36601,27 @@ }, "regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { - "version": "5.1.0", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", "requires": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "unicode-match-property-value-ecmascript": "^2.1.0" } }, "registry-auth-token": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dev": true, "requires": { "rc": "1.2.8" @@ -30615,22 +36629,30 @@ }, "registry-url": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dev": true, "requires": { "rc": "^1.2.8" } }, "regjsgen": { - "version": "0.6.0" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.8.4", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "requires": { "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { - "version": "0.5.0" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, @@ -30683,6 +36705,12 @@ "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 + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -30725,6 +36753,8 @@ }, "request": { "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "devOptional": true, "requires": { "aws-sign2": "~0.7.0", @@ -30751,6 +36781,8 @@ "dependencies": { "form-data": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "devOptional": true, "requires": { "asynckit": "^0.4.0", @@ -30760,10 +36792,14 @@ }, "qs": { "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "devOptional": true }, "tough-cookie": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "devOptional": true, "requires": { "psl": "^1.1.28", @@ -30772,18 +36808,26 @@ }, "uuid": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "devOptional": true } } }, "require-directory": { - "version": "2.1.1" + "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==" }, "require-from-string": { - "version": "2.0.2" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-main-filename": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "devOptional": true }, "requirejs": { @@ -30793,10 +36837,14 @@ "dev": true }, "requires-port": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -30804,10 +36852,14 @@ } }, "resolve-from": { - "version": "5.0.0" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "resolve-url-loader": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "requires": { "adjust-sourcemap-loader": "^4.0.0", "convert-source-map": "^1.7.0", @@ -30817,7 +36869,9 @@ }, "dependencies": { "loader-utils": { - "version": "2.0.2", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -30825,12 +36879,16 @@ } }, "source-map": { - "version": "0.6.1" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, "responselike": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "requires": { "lowercase-keys": "^1.0.0" @@ -30838,6 +36896,8 @@ }, "restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -30845,19 +36905,27 @@ }, "retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true }, "reusify": { - "version": "1.0.4" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" }, "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -30865,6 +36933,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -30876,6 +36946,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -30884,6 +36956,8 @@ }, "roarr": { "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "dev": true, "optional": true, "requires": { @@ -30896,44 +36970,75 @@ } }, "roboto-fontface": { - "version": "0.10.0" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz", + "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==" }, "robust-predicates": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", + "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, "run-async": { - "version": "2.4.1" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "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==", "requires": { "queue-microtask": "^1.2.2" } }, "rw": { - "version": "1.3.3" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "rxjs": { - "version": "7.5.6", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", "requires": { "tslib": "^2.1.0" } }, "safe-buffer": { - "version": "5.1.2" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } }, "safer-buffer": { - "version": "2.1.2" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sanitize-filename": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "dev": true, "requires": { "truncate-utf8-bytes": "^1.0.0" } }, "sass": { - "version": "1.53.0", + "version": "1.54.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz", + "integrity": "sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA==", "requires": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -30942,6 +37047,8 @@ }, "sass-loader": { "version": "13.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", "requires": { "klona": "^2.0.4", "neo-async": "^2.6.2" @@ -30949,6 +37056,8 @@ }, "saucelabs": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", "devOptional": true, "requires": { "https-proxy-agent": "^2.2.1" @@ -30956,6 +37065,8 @@ "dependencies": { "agent-base": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "devOptional": true, "requires": { "es6-promisify": "^5.0.0" @@ -30963,6 +37074,8 @@ }, "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "devOptional": true, "requires": { "ms": "^2.1.1" @@ -30970,6 +37083,8 @@ }, "https-proxy-agent": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "devOptional": true, "requires": { "agent-base": "^4.3.0", @@ -30979,10 +37094,14 @@ } }, "sax": { - "version": "1.2.4" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "schema-utils": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", @@ -30991,6 +37110,8 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -31000,15 +37121,21 @@ }, "ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "requires": {} }, "json-schema-traverse": { - "version": "0.4.1" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" } } }, "scope-analyzer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", "dev": true, "requires": { "array-from": "^2.1.1", @@ -31021,16 +37148,24 @@ } }, "screenfull": { - "version": "6.0.2" + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-6.0.2.tgz", + "integrity": "sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==" }, "select": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" }, "select-hose": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "selenium-webdriver": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", "devOptional": true, "requires": { "jszip": "^3.1.3", @@ -31041,6 +37176,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "devOptional": true, "requires": { "balanced-match": "^1.0.0", @@ -31049,6 +37186,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "devOptional": true, "requires": { "fs.realpath": "^1.0.0", @@ -31061,6 +37200,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, "requires": { "brace-expansion": "^1.1.7" @@ -31068,6 +37209,8 @@ }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "devOptional": true, "requires": { "glob": "^7.1.3" @@ -31075,6 +37218,8 @@ }, "tmp": { "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", "devOptional": true, "requires": { "os-tmpdir": "~1.0.1" @@ -31083,19 +37228,25 @@ } }, "selfsigned": { - "version": "2.0.1", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "requires": { "node-forge": "^1" } }, "semver": { "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "requires": { "lru-cache": "^6.0.0" }, "dependencies": { "lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { "yallist": "^4.0.0" } @@ -31104,11 +37255,15 @@ }, "semver-compare": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, "optional": true }, "semver-diff": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, "requires": { "semver": "^6.3.0" @@ -31116,12 +37271,16 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "semver-dsl": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng==", "dev": true, "requires": { "semver": "^5.3.0" @@ -31129,6 +37288,8 @@ "dependencies": { "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -31155,25 +37316,35 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" }, "dependencies": { "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "mime": { - "version": "1.6.0" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "ms": { - "version": "2.1.3" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, "serialize-error": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, "optional": true, "requires": { @@ -31182,6 +37353,8 @@ "dependencies": { "type-fest": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, "optional": true } @@ -31189,12 +37362,16 @@ }, "serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "requires": { "randombytes": "^2.1.0" } }, "serve-index": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "requires": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -31207,15 +37384,21 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "depd": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" }, "http-errors": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -31224,21 +37407,31 @@ } }, "inherits": { - "version": "2.0.3" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "setprototypeof": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "statuses": { - "version": "1.5.0" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" } } }, "serve-static": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -31248,47 +37441,63 @@ }, "set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "devOptional": true }, "setimmediate": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "devOptional": true }, "setprototypeof": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "shallow-clone": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "requires": { "kind-of": "^6.0.2" } }, "shallow-copy": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", "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==", "requires": { "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shiki": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", - "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz", + "integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==", "dev": true, "requires": { "jsonc-parser": "^3.0.0", "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" + "vscode-textmate": "^6.0.0" } }, "side-channel": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -31296,18 +37505,84 @@ } }, "signal-exit": { - "version": "3.0.7" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } }, "slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.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, + "optional": 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, + "optional": 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, + "optional": true + } + } + }, "smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true }, "sockjs": { "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "requires": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -31315,7 +37590,9 @@ } }, "socks": { - "version": "2.7.0", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "requires": { "ip": "^2.0.0", @@ -31324,6 +37601,8 @@ }, "socks-proxy-agent": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "requires": { "agent-base": "^6.0.2", @@ -31332,43 +37611,50 @@ } }, "source-map": { - "version": "0.7.4" + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" }, "source-map-js": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-loader": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.0.tgz", + "integrity": "sha512-i3KVgM3+QPAHNbGavK+VBq03YoJl24m9JWNbLgsjTj8aJzXG9M61bantBTNBt7CNwY2FYf+RJRYJ3pzalKjIrw==", "requires": { "abab": "^2.0.6", "iconv-lite": "^0.6.3", "source-map-js": "^1.0.2" } }, - "source-map-resolve": { - "version": "0.6.0", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, "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==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" }, "dependencies": { "source-map": { - "version": "0.6.1" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, "sourcemap-codec": { - "version": "1.4.8" + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "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", @@ -31377,10 +37663,14 @@ }, "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", @@ -31388,11 +37678,15 @@ } }, "spdx-license-ids": { - "version": "3.0.11", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, "spdy": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -31403,6 +37697,8 @@ }, "spdy-transport": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "requires": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -31414,6 +37710,8 @@ "dependencies": { "readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -31424,6 +37722,8 @@ }, "split": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "requires": { "through": "2" @@ -31431,16 +37731,22 @@ }, "sprintf-js": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", "dev": true }, "ssf": { "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", "requires": { "frac": "~1.1.2" } }, "sshpk": { "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "devOptional": true, "requires": { "asn1": "~0.2.3", @@ -31456,16 +37762,22 @@ }, "ssri": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "requires": { "minipass": "^3.1.1" } }, "stat-mode": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", "dev": true }, "static-eval": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", "dev": true, "requires": { "escodegen": "^1.11.1" @@ -31473,6 +37785,8 @@ "dependencies": { "escodegen": { "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, "requires": { "esprima": "^4.0.1", @@ -31484,6 +37798,8 @@ }, "levn": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "requires": { "prelude-ls": "~1.1.2", @@ -31492,6 +37808,8 @@ }, "optionator": { "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", @@ -31504,15 +37822,21 @@ }, "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 }, "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, "optional": true }, "type-check": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "requires": { "prelude-ls": "~1.1.2" @@ -31522,6 +37846,8 @@ }, "static-module": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", "dev": true, "requires": { "acorn-node": "^1.3.0", @@ -31542,6 +37868,8 @@ "dependencies": { "escodegen": { "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, "requires": { "esprima": "^4.0.1", @@ -31553,6 +37881,8 @@ }, "levn": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "requires": { "prelude-ls": "~1.1.2", @@ -31561,6 +37891,8 @@ }, "magic-string": { "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", "dev": true, "requires": { "sourcemap-codec": "^1.4.1" @@ -31568,6 +37900,8 @@ }, "optionator": { "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", @@ -31580,15 +37914,21 @@ }, "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 }, "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, "optional": true }, "type-check": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "requires": { "prelude-ls": "~1.1.2" @@ -31597,10 +37937,14 @@ } }, "statuses": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "stream-combiner": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", "dev": true, "requires": { "duplexer": "~0.1.1", @@ -31609,12 +37953,16 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } }, "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==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -31622,53 +37970,73 @@ } }, "string.prototype.codepointat": { - "version": "0.2.1" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" }, "string.prototype.trimend": { - "version": "1.0.5", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" } }, "string.prototype.trimstart": { - "version": "1.0.5", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" } }, "stringify-package": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", + "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", "dev": true }, "strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" } }, "strip-bom": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" }, "strip-final-newline": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "stylis": { - "version": "4.1.1" + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" }, "stylus": { - "version": "0.58.1", + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz", + "integrity": "sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==", "requires": { - "css": "^3.0.0", + "@adobe/css-tools": "^4.0.1", "debug": "^4.3.2", "glob": "^7.1.6", "sax": "~1.2.4", @@ -31677,6 +38045,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -31684,6 +38054,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -31695,6 +38067,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -31703,6 +38077,8 @@ }, "stylus-loader": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz", + "integrity": "sha512-WTbtLrNfOfLgzTaR9Lj/BPhQroKk/LC1hfTXSUbrxmxgfUo3Y3LpmKRVA2R1XbjvTAvOfaian9vOyfv1z99E+A==", "requires": { "fast-glob": "^3.2.11", "klona": "^2.0.5", @@ -31711,6 +38087,8 @@ }, "sumchecker": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "dev": true, "requires": { "debug": "^4.1.0" @@ -31718,29 +38096,43 @@ }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } }, "supports-preserve-symlinks-flag": { - "version": "1.0.0" + "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==" }, "svg-pan-zoom": { - "version": "3.6.1" + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/svg-pan-zoom/-/svg-pan-zoom-3.6.1.tgz", + "integrity": "sha512-JaKkGHHfGvRrcMPdJWkssLBeWqM+Isg/a09H7kgNNajT1cX5AztDTNs+C8UzpCxjCTRrG34WbquwaovZbmSk9g==" }, "symbol-observable": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true }, "systeminformation": { - "version": "5.12.1", + "version": "5.12.15", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.15.tgz", + "integrity": "sha512-LMctTV27bGqWMBsuhzvNTH3roKOQonTN730F9v0x9YtoYducXcobs0rg3QKNnWDyHJyWIgKY6FiHlFcXJYclTQ==", "dev": true }, "tapable": { - "version": "2.2.1" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "tar": { - "version": "6.1.11", + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", + "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -31752,6 +38144,8 @@ }, "temp-file": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", "dev": true, "requires": { "async-exit-hook": "^2.0.1", @@ -31760,6 +38154,8 @@ }, "terser": { "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -31768,22 +38164,28 @@ }, "dependencies": { "commander": { - "version": "2.20.3" + "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==" } } }, "terser-webpack-plugin": { - "version": "5.3.3", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", "requires": { - "@jridgewell/trace-mapping": "^0.3.7", + "@jridgewell/trace-mapping": "^0.3.14", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", - "terser": "^5.7.2" + "terser": "^5.14.1" }, "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -31793,13 +38195,19 @@ }, "ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "requires": {} }, "json-schema-traverse": { - "version": "0.4.1" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "schema-utils": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -31810,6 +38218,8 @@ }, "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==", "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -31818,6 +38228,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -31825,6 +38237,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -31836,6 +38250,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -31843,13 +38259,19 @@ } }, "text-table": { - "version": "0.2.0" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "through": { - "version": "2.3.8" + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -31857,21 +38279,31 @@ } }, "thunky": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, "time-stamp": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", "dev": true }, "tiny-emitter": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, "tiny-inflate": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", "dev": true }, "tmp": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { "rimraf": "^3.0.0" @@ -31879,44 +38311,61 @@ }, "tmp-promise": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dev": true, "requires": { "tmp": "^0.2.0" } }, "to-fast-properties": { - "version": "2.0.0" + "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==" }, "to-readable-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, "to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { "is-number": "^7.0.0" } }, "toidentifier": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "4.0.0", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", "dev": true, "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "dependencies": { "universalify": { - "version": "0.1.2", + "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 } } }, "traverse": { - "version": "0.6.6", + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", "dev": true }, "traverse-chain": { @@ -31926,10 +38375,14 @@ "dev": true }, "tree-kill": { - "version": "1.2.2" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" }, "truncate-utf8-bytes": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dev": true, "requires": { "utf8-byte-length": "^1.0.1" @@ -31937,6 +38390,8 @@ }, "ts-morph": { "version": "13.0.3", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-13.0.3.tgz", + "integrity": "sha512-pSOfUMx8Ld/WUreoSzvMFQG5i9uEiWIsBYjpU9+TTASOeUa89j5HykomeqVULm1oqWtBdleI3KEFRLrlA3zGIw==", "dev": true, "requires": { "@ts-morph/common": "~0.12.3", @@ -31945,6 +38400,8 @@ }, "ts-node": { "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", @@ -31964,12 +38421,16 @@ "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 } } }, "tsconfig-paths": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -31980,6 +38441,8 @@ "dependencies": { "json5": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -31987,15 +38450,21 @@ }, "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 } } }, "tslib": { - "version": "2.4.0" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "tslint": { "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "dev": true, "peer": true, "requires": { @@ -32016,6 +38485,8 @@ "dependencies": { "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, "peer": true, "requires": { @@ -32025,11 +38496,15 @@ }, "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, "peer": true }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "peer": true, "requires": { @@ -32043,6 +38518,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "peer": true, "requires": { @@ -32051,6 +38528,8 @@ }, "mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "peer": true, "requires": { @@ -32059,16 +38538,22 @@ }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "peer": true }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "peer": true }, "tsutils": { "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "peer": true, "requires": { @@ -32079,6 +38564,8 @@ }, "tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -32086,17 +38573,23 @@ "dependencies": { "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "tunnel": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, "optional": true }, "tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "devOptional": true, "requires": { "safe-buffer": "^5.0.1" @@ -32104,65 +38597,87 @@ }, "tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "devOptional": true }, "type": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, "type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { "prelude-ls": "^1.2.1" } }, "type-fest": { - "version": "0.21.3" + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" }, "type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "typed-assert": { - "version": "1.0.9" + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==" }, "typedarray": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { "is-typedarray": "^1.0.0" } }, "typedoc": { - "version": "0.23.10", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.10.tgz", - "integrity": "sha512-03EUiu/ZuScUBMnY6p0lY+HTH8SwhzvRE3gImoemdPDWXPXlks83UGTx++lyquWeB1MTwm9D9Ca8RIjkK3AFfQ==", + "version": "0.23.21", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.21.tgz", + "integrity": "sha512-VNE9Jv7BgclvyH9moi2mluneSviD43dCE9pY8RWkO88/DrEgJZk9KpUk7WO468c9WWs/+aG6dOnoH7ccjnErhg==", "dev": true, "requires": { "lunr": "^2.3.9", - "marked": "^4.0.18", + "marked": "^4.0.19", "minimatch": "^5.1.0", - "shiki": "^0.10.1" + "shiki": "^0.11.1" } }, "typescript": { - "version": "4.7.4" + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" }, "uglify-js": { - "version": "3.16.3", + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, "optional": true }, "unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -32172,23 +38687,33 @@ } }, "underscore": { - "version": "1.13.4" + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" }, "unicode-match-property-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "2.0.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-properties": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", "dev": true, "requires": { "base64-js": "^1.3.0", @@ -32196,10 +38721,14 @@ } }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" }, "unicode-trie": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", "dev": true, "requires": { "pako": "^0.2.5", @@ -32208,44 +38737,62 @@ "dependencies": { "pako": { "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", "dev": true } } }, "unique-filename": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "requires": { "unique-slug": "^2.0.0" } }, "unique-slug": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "requires": { "imurmurhash": "^0.1.4" } }, "unique-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "requires": { "crypto-random-string": "^2.0.0" } }, "universalify": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "unix-crypt-td-js": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", "dev": true }, "unpipe": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "untildify": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==" }, "update-browserslist-db": { - "version": "1.0.5", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -32253,6 +38800,8 @@ }, "update-notifier": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "requires": { "boxen": "^5.0.0", @@ -32273,6 +38822,8 @@ "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" @@ -32280,6 +38831,8 @@ }, "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", @@ -32288,21 +38841,35 @@ }, "ci-info": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "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 }, "is-ci": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { "ci-info": "^2.0.0" @@ -32310,6 +38877,8 @@ }, "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" @@ -32319,12 +38888,26 @@ }, "uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.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, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "url-parse-lax": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "requires": { "prepend-http": "^2.0.0" @@ -32332,31 +38915,41 @@ }, "utf8-byte-length": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", "dev": true }, "util-deprecate": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utils-merge": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { - "version": "8.3.2" - }, - "v8-compile-cache": { - "version": "2.3.0", - "dev": true + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache-lib": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "valid-identifier": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/valid-identifier/-/valid-identifier-0.0.2.tgz", + "integrity": "sha512-zaSmOW6ykXwrkX0YTuFUSoALNEKGaQHpxBJQLb3TXspRNDpBwbfrIQCZqAQ0LKBlKuyn2YOq7NNd6415hvZ33g==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -32365,13 +38958,38 @@ }, "validate-npm-package-name": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, "requires": { "builtins": "^1.0.3" } }, "vary": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "optional": true + } + } }, "vscode-oniguruma": { "version": "1.6.2", @@ -32380,9 +38998,9 @@ "dev": true }, "vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz", + "integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==", "dev": true }, "walkdir": { @@ -32393,6 +39011,8 @@ }, "watchpack": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -32400,22 +39020,30 @@ }, "wbuf": { "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "requires": { "minimalistic-assert": "^1.0.0" } }, "wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "requires": { "defaults": "^1.0.3" } }, "web-streams-polyfill": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "dev": true }, "webdriver-js-extender": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", "devOptional": true, "requires": { "@types/selenium-webdriver": "^3.0.0", @@ -32424,6 +39052,8 @@ }, "webdriver-manager": { "version": "12.1.8", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.8.tgz", + "integrity": "sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg==", "devOptional": true, "requires": { "adm-zip": "^0.4.9", @@ -32441,14 +39071,20 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "devOptional": true }, "ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "devOptional": true }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "devOptional": true, "requires": { "balanced-match": "^1.0.0", @@ -32457,6 +39093,8 @@ }, "chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "devOptional": true, "requires": { "ansi-styles": "^2.2.1", @@ -32468,6 +39106,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "devOptional": true, "requires": { "fs.realpath": "^1.0.0", @@ -32480,10 +39120,14 @@ }, "ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "devOptional": true }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, "requires": { "brace-expansion": "^1.1.7" @@ -32491,6 +39135,8 @@ }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "devOptional": true, "requires": { "glob": "^7.1.3" @@ -32498,10 +39144,14 @@ }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "devOptional": true }, "strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "devOptional": true, "requires": { "ansi-regex": "^2.0.0" @@ -32509,12 +39159,16 @@ }, "supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "devOptional": true } } }, "webpack": { - "version": "5.74.0", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", "peer": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -32545,6 +39199,8 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "peer": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -32555,15 +39211,21 @@ }, "ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peer": true, "requires": {} }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "peer": true }, "schema-utils": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "peer": true, "requires": { "@types/json-schema": "^7.0.8", @@ -32575,6 +39237,8 @@ }, "webpack-dev-middleware": { "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "requires": { "colorette": "^2.0.10", "memfs": "^3.4.3", @@ -32585,6 +39249,8 @@ "dependencies": { "schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -32595,7 +39261,9 @@ } }, "webpack-dev-server": { - "version": "4.9.3", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", "requires": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -32620,7 +39288,7 @@ "p-retry": "^4.5.0", "rimraf": "^3.0.2", "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", + "selfsigned": "^2.1.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", @@ -32629,10 +39297,14 @@ }, "dependencies": { "ipaddr.js": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" }, "schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -32644,22 +39316,30 @@ }, "webpack-merge": { "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "requires": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" } }, "webpack-sources": { - "version": "3.2.3" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" }, "webpack-subresource-integrity": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", "requires": { "typed-assert": "^1.0.8" } }, "websocket-driver": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "requires": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -32667,16 +39347,22 @@ } }, "websocket-extensions": { - "version": "0.1.4" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, "which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "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", @@ -32688,10 +39374,14 @@ }, "which-module": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "devOptional": true }, "wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -32699,16 +39389,22 @@ }, "widest-line": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, "requires": { "string-width": "^4.0.0" } }, "wildcard": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, "windows-release": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", "dev": true, "requires": { "execa": "^4.0.2" @@ -32716,6 +39412,8 @@ "dependencies": { "execa": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -32731,6 +39429,8 @@ }, "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { "pump": "^3.0.0" @@ -32738,12 +39438,16 @@ }, "human-signals": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true } } }, "with-open-file": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", + "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", "requires": { "p-finally": "^1.0.0", "p-try": "^2.1.0", @@ -32751,26 +39455,38 @@ }, "dependencies": { "pify": { - "version": "4.0.1" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" } } }, "wmf": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" }, "word": { - "version": "0.3.0" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" }, "word-wrap": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wordwrap": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": 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==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -32779,23 +39495,36 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "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==", "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==" } } }, "wrappy": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { "imurmurhash": "^0.1.4", @@ -32805,15 +39534,21 @@ } }, "ws": { - "version": "8.8.1", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "requires": {} }, "xdg-basedir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, "xlsx": { "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", "requires": { "adler-32": "~1.3.0", "cfb": "~1.2.1", @@ -32826,6 +39561,8 @@ }, "xml2js": { "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "devOptional": true, "requires": { "sax": ">=0.6.0", @@ -32834,15 +39571,21 @@ "dependencies": { "xmlbuilder": { "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "devOptional": true } } }, "xmlbuilder": { - "version": "15.1.1" + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" }, "xmldoc": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.2.0.tgz", + "integrity": "sha512-2eN8QhjBsMW2uVj7JHLHkMytpvGHLHxKXBy4J3fAT/HujsEtM6yU84iGjpESYGHg6XwK0Vu4l+KgqQ2dv2cCqg==", "dev": true, "requires": { "sax": "^1.2.4" @@ -32850,19 +39593,29 @@ }, "xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { - "version": "5.0.8" + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { - "version": "1.10.2" + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yargs": { "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -32874,10 +39627,14 @@ } }, "yargs-parser": { - "version": "21.0.1" + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, "yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "requires": { "buffer-crc32": "~0.2.3", @@ -32886,10 +39643,20 @@ }, "yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true }, "zone.js": { - "version": "0.11.7", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", + "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", "requires": { "tslib": "^2.3.0" } -- GitLab From d48cd2d2dda4c2fb1a4aa5bdb0f0dd3d286a1d6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 17 Nov 2022 10:00:23 +0100 Subject: [PATCH 035/285] add @angular/pwa refs #445 --- angular.json | 12 ++++-- ngsw-config.json | 30 +++++++++++++++ package-lock.json | 29 ++++++++++++++- package.json | 3 +- src/app/app.module.ts | 10 ++++- src/assets/icons/icon-128x128.png | Bin 0 -> 1253 bytes src/assets/icons/icon-144x144.png | Bin 0 -> 1394 bytes src/assets/icons/icon-152x152.png | Bin 0 -> 1427 bytes src/assets/icons/icon-192x192.png | Bin 0 -> 1790 bytes src/assets/icons/icon-384x384.png | Bin 0 -> 3557 bytes src/assets/icons/icon-512x512.png | Bin 0 -> 5008 bytes src/assets/icons/icon-72x72.png | Bin 0 -> 792 bytes src/assets/icons/icon-96x96.png | Bin 0 -> 958 bytes src/index.html | 60 ++++++++++-------------------- src/manifest.webmanifest | 59 +++++++++++++++++++++++++++++ 15 files changed, 155 insertions(+), 48 deletions(-) create mode 100644 ngsw-config.json create mode 100644 src/assets/icons/icon-128x128.png create mode 100644 src/assets/icons/icon-144x144.png create mode 100644 src/assets/icons/icon-152x152.png create mode 100644 src/assets/icons/icon-192x192.png create mode 100644 src/assets/icons/icon-384x384.png create mode 100644 src/assets/icons/icon-512x512.png create mode 100644 src/assets/icons/icon-72x72.png create mode 100644 src/assets/icons/icon-96x96.png create mode 100644 src/manifest.webmanifest diff --git a/angular.json b/angular.json index 234f2a317..a5fea2de6 100644 --- a/angular.json +++ b/angular.json @@ -35,7 +35,8 @@ "glob": "**/*.png", "input": "src/", "output": "/" - } + }, + "src/manifest.webmanifest" ], "styles": [ "src/styles.scss", @@ -75,7 +76,9 @@ "buildOptimizer": false, "sourceMap": true, "optimization": false, - "namedChunks": true + "namedChunks": true, + "serviceWorker": true, + "ngswConfigPath": "ngsw-config.json" }, "configurations": { "production": { @@ -105,7 +108,7 @@ "serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { - "browserTarget": "ngHyd:build", + "browserTarget": "ngHyd:build" }, "configurations": { "production": { @@ -136,7 +139,8 @@ "src/favicon.ico", "src/**/*.json", "src/**/*.md", - "src/**/*.png" + "src/**/*.png", + "src/manifest.webmanifest" ] } } diff --git a/ngsw-config.json b/ngsw-config.json new file mode 100644 index 000000000..f8bf2102e --- /dev/null +++ b/ngsw-config.json @@ -0,0 +1,30 @@ +{ + "$schema": "./node_modules/@angular/service-worker/config/schema.json", + "index": "/index.html", + "assetGroups": [ + { + "name": "app", + "installMode": "prefetch", + "resources": { + "files": [ + "/favicon.ico", + "/index.html", + "/manifest.webmanifest", + "/*.css", + "/*.js" + ] + } + }, + { + "name": "assets", + "installMode": "lazy", + "updateMode": "prefetch", + "resources": { + "files": [ + "/assets/**", + "/*.(svg|cur|jpg|jpeg|png|apng|webp|avif|gif|otf|ttf|woff|woff2)" + ] + } + } + ] +} diff --git a/package-lock.json b/package-lock.json index 8d29777e1..597641a64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "@angular/platform-browser": "^14.0.4", "@angular/platform-browser-dynamic": "^14.0.4", "@angular/router": "^14.0.4", + "@angular/service-worker": "^14.0.4", "@ngx-matomo/tracker": "^3.0.0", "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", @@ -59,7 +60,7 @@ }, "devDependencies": { "@angular-devkit/core": "^14.0.4", - "@angular-eslint/eslint-plugin": "^14.0.0", + "@angular-eslint/eslint-plugin": "^14.0.4", "@angular/cli": "^14.0.4", "@angular/compiler-cli": "^14.0.4", "@angular/language-service": "^14.0.4", @@ -927,6 +928,24 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@angular/service-worker": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-14.2.11.tgz", + "integrity": "sha512-RIRhkSxjah2f4sFDduPFGS/9rXZADYPYLVO9zkOHiX9IlCzFwqOZnL9UkMrlKC1AoGr6seXkGHHtC+7gOiszoQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "bin": { + "ngsw-config": "ngsw-config.js" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/common": "14.2.11", + "@angular/core": "14.2.11" + } + }, "node_modules/@assemblyscript/loader": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", @@ -23295,6 +23314,14 @@ "tslib": "^2.3.0" } }, + "@angular/service-worker": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-14.2.11.tgz", + "integrity": "sha512-RIRhkSxjah2f4sFDduPFGS/9rXZADYPYLVO9zkOHiX9IlCzFwqOZnL9UkMrlKC1AoGr6seXkGHHtC+7gOiszoQ==", + "requires": { + "tslib": "^2.3.0" + } + }, "@assemblyscript/loader": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", diff --git a/package.json b/package.json index bf035e0b3..5abbd69ae 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "@angular/platform-browser": "^14.0.4", "@angular/platform-browser-dynamic": "^14.0.4", "@angular/router": "^14.0.4", + "@angular/service-worker": "^14.0.4", "@ngx-matomo/tracker": "^3.0.0", "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", @@ -85,7 +86,7 @@ }, "devDependencies": { "@angular-devkit/core": "^14.0.4", - "@angular-eslint/eslint-plugin": "^14.0.0", + "@angular-eslint/eslint-plugin": "^14.0.4", "@angular/cli": "^14.0.4", "@angular/compiler-cli": "^14.0.4", "@angular/language-service": "^14.0.4", diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c39a646e4..6a0be9102 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -123,6 +123,8 @@ import { DialogConfirmLoadSessionURLComponent } from "./components/dialog-confir import { StructureFieldsetContainerComponent } from "./components/structure-fieldset-container/structure-fieldset-container.component"; import { BasinFieldsetContainerComponent } from "./components/basin-fieldset-container/basin-fieldset-container.component"; import { PrebarrageService } from "./services/prebarrage.service"; +import { ServiceWorkerModule } from '@angular/service-worker'; +import { environment } from '../environments/environment'; const appRoutes: Routes = [ { path: "list/search", component: CalculatorListComponent }, @@ -187,7 +189,13 @@ const appRoutes: Routes = [ enableTracing: false, relativeLinkResolution: 'legacy' }), - TableModule + TableModule, + ServiceWorkerModule.register('ngsw-worker.js', { + enabled: environment.production, + // Register the ServiceWorker as soon as the application is stable + // or after 30 seconds (whichever comes first). + registrationStrategy: 'registerWhenStable:30000' + }) ], declarations: [ AppComponent, diff --git a/src/assets/icons/icon-128x128.png b/src/assets/icons/icon-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9241f0be40661db1eed29384231e76d33b6e7c GIT binary patch literal 1253 zcmV<B1RDE^P)<h;3K|Lk000e1NJLTq004jh004jp0{{R3^x%>C00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#R8UM*MNDaN$N(?b05IDCG1mYv%m6RW1~u3KGtmGr z)c`Qj05H@5G1vex-2gG&05Sjn|HA+;>W7}%C{ggJx%=nr_R-qsQgh#Rj_Gxf@wLO% zPH*a#s-Rh6fB*mh4s=pZQvmBRsYJy17_o~a(q!H`#xchL000SaNLh0L00)l%00)l& zd2k#i000C4Nkl<Zc-rlo3zDKR6h%cO1W-O91i}69bK0?0pn1uC66l&K?gluOzB%UC zhr^ydd-m+vv*+JVe3t1ie*Pr$yetD5|H{{op~&+)z*mA~Ylbwr<d2l!iINTf@JW`x zQoa+Nwy9l|4^xgJj~mo3w*ahL$?w|P0amNzyLL{16)HKZ9RlFBlGECO0KO{uvvxSZ zR~^E5VeN89j42)Yypri$>8EL$(w!{vTD#Ez6h&Vm;Z@RJyJ5Pb=t?kfC0(@}L=|6A zC;?{4bI!=^4sa_Okxqbw@%_I8P!z%|z=;8HeE_r!fY3el836hLpcw$}37N77pePIu z0L(@lpm_o`H~=sW1p0kbywbw}fCf+p-6ix)=MzBk=HMf!i~;~4<VfflR7TOkn+it* z0Lw@sKLr>-H3n#XX#h5n9s__fIwQZuJPGk+1pOlOB*c>uv^u-+B*c;tv>=H%64II_ zBM3lp=3rHEWE4OEz>=hXe^qg06hQ!I#sGAA*)e1!u|+9ELMAVJhK#WNL5fRA-?wHB zE+cGn5aSZM-T_)%M&OYiE}_4hQ-R9}+?iZZ3Du9?aSh7|1c=a;ka_?pbY&EP03kRB zo9FpJ1Ij1^0TNI`<_Tax8A)_^iVc8%osbBP$tVN?j+lh1_YqBn$p}5CNU@cWdIKnI zWdt8mKoaVPhg2OTBlxgLAQCb|fF6<&d_<E064K*iI*rH(29Ur2T*m+{Afo^V2!Y** z8UqMmn-;+UiCaST^rW<Q%SgfiC-(p}^(2jZn}#1(9<l8hm3G0l$i5`e7=T`~EwY*D zT7WSNJwz=@Gz!ox)Bv$0F$J7{DS(9bqjb7u9-0?{Di~3VJT$*KsyP6+MIM?p(O>}T zib!ph5$D<@wH=CS^3qCJWyHBNiEVSRqHoP^HW{&AI@lznXaHrKiL5)T3q1gx?cT7l z$cP0H(GoH?fR-MDfCUhe64KV2Q$fopV*yM|^j>pLD){5-_D0G`vH(t`gp?gXkunNd z07ptfo$K<NTp97MZ&T`I-nal-N=Cfr1TirOwe$L3P%9(m9lDs8Q00C<a3f|S^Y%QO zUkNEUfFf2#OaM76p$>UL(aa7(zyuhW$Xs7h2tePy(toxbVclW-yS1Lo!^|@P|54BB z;t@a|K1m`x0Ysm^qlrTw0NIk~Olh<fAXxgM>liHp@bRe4-o_QW$7|yn-D9<p?w;QV z$EoB21pXhm5^Y?sdte*a?B2|-SpWd5zV!at#+AD_gCK1H!4{9J$8Fr8d-gVN(mh)n zx9Q&8o6|8swEaI?d{2n&x<|Be%kIszG0VBzUhi%ErT=i*vuDqq|0sU|6H~89F!@8? P00000NkvXXu0mjfX0IV2 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-144x144.png b/src/assets/icons/icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5f8c16389c261b3291ef34a9ef8b2222f76d69 GIT binary patch literal 1394 zcmV-&1&#WNP)<h;3K|Lk000e1NJLTq0058x0058(0{{R3(3ld600004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#S5Qn;MNDaN$N(_Y04&%5Fw_7r%m6RZ1vJ?JG1&ky z)c`Qm05I49G1LGt-2gGe059DDG5`Pn?3%64E>-4njObBw`{(S}RdwSpSM|!&_}=8- zBu@0X#@b+gK;5I&0000EbW%=J0PQ0&M8x(NsEw~<(cU)swx9q2010qNS#tmY2!Q|q z2!R10?Pm-C00fFjL_t(|+U=W*a;q>5M1f%57z`milK=nC8``FU7Ta25pmT@)f-{=c zA}fmHoH}*t)TvXaPM!K6<;BeZJ2YX+ih^^VT>b=(pA@6`C^rfZrny8xQM`dhrZ_y% zIC=3c{uYZ5F;1KnQ}LPhw)lsQ3kA@=7XPxb252vfziq4q+QH(UghmSVR2FY%<GhfI zE3}2h7i>%ivTyN48$&>&#l4MfJX2e7y=++AqtHBc7o4PZ7FXMNs-Y|^PL!#|!!#?% z5@jhkT?Q8SS%Ii2%O>E6AdCA^fvGN^syQa|m&FeXRQ(9lb661xD1~{h<%e!CP(rH^ z4AgxBbubVu11=~}TYjlRfl^w(qd@l;kU)Wm-4F5%WocR>Vw>d{kaz>3B_hTUmWjoi z2MtFmP=tr#OISF%M4%Y`YP^MoBO?N(2BG-U&3;gW$=J<-I{Uf!9LmfKgmpf3FbYjV z(WLXq6NphL8kC4U59KDIXiy?D5L;0oARJvXP-GN}a5!dUpcoIuroqE8q0iJrp2x&F z0uRTC40ORmaj5Wcq`w(GI27*%zr&qRe=vq{C|(PGgF7F1=m%iW_v7}XM@s~}6f-as z>k+6%O9TKVU?>hFPymLb3jjq}D2mU8mB7N00YEV}DYl<L6*f600FVzAsC%vSIw%~G z)zt+G#rg$QL*bYLKp_%}&G*tXXpqi_mR3k8iuV>4dNV=`P~C{u&U^j^R3Vciw9#Yq zP`pp~)OVmn5Ku%9#p@L4Mh{090*c86YUZ2#h8&Iz0!qoDSkHlKayUj1kWU_^hdEF{ zepX{EeNVr1o%a0X#}`2jM{J)TQlHQ5PatyVgTD<CL$Uw;^HfLdeDJ4*oED1pZ=jl3 zA`pl{&u5v0tr$`z<3Q(8g<}Q+#Wo703daNl@@YFooq9{Ts2I`e64K31E-I3-$ACIJ zxhPM@YYD2dF`g+NuN?{`?8K1l@!FQ9r4qqF$@-pGmB@vGB3&rnuQT0d>U81AV4zr6 zpsVWk<Dm=31P1aoq1Y>rQKm1n-bM^9Cu6<%onO3;5t?vJVW3bGih~-c(uAYIIgvUP zh3<Z+Q+K|>-A=9y#j6hJq3(Qx>lmgA#a?@1HMR9Zi41@uRnOP@lP{qvk!t`Ht0u)k z4^*ipM`i$&DhebhM{%7Z93ulDUok1R6rhJ<ax}R_^W>q}lg<Wbw!W<!&lZxgS6X`U zj#0?N(deX6J}C|~ph`X#8J+3nvQQM%OV3W)`9?rYHYv7LpogqPt`X2Q8HaWv`YmiV zQLy6KYI2jZ!7<#gzGs^Onci3X`6fV-W3Du?4wS4rVGd)vKy3Y$cNp0Na_t=FUzjDJ z)UhQ$vj7x1Hl=m<#$H}>cd!D8d5(Rl-MxdCvFujhq|SDdyL%@u)7@?LGYU=t0U2l$ zFB9FpWS;&0gSX)B{aQ=%Imt9Y`~Q>k$FQ_-YZ2T%^YT&uy`8%I5HG9TeUO*s?mo=R zGIt;7<z;st>E%Ut^X%gMC3(Jc>eQ)Ir%oNBf5;sefixnja{vGU07*qoM6N<$f>q^o A1ONa4 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-152x152.png b/src/assets/icons/icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..34a1a8d645872c776c9425de45c3fcfba12c271e GIT binary patch literal 1427 zcmV;E1#J3>P)<h;3K|Lk000e1NJLTq005W(005W>0{{R3FC5Sl00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#S5Qn;MNDaN)BrNc058)3FxCJt%K$IW1~u3KFxCJt z*8nrs05IMFFxCJu+yF7w05QV=FWmq!|NsBlCs6RIx%%hq)l6;YNo@Dg+Uk;~=yZ<p zx5esUf81+^h4qx%0000FbW%=J03+<sjKuj?q8G8=GeU66B6IQp000SaNLh0L00{a3 z00{a4jl()K000E4Nkl<Zc-rlpi*lnd3`G;bV3KrsnP>X{-?>fGCXfYNSFwSa_5FdK zVWbmbiyjU>K0ZD^K0ZD^KL2TsQY8DMN~18(vn<;gTO#sXvhT>_UZ`aLlk6vfOgE>x z$T-hm!ES8PrsW=;^Kr6C!eqm8&oyA1v_kq*?gp^0oQ|86yBTb~R+yAK1#Fd8crAA# znB!KMDR(-UvsRcdcL>ZyD=d{e3TC$zlI3!r<a*6W38K__xlhuz88u<#xZKBSilWZw z;kN>%+{YP;V#uJdT7g#Xqm;#0N{kF{1!}pE)7`+j3=Yr=A6bs)`+*fjoG~J)&x^s8 z_jj;<cVOxcrZ`|!cU%};pT$qE3^1xVQU+N23)V8g$kxEQn&Ocf2P50!41*0%u)!gi zV7lU-5;hqb43&Ofjlp2ahGeklod<?XR?vTuIKM{E^p5<BgQ+Q)a^%;q;gBg;rex`Z zS;~|vQ?kHR7Bl6_lPoZgg-p5fBnyBEzAJFa1^}4k%9SHo0f0qsJ}^kKCuHVl$yF(q zWThLh5lq*yB#XRXrs$}DulSNBS?I-=BiA9%299K*H_MnI*Cx+uj%1-XUV+P1-HxFY zL$VN<#9h(fz<OM=feWy)T+16+j7wHPU<v%ds{4sz1xr>s0P7~D{|#2dlPq?GcR}Ua z{+_|MsARG8yA+k{=P%eNDp~OG4wS2UoLa{Ulq`6lc*f+~J&)5nP_iJHz$Vx7307j0 zYyg5u$Q8r*0%Cw98-idFB-dsPRzs2%AXtJtFg3lhQHW%vZLn_oGdTw95XqufBuC^} zpqzrm$Z^33dMyITwR*jMs{qNumm@L#fi<sSHE>)2U)kti#;?W8&*b#JvZYHF1{36S zl>T3^PqJhK7)+ASQD$y<V?~v$fWacFTvas_MV0Ic221c`fu+P2{i+A+FtFa*m}oMr z!oZYOumer5q+Bh%hMNqlP_Wjb#xx?k7I12tV3K@DZO&lNughRf!ANP%ugkuuIAEPM zjV*$e1uL<gF;Vj}K9+0SOjA#z%#!7-(JYLL#q3-$yQbBdCCgeTGt1SmKUSJ0%UU`* zo8(%V7TX4+WLaRsB-h3SR+}Unu)w52uB~|$P#Gi}vcMvPTzfNEXOOI5fhC3;K*I85 zX^^b61UC6Q6=kb)&`XxLsd&^+t_=mO)=#n@EU;87*Os;itF)43uIt7+x%M=$PAggF zT4$)6T#1{*rFN2Kf(eaWE9y$~ppk6A1e2P{wWNa8nn^Zff<?=6ZRtzkYFV-;CRnm8 z*Pag6ElXC~0Gm#(z}kGdJjwpyE~caVZLYRC-(I3b!Psm4QS20qTl=?PCFu?<eDCv- z<H-$J@ctJ!7vTWR&IeS<*)o_s*h&&x1UuRM6fU*)T~cWKlPL<?DmBmPf|Y6>?}F88 z9_@nlYJR5FA|6=i{)<^n7pz<JKo_iC^E0Iu0$}p6W@fu!gPNyx!6r3N>4J@Fer8w` zTCgqu^~JOcHmrGl7ucESt>yX3@;t&!4|~X?3%0KL#V*(z)}ssdQ1i3H+8(jKyI?0Z h@8jd+<Ky#R<S!p2d&`MM9Af|g002ovPDHLkV1o49sNVnp literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-192x192.png b/src/assets/icons/icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..9172e5dd29e4b2c35cbf4da874e778934fa27e77 GIT binary patch literal 1790 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 UWvqof`P%?Q?*Ol6kC^=b0uRVBUjP6A literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-384x384.png b/src/assets/icons/icon-384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..e54e8d3eafe56a617b9de13c361ed68657371e84 GIT binary patch literal 3557 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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-512x512.png b/src/assets/icons/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..51ee297df1cbeb0354814ffe95afa6e4bc86ea23 GIT binary patch literal 5008 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 FzW_h><Ej7v literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-72x72.png b/src/assets/icons/icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..2814a3f30caf3abf4de2ac85082ef83888b4b479 GIT binary patch literal 792 zcmV+z1LypSP)<h;3K|Lk000e1NJLTq002k;002k`0{{R3VlzW^00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#R8UM*MNDaN)&Mcn05H@5Fxdbx(FQfk05I49FVg@p z+yF7i059JFFxUVv-2gG&05QV=FaQ7l>y@eERCUfVSLAPs`{wKQ$<y8=P2(+9`QGI2 zq_y<7#IBC9F#rGn4s=pZQvgJ-(lPhI7mKIsAY$I07o6z;000SaNLh0L00cn*00cn+ zG(|n;0006rNkl<ZSi|j@*=~a{5Jk&o)_7wL`Tzec;F84V4w$5>`jGn?>BzbqhH<{W zKKbNtQU<?4Nh`*M2;(;~LCB|wDMg;XOo{V^^A$9+vR7DfcHwKpJyCYDm@MK?5zk@4 znR@LACtlT?daVq#OFFFnUaysL6d-i<n8JB4WiMcG^&uysq*Q`P0YEtgYNc!w0u%vI zMsONAr6E8JfGPrXok3Rul%uXON6RG|gHYQg26YD1VGy!Bg`7eDq=q1<613>Hf}oTF z3K?M;*Yw_?5X(3{vgN@kPam<7%UPO5B_t(-pp1}F_K75<4DkSgZ^u+K7b78Mj^BPl z#(|5Pkg~#)5zE-k6SBin5|a`isF^_xmXa847bIi5%<QCvQW7JQAsLk!{t8M-fI=Xn z><!4&t$ciRjWh?kt)HVCkdhIg3dpEekOoqQ)F*8#qnqpDSlbw>C5%2AYa1gw46>vw zsSoY(fov(sFZKmYMmM7mh&iLW8%%1G&XKYpLAfKNw%3}*kuoAdnJr`M>__H>dq~Mh zP-V-g+(k>-Qs(q}WXssQpxTy_-X}}zK)3Dc*I821%VcWFsJ9?(Nx8HAB~LQ8U>P-a zuTt*pkmh5n)f|ns+Q$5J2qLyN|84E@+#+w#(H$VTc!5HXl|4%iLCo)Vlji%N$p7+I zG8$BzyHCc90G+&N*{z@Jc&GJ~9n-C!?ijTGxE#NGXP;Ytsbkdo&MZ9H)#u-s|CMj0 W+lM#8Z~|xm0000<MNUMnLSTZ`s$=&6 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-96x96.png b/src/assets/icons/icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..d271025c4f22c7ba3c5f43ccfcab0e52ebbe80ca GIT binary patch literal 958 zcmV;v13~<WP)<h;3K|Lk000e1NJLTq003YB003YJ0{{R3)kcR300004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#QBX`&MNDaN(FHWq05Hh_FW3Mv%K$LW05R48FxUVw z)c`Tx05I18Fx3Ds+5j=b059DDG5`Pn`|0h?DNx=~ap{et=5mep%+~Lyx#A^H+#^l% zx5S%GFfafB01k9gPE!E&((4(;BUht~-7>L58O~@#00009a7bBm000H6000H60f4@L z=Kuf#+(|@1RA}DqnQ3~1AQVNNP|ScL4oUXE&?Z$Ahc^JBfBJbB;3>Hreb6X6a^%R7 z;3>+#e0pA<Dy5R*Z=Rl&N%f3+MFeMLg{a1;DVIFt4=<~C)H|unf;{~!<EnxHFGd-n z)^*e--&8);N&~zr|J2F?d@5hoy2`DA2~L$4>snVC28G71@_nt#-0QkgM3T~@)@9nd zZWSG>a#?ZFb**E?A^ZVd{Y>W%C@dE6TmlD>DB#LG-_*Y`3;-|s%mDfk&@%wM<;-dU z%uZG6jBg_vFwB5~1`r-lj=dzaTLJ+PjAV02+0w|<H2ndPvLytd<RqKZd3i>grk4Qi z<rxW>_NdmZY}5-iXC>=8R<<kkx@IN2H|$O&zn&=IF)3E5fs>8=;$WuTroY=%%5X~{ z0fLsSe@zuVEn7+gB>k4?UVx64Eg=CVDVhGAi(*a6cA+O0QnGd&yjoH==>eE~y^Vl* zry6I^Fw^>X#pCEme%Y8om0EzA0pw0)Cde3<On-)7O~}Sfjslmg{Qz2G2@F8uU$XlL z(BNOT)EO{KHZ0Ev11g)~MtAy4woT`#0W{oc3ZNY|0ERnq0f21Wc`ZXE!_qs9b)adc zX41Ir(%mQL!2t$WfB+?XP7~X}OGsIO1m|6|KPMYdwuA+gkYqh{5Z91wf&~=NTcU#i zEhL+C1L)OjXai^<+4!?~4oEh@cNGsnwkv-L0!U_HfB|H)xD?q-)?>FVdcRXGE-Owu z$vO<s?q#z8h@E724AAUkODzC$E7^cwNIkZ)B^H2kd#E%xz--TK7n|#-_fIs1x>9SV z*n9RAfjlf%zPAXgA1U?(2-|DBO!@#4mz&4@;tEKwkz3Bf3E*?bd_7qMWaO73wgO!I zZ{dNqzw6clvF-Nz|AlPY{=QqFiW35mQK&514$>`EMWAkRM6hnLwgYwxw;i-wsO_-b g0#)SEkt6>uKVW<A{lK0~3jhEB07*qoM6N<$f)e<r7ytkO literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html index 24fc414e2..4bef67938 100644 --- a/src/index.html +++ b/src/index.html @@ -14,6 +14,8 @@ <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#ffffff"> <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="manifest" href="manifest.webmanifest"> + <meta name="theme-color" content="#1976d2"> </head> <body> @@ -41,57 +43,32 @@ </style> <div class="app-loading"> <div class="logo"> - <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="svg3406" version="1.1" - inkscape:version="0.92.3 (2405546, 2018-03-11)" width="167.55714" height="167.55714" - viewBox="0 0 167.55714 167.55714" sodipodi:docname="cassiopee_logo.svg"> + <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="svg3406" version="1.1" inkscape:version="0.92.3 (2405546, 2018-03-11)" width="167.55714" height="167.55714" viewBox="0 0 167.55714 167.55714" sodipodi:docname="cassiopee_logo.svg"> <metadata id="metadata3412"> - <rdf:RDF> - <cc:Work rdf:about=""> + <rdf:rdf> + <cc:work rdf:about=""> <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" ></dc:type> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"></dc:type> <dc:title></dc:title> - </cc:Work> - </rdf:RDF> + </cc:work> + </rdf:rdf> </metadata> <defs id="defs3410"></defs> <g inkscape:groupmode="layer" id="layer1" inkscape:label="background"> - <rect - style="fill:#003a80;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1;stroke-opacity:1;stroke-linejoin:round" - id="fond" width="165.55714" height="165.55714" x="1" y="1"></rect> + <rect style="fill:#003a80;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1;stroke-opacity:1;stroke-linejoin:round" id="fond" width="165.55714" height="165.55714" x="1" y="1"></rect> </g> <g inkscape:groupmode="layer" id="calque_traits" inkscape:label="traits"> - <path - style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 16.234557,39.786389 36.297745,77.631687" id="trait_1" inkscape:connector-curvature="0"></path> - <path - style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 47.234816,83.975938 27.27422,0.39174" id="trait_2" inkscape:connector-curvature="0"></path> - <path - style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 85.615846,92.002058 101.01379,128.05358" id="trait_3" inkscape:connector-curvature="0"></path> - <path - style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 145.82968,107.86632 -35.62153,23.78874" id="trait_4" inkscape:connector-curvature="0"></path> + <path style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 16.234557,39.786389 36.297745,77.631687" id="trait_1" inkscape:connector-curvature="0"></path> + <path style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 47.234816,83.975938 27.27422,0.39174" id="trait_2" inkscape:connector-curvature="0"></path> + <path style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 85.615846,92.002058 101.01379,128.05358" id="trait_3" inkscape:connector-curvature="0"></path> + <path style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 145.82968,107.86632 -35.62153,23.78874" id="trait_4" inkscape:connector-curvature="0"></path> </g> <g inkscape:groupmode="layer" id="calque_points" inkscape:label="points"> - <circle - style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" - id="point_1" cx="12.879179" cy="34.64555" r="6"></circle> - <circle - style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" - id="point_2" cx="39.734871" cy="83.581924" r="10"></circle> - <circle - style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" - id="point_3" cx="82.500542" cy="84.860001" r="10"></circle> - <circle - style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" - id="point_4" cx="104.12913" cy="135.35852" r="10"></circle> - <circle - style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" - id="point_5" cx="151.57199" cy="103.73587" r="10"></circle> + <circle style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" id="point_1" cx="12.879179" cy="34.64555" r="6"></circle> + <circle style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" id="point_2" cx="39.734871" cy="83.581924" r="10"></circle> + <circle style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" id="point_3" cx="82.500542" cy="84.860001" r="10"></circle> + <circle style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" id="point_4" cx="104.12913" cy="135.35852" r="10"></circle> + <circle style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" id="point_5" cx="151.57199" cy="103.73587" r="10"></circle> </g> </svg> </div> @@ -282,6 +259,7 @@ } </script> + <noscript>Please enable JavaScript to continue using this application.</noscript> </body> </html> \ No newline at end of file diff --git a/src/manifest.webmanifest b/src/manifest.webmanifest new file mode 100644 index 000000000..43b4e9d2b --- /dev/null +++ b/src/manifest.webmanifest @@ -0,0 +1,59 @@ +{ + "name": "Cassiopee, tools for designing fish crossing devices for upstream and downstream migrations and hydraulic calculation for environmental and agricultural engineering", + "short_name": "Cassiopee", + "theme_color": "#1976d2", + "background_color": "#fafafa", + "display": "standalone", + "scope": "./", + "start_url": "./", + "icons": [ + { + "src": "assets/icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-152x152.png", + "sizes": "152x152", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable any" + } + ] +} -- GitLab From 91a6ebae7e5a18155950a015fb2d1bcb06f18b9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 17 Nov 2022 10:54:18 +0100 Subject: [PATCH 036/285] add http-server npm package refs #445 --- package-lock.json | 343 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 5 +- 2 files changed, 340 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 597641a64..5313a1e4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,6 +39,7 @@ "core-js": "^3.23.3", "file-saver": "^2.0.5", "he": "^1.2.0", + "http-server": "^14.1.1", "jalhyd": "file:./jalhyd", "katex": "^0.16.0", "material-design-icons": "^3.0.1", @@ -5417,7 +5418,6 @@ "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, "dependencies": { "lodash": "^4.17.14" } @@ -5633,7 +5633,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, "dependencies": { "safe-buffer": "5.1.2" }, @@ -8187,6 +8186,14 @@ "node": ">= 0.10" } }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -12987,6 +12994,17 @@ "wbuf": "^1.1.0" } }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", @@ -13116,6 +13134,107 @@ } } }, + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-server/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/http-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/http-server/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/http-server/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==" + }, + "node_modules/http-server/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/http-server/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/http-server/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -15608,7 +15727,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -16503,6 +16621,14 @@ "opencollective-postinstall": "index.js" } }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -17188,6 +17314,38 @@ "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", "dev": true }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -19498,6 +19656,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==" + }, "node_modules/select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -21553,6 +21716,17 @@ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", "dev": true }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dependencies": { + "qs": "^6.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -21760,6 +21934,11 @@ "punycode": "^2.1.0" } }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -22367,6 +22546,17 @@ "node": ">=0.8.0" } }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -26636,7 +26826,6 @@ "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, "requires": { "lodash": "^4.17.14" } @@ -26786,7 +26975,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, "requires": { "safe-buffer": "5.1.2" } @@ -28748,6 +28936,11 @@ "vary": "^1" } }, + "corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==" + }, "cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -32375,6 +32568,14 @@ "wbuf": "^1.1.0" } }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, "html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", @@ -32471,6 +32672,76 @@ "micromatch": "^4.0.2" } }, + "http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "requires": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.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==", + "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==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.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==", + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -34353,8 +34624,7 @@ "minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "devOptional": true + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "minipass": { "version": "3.3.4", @@ -35033,6 +35303,11 @@ "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", "dev": true }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -35556,6 +35831,34 @@ "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", "dev": true }, + "portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "requires": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + } + } + }, "postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -37179,6 +37482,11 @@ "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-6.0.2.tgz", "integrity": "sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==" }, + "secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==" + }, "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -38770,6 +39078,14 @@ } } }, + "union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "requires": { + "qs": "^6.4.0" + } + }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -38921,6 +39237,11 @@ "punycode": "^2.1.0" } }, + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, "url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -39378,6 +39699,14 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "requires": { + "iconv-lite": "0.6.3" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 5abbd69ae..ebbed23c0 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,9 @@ "release-windows": "npm run build-no-pdf && npm run release-windows-nocompile", "release-all": "node scripts/clean_release.js && npm run build-no-pdf && npm run update-dist-index-mimetypes && \"node_modules/.bin/electron-builder\" && \"node_modules/.bin/electron-builder\" --mac && \"node_modules/.bin/electron-builder\" --win", "compodoc": "node \"node_modules/@compodoc/compodoc/bin/index-cli.js\" -p src/tsconfig.app.json -s --language fr-FR -d compodoc-fr", - "viz": "tsviz -recursive src/ nghyd_class_diagram.png" + "viz": "tsviz -recursive src/ nghyd_class_diagram.png", + "webapp-nocompile" : "\"node_modules/.bin/http-server\" dist", + "webapp" : "npm run build-no-pdf && npm run webapp-nocompile" }, "private": true, "dependencies": { @@ -66,6 +68,7 @@ "core-js": "^3.23.3", "file-saver": "^2.0.5", "he": "^1.2.0", + "http-server": "^14.1.1", "jalhyd": "file:./jalhyd", "katex": "^0.16.0", "material-design-icons": "^3.0.1", -- GitLab From d6c9067aeaa9b276f73a8bca7210f4dd21b3dc96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 17 Nov 2022 14:46:25 +0100 Subject: [PATCH 037/285] configure cached files by service worker refs #445 --- ngsw-config.json | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/ngsw-config.json b/ngsw-config.json index f8bf2102e..a09056dac 100644 --- a/ngsw-config.json +++ b/ngsw-config.json @@ -5,26 +5,21 @@ { "name": "app", "installMode": "prefetch", + "updateMode": "prefetch", "resources": { "files": [ "/favicon.ico", "/index.html", "/manifest.webmanifest", - "/*.css", - "/*.js" - ] - } - }, - { - "name": "assets", - "installMode": "lazy", - "updateMode": "prefetch", - "resources": { - "files": [ + "/**/*.css", + "/*.js", + "/**/*.json", + "/3rdpartylicenses.txt", + "/MaterialIcons-Regular.1e50f5c2ffa6aba4.eot", "/assets/**", "/*.(svg|cur|jpg|jpeg|png|apng|webp|avif|gif|otf|ttf|woff|woff2)" ] } } ] -} +} \ No newline at end of file -- GitLab From 73b5fe1ad9693fbae87f1f7626df97127cb7962e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 17 Nov 2022 16:29:36 +0100 Subject: [PATCH 038/285] update jalhyd_branch to devel refs #445 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index d9cf99b69..d64531f13 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -328-fusionner-les-select-avec-source-et-les-select_custom +devel -- GitLab From 79de8979d5a72e824173ef9d7626b50ef1244309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 21 Nov 2022 11:19:37 +0100 Subject: [PATCH 039/285] feat: add service worker update service refs #445 --- ngsw-config.json | 3 ++ scripts/deploy-new-stable-version.sh | 9 +++++ src/app/app.component.ts | 4 ++- src/app/app.module.ts | 4 ++- .../services/service-worker-update.service.ts | 34 +++++++++++++++++++ 5 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/app/services/service-worker-update.service.ts diff --git a/ngsw-config.json b/ngsw-config.json index a09056dac..2a1566195 100644 --- a/ngsw-config.json +++ b/ngsw-config.json @@ -1,6 +1,9 @@ { "$schema": "./node_modules/@angular/service-worker/config/schema.json", "index": "/index.html", + "appData": { + "version": "4.16.0" + }, "assetGroups": [ { "name": "app", diff --git a/scripts/deploy-new-stable-version.sh b/scripts/deploy-new-stable-version.sh index 5b9168857..e981740c5 100755 --- a/scripts/deploy-new-stable-version.sh +++ b/scripts/deploy-new-stable-version.sh @@ -28,6 +28,11 @@ then exit 2 fi +if [[ ! -f ngsw-config.json ]]; then + echo "Fichier de configuration du service worker ngsw-config.json non trouvé" >&2 + exit 1 +fi + # 1. JaLHyd ################################################################### echo "BUILDING JALHYD" @@ -68,6 +73,10 @@ git push --tags --force echo "BUILDING NGHYD" cd .. +# 2.1 service worker configuration (application version) + +sed -i "/\"version\": \"/s/\": \".*/\": \"$VERSION\"/" ngsw-config.json + # 2.2 update Git repository git checkout master git pull --rebase diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 993c7a33c..6c9375cae 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -33,6 +33,7 @@ import { saveAs } from "file-saver"; import * as XLSX from "xlsx"; import * as pako from "pako"; +import { ServiceWorkerUpdateService } from "./services/service-worker-update.service"; // to be able to check for window.cordova declare let window: any; @@ -90,7 +91,8 @@ export class AppComponent implements OnInit, OnDestroy, Observer { private loadSessionDialog: MatDialog, private confirmCloseCalcDialog: MatDialog, private hotkeysService: HotkeysService, - private matomoTracker: MatomoTracker + private matomoTracker: MatomoTracker, + private serviceWorkerUpdateService: ServiceWorkerUpdateService ) { ServiceFactory.httpService = httpService; ServiceFactory.applicationSetupService = appSetupService; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 6a0be9102..5be7fc649 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -125,6 +125,7 @@ import { BasinFieldsetContainerComponent } from "./components/basin-fieldset-con import { PrebarrageService } from "./services/prebarrage.service"; import { ServiceWorkerModule } from '@angular/service-worker'; import { environment } from '../environments/environment'; +import { ServiceWorkerUpdateService } from "./services/service-worker-update.service"; const appRoutes: Routes = [ { path: "list/search", component: CalculatorListComponent }, @@ -278,7 +279,8 @@ const appRoutes: Routes = [ { provide: ErrorStateMatcher, useClass: ImmediateErrorStateMatcher - } + }, + ServiceWorkerUpdateService ], schemas: [NO_ERRORS_SCHEMA], bootstrap: [AppComponent] diff --git a/src/app/services/service-worker-update.service.ts b/src/app/services/service-worker-update.service.ts new file mode 100644 index 000000000..0cc5205e4 --- /dev/null +++ b/src/app/services/service-worker-update.service.ts @@ -0,0 +1,34 @@ +import { Injectable } from "@angular/core"; +import { SwUpdate } from '@angular/service-worker'; +import { NotificationsService } from "./notifications.service"; + +@Injectable() +export class ServiceWorkerUpdateService { + constructor( + private swUpdate: SwUpdate, + private notificationService: NotificationsService + ) { + swUpdate.versionUpdates.subscribe(evt => { + switch (evt.type) { + case 'VERSION_DETECTED': + let ver = evt.version.appData["version"]; + console.log(`new version detected ${ver}`); + notificationService.notify(`Downloading new version: ${ver}`, 10000); + break; + + case 'VERSION_READY': + const currVer = evt.currentVersion.appData["version"]; + const newVer = evt.latestVersion.appData["version"]; + console.log(`new version ready ${newVer}, current = ${currVer}`); + notificationService.notify(`New version ready for use: ${newVer}, replacing ${currVer}`, 10000); + break; + + case 'VERSION_INSTALLATION_FAILED': + ver = evt.version.appData["version"]; + console.log(`version install failed ${ver} : ${evt.error}`); + notificationService.notify(`Failed to install version '${ver}': ${evt.error}`, 10000); + break; + } + }); + } +} -- GitLab From e2fae51a519c4cbb4449be80c2fabd2382ed9638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 21 Nov 2022 14:34:30 +0100 Subject: [PATCH 040/285] fix: service worker configuration for cache prefetching (assets) refs #445 --- ngsw-config.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ngsw-config.json b/ngsw-config.json index 2a1566195..5ba7c9a39 100644 --- a/ngsw-config.json +++ b/ngsw-config.json @@ -14,12 +14,15 @@ "/favicon.ico", "/index.html", "/manifest.webmanifest", - "/**/*.css", + "/app/**/*.json", + "/locale/*.json", + "/*.css", "/*.js", - "/**/*.json", + "/*.json", "/3rdpartylicenses.txt", "/MaterialIcons-Regular.1e50f5c2ffa6aba4.eot", "/assets/**", + "!/**/*.pdf", "/*.(svg|cur|jpg|jpeg|png|apng|webp|avif|gif|otf|ttf|woff|woff2)" ] } -- GitLab From 5e3fcc693fb0b46c7a4ac57041d02985a1e02922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 21 Nov 2022 16:16:25 +0100 Subject: [PATCH 041/285] add icons with different sizes for web app assets refs #445 --- src/assets/icons/favicon-128x128.png | Bin 0 -> 3750 bytes src/assets/icons/favicon-144x144.png | Bin 0 -> 4207 bytes src/assets/icons/favicon-152x152.png | Bin 0 -> 4535 bytes src/assets/icons/favicon-384x384.png | Bin 0 -> 11793 bytes src/assets/icons/favicon-72x72.png | Bin 0 -> 2171 bytes src/assets/icons/favicon-96x96.png | Bin 0 -> 2874 bytes src/manifest.webmanifest | 16 ++++++++-------- 7 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 src/assets/icons/favicon-128x128.png create mode 100644 src/assets/icons/favicon-144x144.png create mode 100644 src/assets/icons/favicon-152x152.png create mode 100644 src/assets/icons/favicon-384x384.png create mode 100644 src/assets/icons/favicon-72x72.png create mode 100644 src/assets/icons/favicon-96x96.png diff --git a/src/assets/icons/favicon-128x128.png b/src/assets/icons/favicon-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..a043567c28fae5df202ded2cc30eca795d88d5a1 GIT binary patch literal 3750 zcma)9hf~wd)Bh#}NN5szRRV|<X`v_rp#(&bUZhBm^cEmOs8R$%hX-j79UgiSm7;(I zL<oXX1*8g6rHV=~zH#RL1AaHNw{v^Dw{yGunVpR{)Yqb?;i3TmfL{BahB28({3R$A zdGA3v43ZhdUtQZ2N?xJRM+EX2hP`L$4*<08e+e|E18yJ-IdPg6I1?XdT%d!W6A%~} zDB<Sq;g4~^I!XBWx#aCCaRC5>fVPI3DL#LvAjFhqikCz@v&~vX{0tws&!`DaAjCpN zgWNouq?_G-HO~AuTDT^wXW-#z;+4^)ply)1=F9ZZAXVXC4!IXX$#<FT<czx6OFJwd zFa{CXvurE^PN~f}0$c)|b8Xnx!!I#w3vY-$7en(QdwYRT1iDMTSfGx*q6MC`&<t95 zL_Y$|sGtGx$3azB7(oOcejptU;qxN^8VvvArPdG*%@4Y2kwb9$g(-P3U{vGNqeW>x zI`86F83th&c)`xPU1_%TYAQUU{FkHK)NETaex*F@*vGeEmQL_BOD#)dGR@cK$IW`{ z6sl=NsyJJ_I0E0bKn^V|g|Vu7yVNZN<m;feW8LC&v*kBh>}@j=QF)EI5a;1|oQ2zH zzHl}N8msb%mCw%;VrUUO?ojSuPA?%HyBO{%6xloR>3BHMEQvMv>=WMOtAhEgCYD(~ zLlwY(OQqhCIJgr`_2Y-n(YL!E&lNodUW3}tfUf?#Bk078MkN^r6xVeLb2-e>C=>3G zVPt@^SF1!Xut&U)2|^kW1|&2pZXm9!aFZ@uxO>oS2zr6n)a$8nq(>EeUS<-eR+8_< zb(qJ5qqrS@Q%WsyBY9u_e8rg0;eTdzUW)r%K#Wx@vou_WHpFEBpHU0<Y+HcwQuPx0 z->q++8;Yf41E~gRhG@L`x|^}5Fe%Pcgt^F0z@@n3E90frE%6)&$Wd1igW;tfLbx{b zM9q(r$zO(2I$;rYo3@x(#(gV6%yLk}MG(#XUP*^h>56S_!~pZUw36&cyd8f!pGayF z*aT(^mO3~r+dY??L@tT!=di(*5M|Ka=p&Ts!T0-(In=qd_XO`*wb=8^!{?wrAUZC+ zk+8s+W?jQj7BEI2U!LqOe+E{k974I)37SNb|F?6J3%wd^0&b*ZC|UchIf=Z4t3mZz zlEnn^Z2D*5h9b$B7m4%YN**Wb_x=;y=+E$N3#{vTU|R6#8f8=DB_UsNd|C+VZLj{^ zr6*H|!>Zk4P;k{rT~wefq7qqBSRzcrN}{zK#GiObW4iO>Wzkp!bGTgI;K4@Q=sPQ+ z{lcKM+GosO35#F|XWk&u`3jSn`)9&np_qmVBoeLx@IFp<t#wGHO|r{p$ZXAK`~-(+ zG)`Muc3T><_~T2gt5wzYV-3ktbt%yA7F=<)E(!m2WG3Drk<zbRy-ElM?ot#=OHROO zLiJL(Z4QlCxCU`mO1@Xayyn&AH5s95lp|k9qq(!i7-du_oulFGhwR0#8npX`pkRS2 z04UyEp*)VE{`QV!=TO{gw?SftIIB~ma}4n!(z2?loKV=0KIWrJhahL3(x?mja^Vf` zcI=8Z{UOV<;>uzDdkU1_jBw)2ik$B=*QcB?XMNVLZ?}D@nvXd42U}Ad$(5Qt1K+6Z zX1?;@QfD1rBkmXkcsCt>b9JB(;O&e$yjpgD_DI!QGUDjTTc%+prBsvYdc~CG37bkA zM^c4c?(z6=R`=9Hr=xHmBBx|HmToURc;Wg^i0}i>Qoq(Wo8R+@Me*5Fl1tVoNemSk z9Az&%(T0i(U-DDUi!5m}{|Oo>GalHt58yv<a_13$WIMFrU<ghH%2Z}9t>oOVD8;#< z+-(g;=C|L~kruksoL1<fOoe*#Srxio>s26_!-njeEyz{+w9n%XN4wTC%T?kN3Do(# zyRE#^!2t2a7Bu9`EN_(AqFL8Q(oT8@%R<2wU>`o7mJLsgDot-4xuZmvOk`8rPx-|} zpZl>&S#idfs~P;<XJFl{r>Mv#h2qA*h!58{o4}eSq*j=BA6@0vT5_$&wk)=0s=_1U zG5+`Ou>{R{XkNqWeE0@V{DB0U7GL5ZL@M1nD!se2iKs{AeFmeL$Ca!s$o05!|3tor z4{snrWUv@8DmZrO8ptEe`fpFj9E@iBE=3L{8s7XMWg`U4f6}kqnv@^w`S=+%r_Ve1 z2v?G0nesxxu>-niYApn`=wd>*PGce1n#!LOBbS8)=ndmQQA9q_CoYuA_8t4CCie)# zP*mU7JTp1_B;+KxM^ZM;#OCYb_a-9oH~`GAv>ZBL{q%ky_?0m~cJu9lq3=2U9x|uV zep$tET<Y{tdlgyL@z!;nR*)%PFR4Tq5vPkllMe3A=qw)38qCy*^7uA1ff5U+6~ecc z^xq#m?5@og#2gKJ6dS#wj>7$>vp>jsdpoS$cI427M76Y?lKf*7ORKZP&7pBPuIN^l zMtV1E>1@({a?`<D0bc{AExNqXsbJ^vRWRXQB(qZv(IIY;oU8Iv`MQOd+2e5%!KWWB zUae+SkDf#@7aGsfc<)m!@JovVC%FQJw+9<pr}EnN%^c{t=F);>5lF!2^4zx1^f*r6 z{98;QjjM`^3Czxi)z}%LR%=vRMj{}?xU<dDLgu;)HE@J$yEamr3=KZt)zs1%4#br+ zJaZ{HV$bTHLC?d{5?RBk(dwu>#oS5J$J?d~Eqh9^FlNl{LNQ9I<}wBTap%(Nx=D;o zv5sKZA$`!7Q&R>(rnNu6BBrB?Is%{}#20zfnyxM*78TCxVsh?+lAqLdooW6<ifl@n z>9%MGob>c5d4_FXja%(7^$TtCqOW^EbC!}lGZ$C_RIs7c#u*F$jrdac#;{830iEx( z+f|VW&1xh3_YXWntJj%e0q1Lo{MY|!J-p@BZq4rwstS|6_b`*z3k%3zwuJmab%US; z*ss_9YhK)bmT_Sr$8Ki$a2xrSjwhZU&Ej9HaAJ@g<P!Y<UNP^Qj;S~c+F$t6)+-Ps zvfN;Cy_5|AHfW!}T)2|Qx@9DSH6h1v_fcoe(|!OyF2ACI0t2e|dmnSO=Thhk8jCn8 z2@@lUSx=s^)}zFA68XW!!ZcHfUo!0aKHiTs9r{$X<SxY2rf<YD<CdX{1OvdPWEKXW z7WDS{=PJ1LjnQN_X@9dR8s@}$PZsmmFWU@EAbY`_rX_bdkK8XY88V!vC$5X!cQ)5{ zxjAq%pDsSU*cT{x$`3wPIrTU9R39dNV`n2oY#83Mf;=5g(b}zeOvu$Ldiy7Q9Y*&v zDZt%zr&p0Wq0gqA0C+pN?x@E_AB1~mg^bNrh069@2db<o2TMNVV&xzI$939l;CU-% zJkQQAywGhVs`=s3EX==haV$g4gg!9{y5!HqvFAZ?VPt3hq3~u%)ZhNTrFG?<q^B&6 zj%c<Te@02Y^JkmzH#MBi$u_Sg#XvM!Fn3HlNX+)wb#BVm=fq8r1>VJRs@Mk4Eri6( zT%M@KYk;?kDR+WNMN_MZ16t8Za)W6(8KB&`fapmTeh%eiuZ=y91FNjhP4-jij{Q!? z8dPVaL&{m3vp<e5VvhF@qvh3FFz2%B*XZ+31?R%pomV9vb*Q+?E^QG*p|!mygysFe zVc8tGZs@*EyT^tWk{LSRVhqmPDJsZcE9;ZJCfS5L^i`f%ndvDpfulXx9oZ|8&bKl} zRyOvw9kwB;swUfhi&s1{{_E%p>~>cAhgE`ZUVLGNJcpuJw5x738;(=Ab=b@=LKjSu zd4ybEo8X#6`ht(C-?@+k0)JhB-$^9F$SD8xk2`MSS89v1`sW2zA@^ZhHQZg~av1Rk zpKc<ZnmI*CtZ4|@S5CVhjF>_#H8LOf4NV%g-THVQt#CUI+Qkq%sgIkKL+}YDz0mc1 zAnF6cUes5r8CA7gq`ZuhY0N25uK&1wM+j`MYKNbA0I<aD_60P3_wM>KPg`x>=Z35r z3r0L%RfguVk_KZVcTv_S=a3m3eG0823=UA}tp?NmKI|Ser`>8~eawE}=$DtYu5wsM zq0G<8uN396aqI?Zt%ckg0G;6jvCRY>IO+z7{gAbo7;RU2|BZ3v?};Gj{rGjWVP2mL z3j$y<!fq4Y`9t((^!Zoy!9_-I+i`@TNY*U1%-r#0Y78`jGUQ<=EFFZusluw@HVTD} zyt9`rYb#-<HppB~+^ex~PT8%M%iP48)oaYuSWgDbU69STA$}UwX-mnUPVfPbg?4~G z3mtc>#>-~(Yg6q&(emd*Xw$X=r|X&}yT+6QDTTh(Pa-L&is(C-4aHW4kGGbOduML; z4N*tDfgx^RECjE(jJce#+Of|-@^em;ginv5Iw%zd%YrKrkf+#h^LEOF>w&#k(OM(1 z#=Xqu9Ju@`>tmB5_~YyWpFi^!H9a3%k4np5>SG_Cs6!SbPChJI5cvztd7spCJx9HL z7EoWUd+X=qo<dUM8I9*p9(^_qfZ_Oi4c$VV6kxwIHr=EYZ*!n0;1f2nLOj4Az}T*_ zprP_alm7C4ZSITdV&U2Cib4P$LBSst%FFI(AKHmFcna+Tp_!rQQi`0NJNg8G$DUii zmpAJ@-Bk**Vy9A1xNSsyAxfrGoHOHBKe~06tny>QWqnko>xs{0{l)smi?gf$N=B2P zN#3FAIPR7vQIZVFGYNOd(CdDF2ZUM)kMPZQShI0T`*<mDR(;)GR|5NCakGa`sC05Z z?c%@-+Tdp!R#GYoU{GhvSJkU8E%q<FY4M)3m9D!h?6S!CG=ETNy7qMorCVHoGn=<d z5j~oe&=$ahdZ>*0Gi0h78U%*P5)>`A89~s#&ph|y0Z0#;{gi?4f1kDT|9}J>8vaOI SK?KM%C7`XTuhF1xAN7AXl*?=Y literal 0 HcmV?d00001 diff --git a/src/assets/icons/favicon-144x144.png b/src/assets/icons/favicon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..861e7af4cf2b2133f79d15be6950768f9dc5fe46 GIT binary patch literal 4207 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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/favicon-152x152.png b/src/assets/icons/favicon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..43409c0ab89549d060c411eff727e945ca279942 GIT binary patch literal 4535 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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/favicon-384x384.png b/src/assets/icons/favicon-384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..4ba92e28d8b5775139912a9bdf57f8576b4f0096 GIT binary patch literal 11793 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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/favicon-72x72.png b/src/assets/icons/favicon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..fe9307e8cc762dd456263298857b97e8690a4874 GIT binary patch literal 2171 zcmV->2!!{EP)<h;3K|Lk000e1NJLTq002k;002k`1^@s6RqeA!00004b3#c}2nYxW zd<bNS00009a7bBm000JT000JT0Xs&trT_o{8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H12lz=uK~#90?VEdSQ|B3npL1*+a<LO9*daF(lR&ry0)&LyQtsVa zp+ccZg-sLMw5@B=q_x}rLh3qo)26MRHm#kewa_uGLtQt<b!b2d&_N(TNJ>I3kb6wX zJ;5ZgW1szDFmast*u;(xsvjwm&-Z@*&YPb;f9Ji}0xRE?2s0j%7-|ocPFNrr!UD+< z7D$G$Kr(~{k|8XR3}Jy}2n!@bSRfgE6zI#FjkpQ4^_e+T{_Ry-55LZD_H06}dSn(t z;F>Z}k+$Ydfb1Cwoc`T6NsNy{8>L~zf;9RcSovRhQ;1y*Ev_B(l||`jrl{PE>zA4) z-65sn5~!-N!^2qJ)H$inC=r)H=WjIf?!ik)lJh{mT4m;E`_2I%2w&baNElr(OEGAP zjh;$XV+VGJM07$N22%?4B{xImV<?f-qeoiW`)O(K2f&b(#-bP2pi--8F0W>I$TsO7 zh8hon0E}5PnE$m^#3aPR!;hD#AcvZB*Cy3DB`{{7*iqMvs8+ee0mxjn7)?~fq&cP( z#uUh5cTiJw)opCbR1I0HmrRONN@Cnpqv`rB`rEtR#!Lk{MCzi0?v#=kS0G7}s5*Vw zeX?4`tY`9q?v#@7nyi{D@6g@c<~BBC>0DwAaY1!TNyujNmH)lub}a}3*=v^t%^{^B zD^O>BEA6+N-NusVWfGfY2%1w$!l!!Bty9GyjR?2}fw>zBg5{H<@JXPa)_a&M?zoK^ zveKAlN(qWnO2X%oYvt+7NDhbV+S1vBE-@h}PAQ2oQ;o5(boS6xT20bi6J<xv(OOaK zr4lRQTNTpRd7;B2oA*Y9HX5}?jis{}fTh_<<j$JTkj>7St97(?^ast+5aF54dt<2I z!VnOzi{#^<Zevq^rpsov*?Ie;^SrgM$d~)_Xy>Rzfp2YI!pj>MkZRCzyQP~Cj$Y%F zGZp^07BpNnX<rcpIQHvZY{;AGzK}{}?UD>Sdk45&*@7SlOqr^|VYiR9it|09z(3yJ z!H;&XBqJ$~cwHn}sqwtDZaxXIQJlC`OQ=7Fe(fND!rXM$F3A|zzIS&a@Bixxc8A2u z-CNL2cR$D-b_W;tAEv9(%y+lsv88a%nCtA>p3jMkH4jA!9ey_s3+APIwHx)(%uLY( zVCnAlunVF<Pm42s`TDa9y{`3*uP*Y}y@2DlK(^trJ~E@{IKu%!^jzL<wc)Tk?I{MW z*L6~jI)B{@IDQLs`f8o4us;?xO<mNRdjQZH;yvtY%@k)b4qWrbL(V=K_<aVI)wZ$! z_ziYHpX*_hB#9sX{v_Zmu-!W4p6IGHQxH`mny9G^_F33>tdzps^l|U?;nC~<x)*T# zeu@DczgR<rMor$_6jyt?`CcEpfBtU{pRWSIF>I&5z1!`t?`{XZt?jPj|Bc$aWF+ay zoi*L#9&ha{V*l~d3H)n;!LLAZG}<T)Ihl!A2CRH>=N@*4|4Ru1Y+pN%of~sVHR`Bs z?&5=^*Ex0Nj{KV^$il2dc5cie&8VaPZVw0kQ^u_Zw+5;-A%TL4APAV2=g?SE$*?Vu z?Ivej^~TPX{PL9zh~ncIYuN5!&pRjh<DnAQWWUd#U?K<tk+Cr(WF%uM$RRe_fMeKB z{gpsAEd@3#o5`=fzrmwptX7Hq;q~XZUTvnhq6Lry#eIQl#qJl#-MWt0WM@InRIo7M zf%I$J^2cqbi=x1*+wvb@2lmzzLy{yKM(vguLtFssPR`RLdxrNi&7AaU4_^t&5(uE7 zqyoEb*lo;I;638@9p|p;>>cnrtE2aU>$TzpvJDQ=QtqCAC1$4+rJq<-tu^Xhb@Wfq zdao3G`q^W<;sgS?bMc1TwIB#&ESvvCYYC!A*6PI+es2e+<qH6K@1Ixrylm`m&Ydj2 z%||C5-CvNNC{PSGR?7g>W~LAo_c&M68uio_m%EjH<<J`S<nMZpwA^e2Q9zfNKu28* z_q+P|_*A)5_#{2C(Gk>{dwBQYMP7U7xGR?g$HW4~V3IUHle`_9+{Vg|6wy#3Uq}-~ zk<68g$X=I^sB-_1SRV{heBdZOt?j<Jq1+$T-L0%+pzprhm@kiftx?bFZ@<Xgjmtg6 z0l44Mjcw5Cvmc5I6h|UC95h_M$(#}WH?2`m!i*$38_XW_z3mzRyKR{2vnAaAywqzo zVl;{s2%zC=1+&-WVd?6l_QEyVsv58j4tdPe8ua9DSw~!|am;nP8qJg*`pngA@CQW; zWPLD5*^wez%4=Ljw$Z2~G~~Xxp15SsR``?dnvp2>kRHv71*!aa*DCVnBy)ej%E{u} z{NliQ+PW-6Xrn0n&UU7b`0i3y<6TM*oq3{NGXmvi^CNkA;{yJ&ck76sMmT9{?`QQZ zA5w4bA$8$w7H?aR-Daoy?3D@anh_}XDfWnIu~Gc#C!0OQ0cTD7y*Hi*p!H@g_iCFc zdjBA`7p@0F96;e`5Wwcuvx$k+jB9^3Ka+&mNM}Fpug3x=%p(-PgOU=wcRoZ>V0wHE zK)}U;r$C@ObGKK!ZP-C$+k_5cuP9!iBNwV^>#~e%|NE&g=zm}h+Hd|8FVOt~D?9dn zLZ8JmK)hCE<_Et$;k*b^`~InT%mbtub?kYmU_=~L%byQlW5_1o>74*iM;sJFlphC$ xny^4JgawizERYOgfn*2^Btuvr8Nvd|@PFbosgd1wigN$}002ovPDHLkV1iWEIK=<} literal 0 HcmV?d00001 diff --git a/src/assets/icons/favicon-96x96.png b/src/assets/icons/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..04b85e5c740ca0b532f62153582f541a902f2478 GIT binary patch literal 2874 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 literal 0 HcmV?d00001 diff --git a/src/manifest.webmanifest b/src/manifest.webmanifest index 43b4e9d2b..e00cc7da2 100644 --- a/src/manifest.webmanifest +++ b/src/manifest.webmanifest @@ -8,49 +8,49 @@ "start_url": "./", "icons": [ { - "src": "assets/icons/icon-72x72.png", + "src": "assets/icons/favicon-72x72.png", "sizes": "72x72", "type": "image/png", "purpose": "maskable any" }, { - "src": "assets/icons/icon-96x96.png", + "src": "assets/icons/favicon-96x96.png", "sizes": "96x96", "type": "image/png", "purpose": "maskable any" }, { - "src": "assets/icons/icon-128x128.png", + "src": "assets/icons/favicon-128x128.png", "sizes": "128x128", "type": "image/png", "purpose": "maskable any" }, { - "src": "assets/icons/icon-144x144.png", + "src": "assets/icons/favicon-144x144.png", "sizes": "144x144", "type": "image/png", "purpose": "maskable any" }, { - "src": "assets/icons/icon-152x152.png", + "src": "assets/icons/favicon-152x152.png", "sizes": "152x152", "type": "image/png", "purpose": "maskable any" }, { - "src": "assets/icons/icon-192x192.png", + "src": "assets/icons/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png", "purpose": "maskable any" }, { - "src": "assets/icons/icon-384x384.png", + "src": "assets/icons/favicon-384x384.png", "sizes": "384x384", "type": "image/png", "purpose": "maskable any" }, { - "src": "assets/icons/icon-512x512.png", + "src": "assets/icons/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable any" -- GitLab From 2c44b2b89a6c6880d2bb801503bd99ad65a55937 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Tue, 22 Nov 2022 16:52:36 +0100 Subject: [PATCH 042/285] fix: exclude php files from PWA assets refs #445 --- ngsw-config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/ngsw-config.json b/ngsw-config.json index 5ba7c9a39..7659ccaaf 100644 --- a/ngsw-config.json +++ b/ngsw-config.json @@ -23,6 +23,7 @@ "/MaterialIcons-Regular.1e50f5c2ffa6aba4.eot", "/assets/**", "!/**/*.pdf", + "!/**/*.php", "/*.(svg|cur|jpg|jpeg|png|apng|webp|avif|gif|otf|ttf|woff|woff2)" ] } -- GitLab From 9ac7b7591061ac753e2c768781d6a51132486115 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Tue, 22 Nov 2022 16:53:36 +0100 Subject: [PATCH 043/285] fix: shorten PWA description in manifest refs #445 --- src/manifest.webmanifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/manifest.webmanifest b/src/manifest.webmanifest index e00cc7da2..4d0eb5675 100644 --- a/src/manifest.webmanifest +++ b/src/manifest.webmanifest @@ -1,5 +1,5 @@ { - "name": "Cassiopee, tools for designing fish crossing devices for upstream and downstream migrations and hydraulic calculation for environmental and agricultural engineering", + "name": "Cassiopée", "short_name": "Cassiopee", "theme_color": "#1976d2", "background_color": "#fafafa", -- GitLab From 18f5141fd62492fe3782364a72531f412adc6a6a Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Wed, 23 Nov 2022 11:20:12 +0100 Subject: [PATCH 044/285] feat: localise service worker messages refs #445 --- .../services/internationalisation.service.ts | 36 ++++++++++++------- .../services/service-worker-update.service.ts | 18 +++++----- src/locale/messages.en.json | 3 ++ src/locale/messages.fr.json | 3 ++ 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/app/services/internationalisation.service.ts b/src/app/services/internationalisation.service.ts index 7dddda2a9..af0f2d42e 100644 --- a/src/app/services/internationalisation.service.ts +++ b/src/app/services/internationalisation.service.ts @@ -160,12 +160,12 @@ export class I18nService extends Observable implements Observer { * * @param textKey id du texte (ex: "ERROR_PARAM_NULL") */ - public localizeText(textKey: string) { + public localizeText(textKey: string, vars: {} = {}) { if (! this._Messages) { return `*** messages not loaded: ${this._currentLanguage} ***`; } if (this._Messages[textKey] !== undefined) { - return decodeHtml(this._Messages[textKey]); + return this.translateMessage(this._Messages[textKey], vars); } else { // try general message if (this._Messages !== undefined && this._Messages["INFO_LIB_" + textKey.toUpperCase()] !== undefined) { @@ -176,17 +176,16 @@ export class I18nService extends Observable implements Observer { } /** - * Traduit un Message (classe Message de JaLHyd, pour les logs de calcul par exemple) - * @param r Message - * @param nDigits nombre de chiffres à utiliser pour l'arrondi dans le cas de données numériques + * Translate a text optionally subtituting variables denoted by %XXX% + * @param m message to translate + * @param vars variable map + * @returns translated message with variables value */ - public localizeMessage(r: Message, nDigits: number = 3): string { - let text: string; - let m: string = this.getMessageFromCode(r.code); - // replace %X% by formatted value of extraVar.X - for (const k in r.extraVar) { - if (r.extraVar.hasOwnProperty(k)) { - const v: any = r.extraVar[k]; + private translateMessage(m: string, vars: {}) { + // replace %X% by formatted value of vars.X + for (const k in vars) { + if (vars.hasOwnProperty(k)) { + const v: any = vars[k]; let s: string; // detect variable names to translate if (k === "variables" && Array.isArray(v)) { @@ -248,7 +247,18 @@ export class I18nService extends Observable implements Observer { return this.localizeText(p1); }); - text = decodeHtml(m); + return decodeHtml(m); + } + + /** + * Traduit un Message (classe Message de JaLHyd, pour les logs de calcul par exemple) + * @param r Message + * @param nDigits nombre de chiffres à utiliser pour l'arrondi dans le cas de données numériques + */ + public localizeMessage(r: Message, nDigits: number = 3): string { + let m: string = this.getMessageFromCode(r.code); + + let text: string = this.translateMessage(m, r.extraVar); // prefix message if needed if (r.parent && r.parent.parent && r.parent.parent.sourceNub) { diff --git a/src/app/services/service-worker-update.service.ts b/src/app/services/service-worker-update.service.ts index 0cc5205e4..96b84426a 100644 --- a/src/app/services/service-worker-update.service.ts +++ b/src/app/services/service-worker-update.service.ts @@ -1,32 +1,34 @@ import { Injectable } from "@angular/core"; import { SwUpdate } from '@angular/service-worker'; +import { I18nService } from "./internationalisation.service"; import { NotificationsService } from "./notifications.service"; @Injectable() export class ServiceWorkerUpdateService { constructor( private swUpdate: SwUpdate, - private notificationService: NotificationsService + private notificationService: NotificationsService, + private i18nService: I18nService ) { swUpdate.versionUpdates.subscribe(evt => { switch (evt.type) { case 'VERSION_DETECTED': let ver = evt.version.appData["version"]; - console.log(`new version detected ${ver}`); - notificationService.notify(`Downloading new version: ${ver}`, 10000); + let msg = i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_DETECTED", { "ver": ver }); + notificationService.notify(msg, 10000); break; case 'VERSION_READY': - const currVer = evt.currentVersion.appData["version"]; const newVer = evt.latestVersion.appData["version"]; - console.log(`new version ready ${newVer}, current = ${currVer}`); - notificationService.notify(`New version ready for use: ${newVer}, replacing ${currVer}`, 10000); + // const currVer = evt.currentVersion.appData["version"]; + msg = i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_READY", { "ver": newVer }); + notificationService.notify(msg, 10000); break; case 'VERSION_INSTALLATION_FAILED': ver = evt.version.appData["version"]; - console.log(`version install failed ${ver} : ${evt.error}`); - notificationService.notify(`Failed to install version '${ver}': ${evt.error}`, 10000); + msg = i18nService.localizeText("ERROR_SERVICE_WORKER_INSTALL_FAILED", { "ver": ver }); + notificationService.notify(msg, 10000); break; } }); diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 5171fdefc..4e7499a2b 100755 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -670,6 +670,9 @@ "INFO_ESPECE_TITRE": "Fish species characteristics", "INFO_ESPECE_DESCRIPTION": "ichtyocompatible", "INFO_ESPECE_TITRE_COURT": "Species", + "INFO_SERVICE_WORKER_VERSION_DETECTED": "Downloading Cassiopée version %ver%...", + "INFO_SERVICE_WORKER_VERSION_READY": "Cassiopée version %ver% is ready to be used, please restart.", + "ERROR_SERVICE_WORKER_INSTALL_FAILED": "Cassiopée version %ver% installation failed.", "ERROR_JET_SUBMERGED_NO_SOLUTION": "There is no solution", "WARNING_DEVER_ZDV_INF_ZR": "Apron elevation of structure #%number% is below river bed elevation", "WARNING_JET_START_SUBMERGED": "Water elevation is greater than jet start elevation", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index d41d2edd4..9aa28d5f1 100755 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -671,6 +671,9 @@ "INFO_ESPECE_TITRE": "Caractéristiques d'une espèce", "INFO_ESPECE_DESCRIPTION": "ichtyocompatible", "INFO_ESPECE_TITRE_COURT": "Espèce", + "INFO_SERVICE_WORKER_VERSION_DETECTED": "Téléchargement de la version %ver% de Cassiopée en cours...", + "INFO_SERVICE_WORKER_VERSION_READY": "La version %ver% de Cassiopée est prête à être utilisée, veuillez redémarrer.", + "ERROR_SERVICE_WORKER_INSTALL_FAILED": "Erreur d'installation de Cassiopée version %ver%.", "ERROR_JET_SUBMERGED_NO_SOLUTION": "Il n'y a pas de solution", "WARNING_DEVER_ZDV_INF_ZR": "La cote de radier de l'ouvrage n°%number% est sous la cote de fond du lit", "WARNING_JET_START_SUBMERGED": "La cote de l'eau est supérieure à la cote de départ du jet", -- GitLab From 717a634090a528e9ac8542035d942a8265841552 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Wed, 23 Nov 2022 13:45:23 +0100 Subject: [PATCH 045/285] fix: parametric section generation select: replace x,y by abscissa/water depth refs #496 --- .../select-section-details.component.ts | 8 ++++++-- src/locale/messages.en.json | 2 +- src/locale/messages.fr.json | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/app/components/select-section-details/select-section-details.component.ts b/src/app/components/select-section-details/select-section-details.component.ts index 58516fc2d..f315e94d1 100644 --- a/src/app/components/select-section-details/select-section-details.component.ts +++ b/src/app/components/select-section-details/select-section-details.component.ts @@ -2,6 +2,7 @@ import { Component, Input } from '@angular/core'; import { Router } from '@angular/router'; import { FormulaireDefinition } from 'app/formulaire/definition/form-definition'; import { FormulaireService } from 'app/services/formulaire.service'; +import { I18nService } from 'app/services/internationalisation.service'; import { fv } from 'app/util'; import { formattedValue } from 'jalhyd'; @@ -31,11 +32,14 @@ export class SelectSectionDetailsComponent { constructor( private formulaireService: FormulaireService, - private router: Router + private router: Router, + private intlService: I18nService ) { } public pointLabel(p: any): string { - return "x : " + formattedValue(p.x, 1) + " y : " + fv(p.z); + const abs = this.intlService.localizeText("INFO_REMOUSRESULTS_ABSCISSE"); + const tirant = this.intlService.localizeText("INFO_REMOUSRESULTS_TIRANT"); + return abs + " : " + formattedValue(p.x, 1) + " - " + tirant + " : " + fv(p.z); } /** diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 5171fdefc..ce82a8a71 100755 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -577,7 +577,7 @@ "INFO_REMOUSRESULTS_ABSCISSE": "Abscissa", "INFO_REMOUSRESULTS_BERGE": "Embankment", "INFO_REMOUSRESULTS_FOND": "Bottom", - "INFO_REMOUSRESULTS_TIRANT": "Water depth (m)", + "INFO_REMOUSRESULTS_TIRANT": "Water depth", "INFO_REMOUSRESULTS_TIRANTCRITIQUE": "Critical water level", "INFO_REMOUSRESULTS_TIRANTNORMAL": "Normal water level", "INFO_REPORT_BUG_BODY": "This is an issue report.\n\nPlease describe quickly the issue you encountered, and the steps you followed:\n\n\n\n\n--- Current session state - do not modify text below ---\n------------------------------------------------------------------------\n\n", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index d41d2edd4..618be937a 100755 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -578,7 +578,7 @@ "INFO_REMOUSRESULTS_ABSCISSE": "Abscisse", "INFO_REMOUSRESULTS_BERGE": "Berge", "INFO_REMOUSRESULTS_FOND": "Fond", - "INFO_REMOUSRESULTS_TIRANT": "Tirant d'eau (m)", + "INFO_REMOUSRESULTS_TIRANT": "Tirant d'eau", "INFO_REMOUSRESULTS_TIRANTCRITIQUE": "Tirant d'eau critique", "INFO_REMOUSRESULTS_TIRANTNORMAL": "Tirant d'eau normal", "INFO_REPORT_BUG_BODY": "Ceci est un rapport d'erreur.\n\nMerci de décrire rapidement ci-dessous le problème rencontré, et les étapes qui vous y ont mené:\n\n\n\n\n--- État de la session en cours - ne pas modifier le texte ci-dessous ---\n--------------------------------------------------------------------------------------------\n\n", -- GitLab From 60b323ee568cc8ee14f37a7b1aa5c68a733a7936 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Wed, 23 Nov 2022 13:49:00 +0100 Subject: [PATCH 046/285] fix: parametric section generation select: translate placeholder text refs #496 --- .../select-section-details/select-section-details.component.ts | 2 +- src/locale/messages.en.json | 1 + src/locale/messages.fr.json | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/components/select-section-details/select-section-details.component.ts b/src/app/components/select-section-details/select-section-details.component.ts index f315e94d1..d42b1e86a 100644 --- a/src/app/components/select-section-details/select-section-details.component.ts +++ b/src/app/components/select-section-details/select-section-details.component.ts @@ -56,6 +56,6 @@ export class SelectSectionDetailsComponent { } public get uitextPlaceholder() { - return "Générer une section paramétrée pour..."; + return this.intlService.localizeText("INFO_REMOUSRESULTS_PARAM_SECTION_PLACEHOLDER"); } } diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index ce82a8a71..b6eb8d07f 100755 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -580,6 +580,7 @@ "INFO_REMOUSRESULTS_TIRANT": "Water depth", "INFO_REMOUSRESULTS_TIRANTCRITIQUE": "Critical water level", "INFO_REMOUSRESULTS_TIRANTNORMAL": "Normal water level", + "INFO_REMOUSRESULTS_PARAM_SECTION_PLACEHOLDER": "Generate a parametric section for...", "INFO_REPORT_BUG_BODY": "This is an issue report.\n\nPlease describe quickly the issue you encountered, and the steps you followed:\n\n\n\n\n--- Current session state - do not modify text below ---\n------------------------------------------------------------------------\n\n", "INFO_REPORT_BUG_SUBJECT": "Issue report", "INFO_REQUIRES": "requires", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 618be937a..36110f731 100755 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -581,6 +581,7 @@ "INFO_REMOUSRESULTS_TIRANT": "Tirant d'eau", "INFO_REMOUSRESULTS_TIRANTCRITIQUE": "Tirant d'eau critique", "INFO_REMOUSRESULTS_TIRANTNORMAL": "Tirant d'eau normal", + "INFO_REMOUSRESULTS_PARAM_SECTION_PLACEHOLDER": "Générer une section paramétrée pour...", "INFO_REPORT_BUG_BODY": "Ceci est un rapport d'erreur.\n\nMerci de décrire rapidement ci-dessous le problème rencontré, et les étapes qui vous y ont mené:\n\n\n\n\n--- État de la session en cours - ne pas modifier le texte ci-dessous ---\n--------------------------------------------------------------------------------------------\n\n", "INFO_REPORT_BUG_SUBJECT": "Rapport d'erreur", "INFO_REQUIRES": "dépend de", -- GitLab From 7b0a518cc1ba51e25fdd3d3aefeafa2d7fddbb93 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Wed, 23 Nov 2022 15:25:19 +0100 Subject: [PATCH 047/285] update jalhyd_branch to jalhyd#333 refs #496 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index a210a99ef..3c757134f 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -329-un-parametre-lie-ne-change-pas-d-etat-apres-la-suppression-du-module-cible +333-remous-renommer-la-ligne-d-eau-en-z-et-fournir-le-tirant-d-eau-d-apres-celle-ci -- GitLab From afdd8d48a924166364434f7ee623bfedaf2cc6b4 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Wed, 23 Nov 2022 15:25:43 +0100 Subject: [PATCH 048/285] feat : add water depth to backwater curves results refs #496 --- src/app/calculators/courberemous/en.json | 2 ++ src/app/calculators/courberemous/fr.json | 2 ++ .../pab-profile-chart/pab-profile-chart.component.ts | 2 +- src/app/results/remous-results.ts | 6 +++++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/app/calculators/courberemous/en.json b/src/app/calculators/courberemous/en.json index c238adfb5..8e4ac96ad 100644 --- a/src/app/calculators/courberemous/en.json +++ b/src/app/calculators/courberemous/en.json @@ -26,6 +26,8 @@ "Z2": "Downstream water elevation", "ZF1": "Upstream bottom elevation", "ZF2": "Downstream bottom elevation", + "Y": "Water depth", + "ZW": "Water line (m)", "UNIT_FLU": "m", "UNIT_HS": "m", diff --git a/src/app/calculators/courberemous/fr.json b/src/app/calculators/courberemous/fr.json index 3c8408531..278c16ad4 100644 --- a/src/app/calculators/courberemous/fr.json +++ b/src/app/calculators/courberemous/fr.json @@ -26,6 +26,8 @@ "Z2": "Cote de l'eau à l'aval", "ZF1": "Cote du fond à l'amont", "ZF2": "Cote du fond à l'aval", + "Y" : "Tirant d'eau", + "ZW" : "Ligne d'eau (m)", "UNIT_FLU": "m", "UNIT_HS": "m", diff --git a/src/app/components/pab-profile-chart/pab-profile-chart.component.ts b/src/app/components/pab-profile-chart/pab-profile-chart.component.ts index 35c943ea6..5bbc25c8f 100644 --- a/src/app/components/pab-profile-chart/pab-profile-chart.component.ts +++ b/src/app/components/pab-profile-chart/pab-profile-chart.component.ts @@ -444,7 +444,7 @@ export class PabProfileChartComponent extends ResultsComponentDirective implemen label: ( this._results.variatedParameters.length > 0 ? this.getLegendForSeries(n) : - this.intlService.localizeText("INFO_LIB_Y") // ligne d'eau + this.intlService.localizeText("INFO_LIB_ZW") // ligne d'eau ), color: palette[ n % palette.length ] }); diff --git a/src/app/results/remous-results.ts b/src/app/results/remous-results.ts index 20f412f13..647418012 100644 --- a/src/app/results/remous-results.ts +++ b/src/app/results/remous-results.ts @@ -179,6 +179,9 @@ export class RemousResults extends CalculatorResults { if (!this._hasExtra && re.getValue(this.extraParamSymbol)) { this._hasExtra = true; } + + if (this._hasFlu && this._hasTor && this._hasExtra ) + break; // micro optimisation : pas la peine de continuer à chercher } this._log.clear(); @@ -188,7 +191,8 @@ export class RemousResults extends CalculatorResults { this._varResults.variatedParameters = [ { param: this._xValues, values: this._xValues.paramValues } ]; this._varResults.result = this._result; const keys = []; - keys.push("Y"); // ligne d'eau + keys.push("ZW"); // ligne d'eau + keys.push("Y"); // tirant d'eau if (this._hasFlu) { keys.push("flu"); } -- GitLab From 3b57e02ee30bfe6c7004230f243121e267036a83 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Thu, 24 Nov 2022 11:24:09 +0100 Subject: [PATCH 049/285] fix: remove compilation warnings due to CommmonJS dependencies refs #579 --- angular.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/angular.json b/angular.json index 234f2a317..944803ca4 100644 --- a/angular.json +++ b/angular.json @@ -68,7 +68,14 @@ "lodash", "graphlibrary", "dagre-layout", - "dagre-d3-renderer" + "dagre-d3-renderer", + "dagre", + "dagre-d3", + "@braintree/sanitize-url", + "dompurify", + "graphlib", + "moment-mini", + "sprintf-js" ], "vendorChunk": true, "extractLicenses": false, -- GitLab From 3872e53c2b5f24be812b742c9dbeda866d0b0426 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Thu, 24 Nov 2022 13:59:41 +0100 Subject: [PATCH 050/285] fix: remove compilation warning due to Karma related src/test.ts refs #579 --- src/test.ts | 34 ---------------------------------- src/tsconfig.spec.json | 1 - 2 files changed, 35 deletions(-) delete mode 100644 src/test.ts diff --git a/src/test.ts b/src/test.ts deleted file mode 100644 index 5b4e606cf..000000000 --- a/src/test.ts +++ /dev/null @@ -1,34 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import "zone.js/dist/long-stack-trace-zone"; -import "zone.js/dist/proxy.js"; -import "zone.js/dist/sync-test"; -import "zone.js/dist/jasmine-patch"; -import "zone.js/dist/async-test"; -import "zone.js/dist/fake-async-test"; -import { getTestBed } from "@angular/core/testing"; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from "@angular/platform-browser-dynamic/testing"; - -// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. -declare const __karma__: any; -declare const require: any; - -// Prevent Karma from running prematurely. -__karma__.loaded = function () {}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), { - teardown: { destroyAfterEach: false } -} -); -// Then we find all the tests. -const context = require.context("./", true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); -// Finally, start Karma to run the tests. -__karma__.start(); diff --git a/src/tsconfig.spec.json b/src/tsconfig.spec.json index b019e30f9..814408024 100644 --- a/src/tsconfig.spec.json +++ b/src/tsconfig.spec.json @@ -9,7 +9,6 @@ ] }, "files": [ - "test.ts", "polyfills.ts" ], "include": [ -- GitLab From a80e73fa3e8a41ec9ec6c20b505c48c59901206d Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Thu, 24 Nov 2022 14:32:10 +0100 Subject: [PATCH 051/285] fix: remove karma.conf.js refs #579 --- karma.conf.js | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 karma.conf.js diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index 0840f6ca5..000000000 --- a/karma.conf.js +++ /dev/null @@ -1,31 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage-istanbul-reporter'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client:{ - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - coverageIstanbulReporter: { - dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ], - fixWebpackSourcePaths: true - }, - - reporters: ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false - }); -}; -- GitLab From 9df55df4425ca51437f05d079416e8914d135c3f Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Thu, 24 Nov 2022 14:59:13 +0100 Subject: [PATCH 052/285] fix: compilation warnings about SCSS maximum budget refs #579 --- angular.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/angular.json b/angular.json index 944803ca4..ffba55b07 100644 --- a/angular.json +++ b/angular.json @@ -89,7 +89,7 @@ "budgets": [ { "type": "anyComponentStyle", - "maximumWarning": "10kb" + "maximumWarning": "150kb" } ], "optimization": true, -- GitLab From 79a9780a90daafea2c52770fc1f8cfa13b1c7012 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Thu, 24 Nov 2022 16:12:59 +0100 Subject: [PATCH 053/285] fix: compilation warning about environment.prod.ts refs #579 --- src/tsconfig.app.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json index 265f8b68b..4ff0123d9 100644 --- a/src/tsconfig.app.json +++ b/src/tsconfig.app.json @@ -9,5 +9,8 @@ "files": [ "main.ts", "polyfills.ts" + ], + "exclude": [ + "environments/environment.prod.ts" ] } -- GitLab From ace1eae42dadde1f4644e2745836f70f6b44b4ed Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Thu, 24 Nov 2022 17:15:59 +0100 Subject: [PATCH 054/285] update jalhyd_branch to devel refs #579 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index d9cf99b69..d64531f13 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -328-fusionner-les-select-avec-source-et-les-select_custom +devel -- GitLab From e22c343d6156f8f0be559e376d3197bdea2d8042 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Fri, 25 Nov 2022 11:26:37 +0100 Subject: [PATCH 055/285] ci: remove Android build chain refs #580 --- package-lock.json | 4537 +-------------------------------------------- package.json | 32 - 2 files changed, 33 insertions(+), 4536 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9a33fb245..e2a356148 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,14 +28,6 @@ "@types/sprintf-js": "^1.1.2", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^1.2.1", - "cordova-android": "^11.0.0", - "cordova-plugin-advanced-http": "^3.3.1", - "cordova-plugin-app-version": "^0.1.14", - "cordova-plugin-badge": "^0.8.8", - "cordova-plugin-device": "^2.1.0", - "cordova-plugin-file": "^7.0.0", - "cordova-plugin-file-opener2": "^3.0.5", - "cordova-plugin-local-notification": "^0.9.0-beta.2", "core-js": "^3.23.3", "file-saver": "^2.0.5", "he": "^1.2.0", @@ -74,8 +66,6 @@ "@typescript-eslint/eslint-plugin-tslint": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", "codelyzer": "^6.0.2", - "cordova": "^11.0.0", - "cordova-plugin-androidx-adapter": "^1.1.3", "electron": "^19.0.7", "electron-builder": "^23.1.0", "eslint": "^8.19.0", @@ -3735,16 +3725,6 @@ "node": ">=10" } }, - "node_modules/@netflix/nerror": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@netflix/nerror/-/nerror-1.1.3.tgz", - "integrity": "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==", - "dependencies": { - "assert-plus": "^1.0.0", - "extsprintf": "^1.4.0", - "lodash": "^4.17.15" - } - }, "node_modules/@ngtools/webpack": { "version": "14.2.9", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.9.tgz", @@ -4671,7 +4651,8 @@ "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "node_modules/accepts": { "version": "1.3.8", @@ -4885,22 +4866,6 @@ "node": ">=0.4.2" } }, - "node_modules/android-versions": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.8.1.tgz", - "integrity": "sha512-5a0YyylAk6pPM2Ezi0vWaPPNbS6tSNRs+micbgk5NpHEN5YW1ez+T94G5orysfwBEBDMHoxm5GNc5ZDUPgRrhw==", - "dependencies": { - "semver": "^5.7.1" - } - }, - "node_modules/android-versions/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/angular2-hotkeys": { "version": "13.1.0", "resolved": "https://registry.npmjs.org/angular2-hotkeys/-/angular2-hotkeys-13.1.0.tgz", @@ -4911,20 +4876,6 @@ "tslib": "^2.3.1" } }, - "node_modules/ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==" - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -5191,15 +5142,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -5361,6 +5303,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "devOptional": true, "engines": { "node": ">=0.8" } @@ -5441,17 +5384,9 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atomically": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", - "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", "dev": true, "engines": { - "node": ">=10.12.0" + "node": ">= 4.0.0" } }, "node_modules/autoprefixer": { @@ -5660,14 +5595,6 @@ "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", "dev": true }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -5820,133 +5747,6 @@ "dev": true, "optional": true }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/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/boxen/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/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/boxen/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/boxen/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/boxen/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/boxen/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/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -6290,12 +6090,6 @@ "node": ">=0.10.0" } }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -6594,18 +6388,6 @@ "node": ">=6" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -6712,15 +6494,6 @@ "integrity": "sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==", "dev": true }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/codelyzer": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", @@ -6963,45 +6736,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/conf": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", - "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", - "dev": true, - "dependencies": { - "ajv": "^8.6.3", - "ajv-formats": "^2.1.1", - "atomically": "^1.7.0", - "debounce-fn": "^4.0.0", - "dot-prop": "^6.0.1", - "env-paths": "^2.2.1", - "json-schema-typed": "^7.0.3", - "onetime": "^5.1.2", - "pkg-up": "^3.1.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conf/node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -7020,23 +6754,6 @@ "dev": true, "optional": true }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", @@ -7229,923 +6946,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cordova": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/cordova/-/cordova-11.0.0.tgz", - "integrity": "sha512-Hu2YeT0naeP/1sEm/xfJYUsXN48XV6zagxbi1+4q0Ei9c5TKsIq8v4EWukvSHF4UO2pnh+9ViaDlGMcS1Wrnfg==", - "dev": true, - "dependencies": { - "configstore": "^5.0.1", - "cordova-common": "^4.0.2", - "cordova-create": "^4.0.0", - "cordova-lib": "^11.0.0", - "editor": "^1.0.0", - "execa": "^5.1.1", - "fs-extra": "^10.0.0", - "insight": "^0.11.1", - "loud-rejection": "^2.2.0", - "nopt": "^5.0.0", - "semver": "^7.3.5", - "systeminformation": "^5.9.17", - "update-notifier": "^5.1.0" - }, - "bin": { - "cordova": "bin/cordova" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/cordova-android": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-11.0.0.tgz", - "integrity": "sha512-ZhvSF5BYY8gmrAu1PtMPdHFsRoom/emT4OtTcecmh3Zj22900y4Golg5whhBPcYcTPC7BU6PG/EmG9BBHcX9tQ==", - "dependencies": { - "android-versions": "^1.7.0", - "cordova-common": "^4.0.2", - "execa": "^5.1.1", - "fast-glob": "^3.2.11", - "fs-extra": "^10.1.0", - "is-path-inside": "^3.0.3", - "nopt": "^5.0.0", - "properties-parser": "^0.3.1", - "semver": "^7.3.7", - "untildify": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/cordova-app-hello-world": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cordova-app-hello-world/-/cordova-app-hello-world-6.0.0.tgz", - "integrity": "sha512-wPZsm+fzNUwdiTRODT+fQuPV410RNmd3Buiw63vT8BPxjC+cn6Bu8emrgwrDM4pbmU5sa5Unwu3xPcbQGQ3G3g==", - "dev": true - }, - "node_modules/cordova-common": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-4.1.0.tgz", - "integrity": "sha512-sYfOSfpYGQOmUDlsARUbpT/EvVKT/E+GI3zwTXt+C6DjZ7xs6ZQVHs3umHKSidjf9yVM2LLmvGFpGrGX7aGxug==", - "dependencies": { - "@netflix/nerror": "^1.1.3", - "ansi": "^0.3.1", - "bplist-parser": "^0.2.0", - "cross-spawn": "^7.0.1", - "elementtree": "^0.1.7", - "endent": "^1.4.1", - "fast-glob": "^3.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "plist": "^3.0.1", - "q": "^1.5.1", - "read-chunk": "^3.2.0", - "strip-bom": "^4.0.0", - "underscore": "^1.9.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/cordova-common/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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/cordova-common/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-common/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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/cordova-common/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/cordova-create": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cordova-create/-/cordova-create-4.0.0.tgz", - "integrity": "sha512-t/4zaDZ4ZsFpC7j6x7s9hR9OeEo8nD2m7rSrzV2PUEfA4BPQujkmk0AIC+5iBvjfR7+ReHOHKsY/NfB1LnMQxQ==", - "dev": true, - "dependencies": { - "cordova-app-hello-world": "^6.0.0", - "cordova-common": "^4.0.2", - "cordova-fetch": "^3.0.1", - "fs-extra": "^10.0.0", - "globby": "^11.0.4", - "import-fresh": "^3.3.0", - "isobject": "^4.0.0", - "npm-package-arg": "^8.1.5", - "path-is-inside": "^1.0.2", - "tmp": "^0.2.1", - "valid-identifier": "0.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-create/node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cordova-fetch/-/cordova-fetch-3.0.1.tgz", - "integrity": "sha512-bxXk6H3FtGXpCtlO+XyXM4pa72azQomdurNeHbZai9eYBzA5vjyPnsgxsYcylLUc1wQFeR+XWQVfgJitx6ghEw==", - "dev": true, - "dependencies": { - "cordova-common": "^4.0.0", - "fs-extra": "^9.0.0", - "npm-package-arg": "^8.0.1", - "pacote": "^11.1.11", - "pify": "^5.0.0", - "resolve": "^1.15.1", - "semver": "^7.1.3", - "which": "^2.0.2" - }, - "engines": { - "node": ">= 10", - "npm": ">= 5.6.0" - } - }, - "node_modules/cordova-fetch/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/cordova-fetch/node_modules/@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "node_modules/cordova-fetch/node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-fetch/node_modules/@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true - }, - "node_modules/cordova-fetch/node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "dependencies": { - "infer-owner": "^1.0.4" - } - }, - "node_modules/cordova-fetch/node_modules/@npmcli/run-script": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", - "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" - } - }, - "node_modules/cordova-fetch/node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cordova-fetch/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cordova-fetch/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/cordova-fetch/node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/cordova-fetch/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/cordova-fetch/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cordova-fetch/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-fetch/node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/cordova-fetch/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/cordova-fetch/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cordova-fetch/node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/cordova-fetch/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cordova-fetch/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-fetch/node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cordova-fetch/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/cordova-fetch/node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/cordova-fetch/node_modules/node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/cordova-fetch/node_modules/npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-fetch/node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-fetch/node_modules/npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "dev": true, - "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-fetch/node_modules/npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "node_modules/cordova-fetch/node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-fetch/node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/cordova-fetch/node_modules/pacote": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", - "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", - "dev": true, - "dependencies": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cordova-fetch/node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cordova-fetch/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cordova-fetch/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cordova-fetch/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cordova-lib": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/cordova-lib/-/cordova-lib-11.0.0.tgz", - "integrity": "sha512-3XSCIAlS060/hzxWKDrF+sMfv3PVU8bglCaL31HMCyj3YrZn1CZhqrRRrW5lwRxtz7Sh4XCxv97rNxF38uj9hg==", - "dev": true, - "dependencies": { - "cordova-common": "^4.0.2", - "cordova-fetch": "^3.0.1", - "cordova-serve": "^4.0.0", - "dep-graph": "^1.1.0", - "detect-indent": "^6.1.0", - "detect-newline": "^3.1.0", - "elementtree": "^0.1.7", - "execa": "^5.1.1", - "fs-extra": "^10.0.0", - "globby": "^11.0.4", - "init-package-json": "^2.0.5", - "md5-file": "^5.0.0", - "pify": "^5.0.0", - "semver": "^7.3.5", - "stringify-package": "^1.0.1", - "write-file-atomic": "^3.0.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cordova-plugin-advanced-http": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/cordova-plugin-advanced-http/-/cordova-plugin-advanced-http-3.3.1.tgz", - "integrity": "sha512-hESuB3mxIHCUrzb5lm7juda6PSNcC5N8Invizj5wGV2rSldCapiNxMTEpzKR1UVPDDP2XOtBzO0SAYS+3+g/ig==", - "engines": [ - { - "name": "cordova", - "version": ">=4.0.0" - } - ] - }, - "node_modules/cordova-plugin-androidx-adapter": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cordova-plugin-androidx-adapter/-/cordova-plugin-androidx-adapter-1.1.3.tgz", - "integrity": "sha512-W1SImn0cCCvOSTSfWWp5TnanIQrSuh2Bch+dcZXIzEn0km3Qb7VryeAqHhgBQYwwzC5Ollk1DtUAk/AJSojuZA==", - "dev": true, - "dependencies": { - "q": "^1.5.1", - "recursive-readdir": "^2.2.2" - } - }, - "node_modules/cordova-plugin-app-version": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/cordova-plugin-app-version/-/cordova-plugin-app-version-0.1.14.tgz", - "integrity": "sha512-HN6Yz6IIdRO+iMvCHN/qMe8/O4miOpHH/pDtWNjIYTjV3MzP+XdzFJoFnq2zxlNNXFz0Zn8REGQhFY77vV4AWQ==" - }, - "node_modules/cordova-plugin-badge": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/cordova-plugin-badge/-/cordova-plugin-badge-0.8.8.tgz", - "integrity": "sha512-RhIBtd5xhD/iLnxjt35jvOae28oNW/wtMZBOmQR3Rf0y4wirvA1bpAZEhBoFqL+rZGhsd6ddOdQXdex1T0DRyQ==", - "engines": [ - { - "name": "cordova", - "version": ">=6.0.0" - }, - { - "name": "apple-ios", - "version": ">=10.0.0" - }, - { - "name": "cordova-android", - "version": ">=4" - }, - { - "name": "cordova-plugman", - "version": ">=4.2.0" - } - ] - }, - "node_modules/cordova-plugin-device": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.1.0.tgz", - "integrity": "sha512-FU0Lw1jZpuKOgG4v80LrfMAOIMCGfAVPumn7AwaX9S1iU/X3OPZUyoKUgP09q4bxL35IeNPkqNWVKYduAXZ1sg==", - "engines": { - "cordovaDependencies": { - "3.0.0": { - "cordova": ">100", - "cordova-electron": ">=3.0.0" - } - } - } - }, - "node_modules/cordova-plugin-file": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-7.0.0.tgz", - "integrity": "sha512-mSwy9GE5pHq2ZHhu/wYk/VhrwR5VLk+XQsk3+IiiFmDgcPsrVIyELkM2FZKX09cC6i+bJVTFVKUlwteSStj3ow==", - "engines": { - "cordovaDependencies": { - "5.0.0": { - "cordova-android": ">=6.3.0" - }, - "7.0.0": { - "cordova-android": ">=10.0.0" - }, - "8.0.0": { - "cordova": ">100" - } - } - } - }, - "node_modules/cordova-plugin-file-opener2": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/cordova-plugin-file-opener2/-/cordova-plugin-file-opener2-3.0.5.tgz", - "integrity": "sha512-tjLHDamH5+y0bJZYVe2967L1S4R8tL4Y0rJUzJGoxsyiw3FUlrJNS199POOpzZZ6Xhlntn9a2o7+84r1dMN21A==", - "engines": { - "cordova": ">=6.0.0" - } - }, - "node_modules/cordova-plugin-local-notification": { - "version": "0.9.0-beta.2", - "resolved": "https://registry.npmjs.org/cordova-plugin-local-notification/-/cordova-plugin-local-notification-0.9.0-beta.2.tgz", - "integrity": "sha512-63n77K1pt8dnbWnNR8QWETi9Glezi1bvNHvHWmGNIOv0xCb0phZnm+Ku49BQ+omwe8Z5voMvrA4I03SYPpv38w==", - "engines": [ - { - "name": "cordova", - "version": ">=3.6.0" - }, - { - "name": "cordova-android", - "version": ">=6.0.0" - }, - { - "name": "cordova-windows", - "version": ">=4.2.0" - }, - { - "name": "android-sdk", - "version": ">=26" - }, - { - "name": "apple-ios", - "version": ">=10.0.0" - } - ] - }, - "node_modules/cordova-serve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.0.tgz", - "integrity": "sha512-gzTLeBQzNP8aM/nG0/7sSfICfNazUgwvEU2kiDaybbYXmxwioo2v96h4tzE0XOyA64beyYwAyRYEEqWA4AMZjw==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "compression": "^1.7.4", - "express": "^4.17.1", - "open": "^7.0.3", - "which": "^2.0.2" - }, - "engines": { - "node": ">= 10", - "npm": ">= 5.6.0" - } - }, - "node_modules/cordova-serve/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/cordova-serve/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cordova-serve/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/cordova-serve/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/cordova-serve/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/cordova-serve/node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cordova-serve/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/core-js": { "version": "3.26.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", @@ -8408,15 +7208,6 @@ "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", "dev": true }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/css-blank-pseudo": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", @@ -8556,18 +7347,6 @@ "node": ">=4" } }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -9291,21 +8070,6 @@ "node": ">=0.10" } }, - "node_modules/debounce-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", - "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -9352,11 +8116,6 @@ "node": ">=4" } }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, "node_modules/deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -9374,15 +8133,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -9579,27 +8329,6 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, - "node_modules/dep-graph": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz", - "integrity": "sha512-/6yUWlSH0Uevjj6HWvO86rDeFzuYfzbaKDqifTEemwfwEPyBrODTb3ox/jFzqmc2+UmgJ3IDMS88BKEBh1Nm2Q==", - "dev": true, - "dependencies": { - "underscore": "1.2.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dep-graph/node_modules/underscore": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz", - "integrity": "sha512-HRhh6FYh5I5/zTt7L9MnHRA/nlSFPiwymMCXEremmzT7tHR+8CNP0FXHPaUpafAPwvAlNrvZiH91kQwoo/CqUA==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -9625,24 +8354,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -9922,18 +8633,6 @@ "dottojs": "bin/dot-packer" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dotenv": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", @@ -9980,12 +8679,6 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/editor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", - "integrity": "sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==", - "dev": true - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -10266,22 +8959,6 @@ "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", "dev": true }, - "node_modules/elementtree": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", - "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", - "dependencies": { - "sax": "1.1.4" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/elementtree/node_modules/sax": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", - "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==" - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -10327,16 +9004,6 @@ "once": "^1.4.0" } }, - "node_modules/endent": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz", - "integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==", - "dependencies": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.4" - } - }, "node_modules/enhanced-resolve": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", @@ -10915,15 +9582,6 @@ "node": ">=6" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -11939,9 +10597,11 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, "engines": [ "node >=0.6.0" - ] + ], + "optional": true }, "node_modules/fancy-log": { "version": "2.0.0", @@ -11980,11 +10640,6 @@ "node": ">=8.6.0" } }, - "node_modules/fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -12288,6 +10943,7 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -12525,30 +11181,6 @@ "node": ">=10.0" } }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/global-tunnel-ng": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", @@ -12922,15 +11554,6 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/hdr-histogram-js": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", @@ -13426,15 +12049,6 @@ "node": ">=4" } }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -13479,38 +12093,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/init-package-json": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", - "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", - "dev": true, - "dependencies": { - "npm-package-arg": "^8.1.5", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/inquirer": { "version": "8.2.4", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", @@ -13606,343 +12188,6 @@ "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", "dev": true }, - "node_modules/insight": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/insight/-/insight-0.11.1.tgz", - "integrity": "sha512-TBcZ0qC9dgdmcxL93OoqkY/RZXJtIi0i07phX/QyYk2ysmJtZex59dgTj4Doq50N9CG9dLRe/RIudc/5CCoFNw==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "chalk": "^4.1.1", - "conf": "^10.0.1", - "inquirer": "^6.3.1", - "lodash.debounce": "^4.0.8", - "os-name": "^4.0.1", - "request": "^2.88.0", - "tough-cookie": "^4.0.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/insight/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/insight/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/insight/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/insight/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight/node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "node_modules/insight/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/insight/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/insight/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight/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/insight/node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/insight/node_modules/inquirer/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/insight/node_modules/inquirer/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/insight/node_modules/inquirer/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/insight/node_modules/inquirer/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/insight/node_modules/inquirer/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/insight/node_modules/inquirer/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/insight/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight/node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, - "node_modules/insight/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/insight/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight/node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/insight/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/insight/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/insight/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -14130,22 +12375,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -14172,18 +12401,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -14207,15 +12424,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -14253,6 +12461,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -14401,12 +12610,6 @@ "node": ">=8" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -14429,15 +12632,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -14860,12 +13054,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/json-schema-typed": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", - "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", - "dev": true - }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -14898,6 +13086,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -15037,18 +13226,6 @@ "node": ">= 8" } }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/lazy-val": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", @@ -15340,19 +13517,6 @@ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", "dev": true }, - "node_modules/loud-rejection": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", - "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", - "dev": true, - "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -15507,18 +13671,6 @@ "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz", "integrity": "sha512-Bt+SSVU8eBG27zChVewOicYs7Xsdt40qm4+UpHyX7k0/O9NliPc+x77k1/FEsPsjKPZGJvtRZM1vO+geW0OhGw==" }, - "node_modules/md5-file": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz", - "integrity": "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==", - "dev": true, - "bin": { - "md5-file": "cli.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -15653,15 +13805,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -16180,35 +14323,6 @@ "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -16442,15 +14556,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -16537,11 +14642,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/objectorarray": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", - "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==" - }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -16765,14 +14865,6 @@ "node": ">=6" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -16840,30 +14932,6 @@ "node": ">=6" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/pacote": { "version": "13.6.2", "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", @@ -17181,18 +15249,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -17238,68 +15294,11 @@ "node": ">=8" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/plist": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", + "dev": true, "dependencies": { "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" @@ -18078,26 +16077,6 @@ "node": ">=10" } }, - "node_modules/promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", - "dev": true, - "dependencies": { - "read": "1" - } - }, - "node_modules/properties-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz", - "integrity": "sha512-AkSQxQAviJ89x4FIxOyHGfO3uund0gvYo7lfD0E+Gp7gFQKrTNgtoYQklu8EhrfHVZUzTwKGZx2r/KDSfnljcA==", - "dependencies": { - "string.prototype.codepointat": "^0.2.0" - }, - "engines": { - "node": ">= 0.3.1" - } - }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -18473,22 +16452,11 @@ "node": ">=6" } }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "devOptional": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -18508,12 +16476,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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 - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -18605,48 +16567,6 @@ "node": ">=0.10.0" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -18663,26 +16583,6 @@ "node": ">=0.10.0" } }, - "node_modules/read-chunk": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz", - "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==", - "dependencies": { - "pify": "^4.0.1", - "with-open-file": "^0.1.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/read-chunk/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, "node_modules/read-config-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", @@ -18717,21 +16617,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/read-package-json": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", - "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", - "dev": true, - "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/read-package-json-fast": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", @@ -18745,48 +16630,6 @@ "node": ">=10" } }, - "node_modules/read-package-json/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/read-package-json/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/read-package-json/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/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -18812,40 +16655,6 @@ "node": ">=8.10.0" } }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/recursive-readdir/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/recursive-readdir/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/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -18930,30 +16739,6 @@ "node": ">=4" } }, - "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "dev": true, - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/regjsgen": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", @@ -19784,27 +17569,6 @@ "dev": true, "optional": true }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/semver-dsl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", @@ -20668,11 +18432,6 @@ "node": ">=8" } }, - "node_modules/string.prototype.codepointat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", - "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" - }, "node_modules/string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -20701,13 +18460,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stringify-package": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", - "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", - "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json", - "dev": true - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -20719,14 +18471,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -20881,32 +18625,6 @@ "node": ">=0.10" } }, - "node_modules/systeminformation": { - "version": "5.12.15", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.15.tgz", - "integrity": "sha512-LMctTV27bGqWMBsuhzvNTH3roKOQonTN730F9v0x9YtoYducXcobs0rg3QKNnWDyHJyWIgKY6FiHlFcXJYclTQ==", - "dev": true, - "os": [ - "darwin", - "linux", - "win32", - "freebsd", - "openbsd", - "netbsd", - "sunos", - "android" - ], - "bin": { - "systeminformation": "lib/cli.js" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "Buy me a coffee", - "url": "https://www.buymeacoffee.com/systeminfo" - } - }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -21195,30 +18913,6 @@ "node": ">=0.6" } }, - "node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/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, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/traverse": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", @@ -21579,15 +19273,6 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typedoc": { "version": "0.23.21", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.21.tgz", @@ -21649,11 +19334,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -21743,22 +19423,11 @@ "imurmurhash": "^0.1.4" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "engines": { "node": ">= 10.0.0" } @@ -21777,14 +19446,6 @@ "node": ">= 0.8" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "engines": { - "node": ">=8" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -21810,122 +19471,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/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/update-notifier/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/update-notifier/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/update-notifier/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/update-notifier/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/update-notifier/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/update-notifier/node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/update-notifier/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/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -21939,16 +19484,6 @@ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, - "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, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -21994,12 +19529,6 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, - "node_modules/valid-identifier": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/valid-identifier/-/valid-identifier-0.0.2.tgz", - "integrity": "sha512-zaSmOW6ykXwrkX0YTuFUSoALNEKGaQHpxBJQLb3TXspRNDpBwbfrIQCZqAQ0LKBlKuyn2YOq7NNd6415hvZ33g==", - "dev": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -22010,15 +19539,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -22602,18 +20122,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -22681,27 +20189,6 @@ "node": ">=8.12.0" } }, - "node_modules/with-open-file": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", - "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", - "dependencies": { - "p-finally": "^1.0.0", - "p-try": "^2.1.0", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/with-open-file/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, "node_modules/wmf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", @@ -22784,18 +20271,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/ws": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", @@ -22816,15 +20291,6 @@ } } }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/xlsx": { "version": "0.18.5", "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", @@ -22871,6 +20337,7 @@ "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, "engines": { "node": ">=8.0" } @@ -25464,16 +22931,6 @@ } } }, - "@netflix/nerror": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@netflix/nerror/-/nerror-1.1.3.tgz", - "integrity": "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==", - "requires": { - "assert-plus": "^1.0.0", - "extsprintf": "^1.4.0", - "lodash": "^4.17.15" - } - }, "@ngtools/webpack": { "version": "14.2.9", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.9.tgz", @@ -26241,7 +23698,8 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "accepts": { "version": "1.3.8", @@ -26397,21 +23855,6 @@ "dev": true, "optional": true }, - "android-versions": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.8.1.tgz", - "integrity": "sha512-5a0YyylAk6pPM2Ezi0vWaPPNbS6tSNRs+micbgk5NpHEN5YW1ez+T94G5orysfwBEBDMHoxm5GNc5ZDUPgRrhw==", - "requires": { - "semver": "^5.7.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, "angular2-hotkeys": { "version": "13.1.0", "resolved": "https://registry.npmjs.org/angular2-hotkeys/-/angular2-hotkeys-13.1.0.tgz", @@ -26422,20 +23865,6 @@ "tslib": "^2.3.1" } }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==" - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, "ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -26656,12 +24085,6 @@ } } }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -26782,7 +24205,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "devOptional": true }, "ast-transform": { "version": "0.0.0", @@ -26845,12 +24269,7 @@ "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "atomically": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", - "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, "autoprefixer": { @@ -26999,11 +24418,6 @@ "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", "dev": true }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -27137,93 +24551,6 @@ "dev": true, "optional": true }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.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" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "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" - } - }, - "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": "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" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "requires": { - "big-integer": "^1.6.44" - } - }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -27495,12 +24822,6 @@ "dev": true, "peer": true }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -27719,12 +25040,6 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -27804,12 +25119,6 @@ "integrity": "sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==", "dev": true }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true - }, "codelyzer": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", @@ -28002,35 +25311,6 @@ "typedarray": "^0.0.6" } }, - "conf": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", - "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", - "dev": true, - "requires": { - "ajv": "^8.6.3", - "ajv-formats": "^2.1.1", - "atomically": "^1.7.0", - "debounce-fn": "^4.0.0", - "dot-prop": "^6.0.1", - "env-paths": "^2.2.1", - "json-schema-typed": "^7.0.3", - "onetime": "^5.1.2", - "pkg-up": "^3.1.0", - "semver": "^7.3.5" - }, - "dependencies": { - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - } - } - }, "config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -28051,20 +25331,6 @@ } } }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, "connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", @@ -28199,715 +25465,6 @@ } } }, - "cordova": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/cordova/-/cordova-11.0.0.tgz", - "integrity": "sha512-Hu2YeT0naeP/1sEm/xfJYUsXN48XV6zagxbi1+4q0Ei9c5TKsIq8v4EWukvSHF4UO2pnh+9ViaDlGMcS1Wrnfg==", - "dev": true, - "requires": { - "configstore": "^5.0.1", - "cordova-common": "^4.0.2", - "cordova-create": "^4.0.0", - "cordova-lib": "^11.0.0", - "editor": "^1.0.0", - "execa": "^5.1.1", - "fs-extra": "^10.0.0", - "insight": "^0.11.1", - "loud-rejection": "^2.2.0", - "nopt": "^5.0.0", - "semver": "^7.3.5", - "systeminformation": "^5.9.17", - "update-notifier": "^5.1.0" - } - }, - "cordova-android": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-11.0.0.tgz", - "integrity": "sha512-ZhvSF5BYY8gmrAu1PtMPdHFsRoom/emT4OtTcecmh3Zj22900y4Golg5whhBPcYcTPC7BU6PG/EmG9BBHcX9tQ==", - "requires": { - "android-versions": "^1.7.0", - "cordova-common": "^4.0.2", - "execa": "^5.1.1", - "fast-glob": "^3.2.11", - "fs-extra": "^10.1.0", - "is-path-inside": "^3.0.3", - "nopt": "^5.0.0", - "properties-parser": "^0.3.1", - "semver": "^7.3.7", - "untildify": "^4.0.0", - "which": "^2.0.2" - } - }, - "cordova-app-hello-world": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cordova-app-hello-world/-/cordova-app-hello-world-6.0.0.tgz", - "integrity": "sha512-wPZsm+fzNUwdiTRODT+fQuPV410RNmd3Buiw63vT8BPxjC+cn6Bu8emrgwrDM4pbmU5sa5Unwu3xPcbQGQ3G3g==", - "dev": true - }, - "cordova-common": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-4.1.0.tgz", - "integrity": "sha512-sYfOSfpYGQOmUDlsARUbpT/EvVKT/E+GI3zwTXt+C6DjZ7xs6ZQVHs3umHKSidjf9yVM2LLmvGFpGrGX7aGxug==", - "requires": { - "@netflix/nerror": "^1.1.3", - "ansi": "^0.3.1", - "bplist-parser": "^0.2.0", - "cross-spawn": "^7.0.1", - "elementtree": "^0.1.7", - "endent": "^1.4.1", - "fast-glob": "^3.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "plist": "^3.0.1", - "q": "^1.5.1", - "read-chunk": "^3.2.0", - "strip-bom": "^4.0.0", - "underscore": "^1.9.2" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "cordova-create": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cordova-create/-/cordova-create-4.0.0.tgz", - "integrity": "sha512-t/4zaDZ4ZsFpC7j6x7s9hR9OeEo8nD2m7rSrzV2PUEfA4BPQujkmk0AIC+5iBvjfR7+ReHOHKsY/NfB1LnMQxQ==", - "dev": true, - "requires": { - "cordova-app-hello-world": "^6.0.0", - "cordova-common": "^4.0.2", - "cordova-fetch": "^3.0.1", - "fs-extra": "^10.0.0", - "globby": "^11.0.4", - "import-fresh": "^3.3.0", - "isobject": "^4.0.0", - "npm-package-arg": "^8.1.5", - "path-is-inside": "^1.0.2", - "tmp": "^0.2.1", - "valid-identifier": "0.0.2" - }, - "dependencies": { - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - } - } - }, - "cordova-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cordova-fetch/-/cordova-fetch-3.0.1.tgz", - "integrity": "sha512-bxXk6H3FtGXpCtlO+XyXM4pa72azQomdurNeHbZai9eYBzA5vjyPnsgxsYcylLUc1wQFeR+XWQVfgJitx6ghEw==", - "dev": true, - "requires": { - "cordova-common": "^4.0.0", - "fs-extra": "^9.0.0", - "npm-package-arg": "^8.0.1", - "pacote": "^11.1.11", - "pify": "^5.0.0", - "resolve": "^1.15.1", - "semver": "^7.1.3", - "which": "^2.0.2" - }, - "dependencies": { - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", - "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" - } - }, - "@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 - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "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" - } - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "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" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - } - }, - "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" - } - }, - "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - } - }, - "npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "requires": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "pacote": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", - "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", - "dev": true, - "requires": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - } - }, - "socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "cordova-lib": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/cordova-lib/-/cordova-lib-11.0.0.tgz", - "integrity": "sha512-3XSCIAlS060/hzxWKDrF+sMfv3PVU8bglCaL31HMCyj3YrZn1CZhqrRRrW5lwRxtz7Sh4XCxv97rNxF38uj9hg==", - "dev": true, - "requires": { - "cordova-common": "^4.0.2", - "cordova-fetch": "^3.0.1", - "cordova-serve": "^4.0.0", - "dep-graph": "^1.1.0", - "detect-indent": "^6.1.0", - "detect-newline": "^3.1.0", - "elementtree": "^0.1.7", - "execa": "^5.1.1", - "fs-extra": "^10.0.0", - "globby": "^11.0.4", - "init-package-json": "^2.0.5", - "md5-file": "^5.0.0", - "pify": "^5.0.0", - "semver": "^7.3.5", - "stringify-package": "^1.0.1", - "write-file-atomic": "^3.0.3" - } - }, - "cordova-plugin-advanced-http": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/cordova-plugin-advanced-http/-/cordova-plugin-advanced-http-3.3.1.tgz", - "integrity": "sha512-hESuB3mxIHCUrzb5lm7juda6PSNcC5N8Invizj5wGV2rSldCapiNxMTEpzKR1UVPDDP2XOtBzO0SAYS+3+g/ig==" - }, - "cordova-plugin-androidx-adapter": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cordova-plugin-androidx-adapter/-/cordova-plugin-androidx-adapter-1.1.3.tgz", - "integrity": "sha512-W1SImn0cCCvOSTSfWWp5TnanIQrSuh2Bch+dcZXIzEn0km3Qb7VryeAqHhgBQYwwzC5Ollk1DtUAk/AJSojuZA==", - "dev": true, - "requires": { - "q": "^1.5.1", - "recursive-readdir": "^2.2.2" - } - }, - "cordova-plugin-app-version": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/cordova-plugin-app-version/-/cordova-plugin-app-version-0.1.14.tgz", - "integrity": "sha512-HN6Yz6IIdRO+iMvCHN/qMe8/O4miOpHH/pDtWNjIYTjV3MzP+XdzFJoFnq2zxlNNXFz0Zn8REGQhFY77vV4AWQ==" - }, - "cordova-plugin-badge": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/cordova-plugin-badge/-/cordova-plugin-badge-0.8.8.tgz", - "integrity": "sha512-RhIBtd5xhD/iLnxjt35jvOae28oNW/wtMZBOmQR3Rf0y4wirvA1bpAZEhBoFqL+rZGhsd6ddOdQXdex1T0DRyQ==" - }, - "cordova-plugin-device": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.1.0.tgz", - "integrity": "sha512-FU0Lw1jZpuKOgG4v80LrfMAOIMCGfAVPumn7AwaX9S1iU/X3OPZUyoKUgP09q4bxL35IeNPkqNWVKYduAXZ1sg==" - }, - "cordova-plugin-file": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-7.0.0.tgz", - "integrity": "sha512-mSwy9GE5pHq2ZHhu/wYk/VhrwR5VLk+XQsk3+IiiFmDgcPsrVIyELkM2FZKX09cC6i+bJVTFVKUlwteSStj3ow==" - }, - "cordova-plugin-file-opener2": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/cordova-plugin-file-opener2/-/cordova-plugin-file-opener2-3.0.5.tgz", - "integrity": "sha512-tjLHDamH5+y0bJZYVe2967L1S4R8tL4Y0rJUzJGoxsyiw3FUlrJNS199POOpzZZ6Xhlntn9a2o7+84r1dMN21A==" - }, - "cordova-plugin-local-notification": { - "version": "0.9.0-beta.2", - "resolved": "https://registry.npmjs.org/cordova-plugin-local-notification/-/cordova-plugin-local-notification-0.9.0-beta.2.tgz", - "integrity": "sha512-63n77K1pt8dnbWnNR8QWETi9Glezi1bvNHvHWmGNIOv0xCb0phZnm+Ku49BQ+omwe8Z5voMvrA4I03SYPpv38w==" - }, - "cordova-serve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.0.tgz", - "integrity": "sha512-gzTLeBQzNP8aM/nG0/7sSfICfNazUgwvEU2kiDaybbYXmxwioo2v96h4tzE0XOyA64beyYwAyRYEEqWA4AMZjw==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "compression": "^1.7.4", - "express": "^4.17.1", - "open": "^7.0.3", - "which": "^2.0.2" - }, - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "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" - } - } - } - }, "core-js": { "version": "3.26.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", @@ -29106,12 +25663,6 @@ "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", "dev": true }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, "css-blank-pseudo": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", @@ -29196,15 +25747,6 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, "d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -29805,15 +26347,6 @@ "assert-plus": "^1.0.0" } }, - "debounce-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", - "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", - "dev": true, - "requires": { - "mimic-fn": "^3.0.0" - } - }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -29846,11 +26379,6 @@ "mimic-response": "^1.0.0" } }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, "deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -29865,12 +26393,6 @@ "regexp.prototype.flags": "^1.2.0" } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -30027,23 +26549,6 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, - "dep-graph": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz", - "integrity": "sha512-/6yUWlSH0Uevjj6HWvO86rDeFzuYfzbaKDqifTEemwfwEPyBrODTb3ox/jFzqmc2+UmgJ3IDMS88BKEBh1Nm2Q==", - "dev": true, - "requires": { - "underscore": "1.2.1" - }, - "dependencies": { - "underscore": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz", - "integrity": "sha512-HRhh6FYh5I5/zTt7L9MnHRA/nlSFPiwymMCXEremmzT7tHR+8CNP0FXHPaUpafAPwvAlNrvZiH91kQwoo/CqUA==", - "dev": true - } - } - }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -30059,18 +26564,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, "detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -30290,15 +26783,6 @@ "integrity": "sha512-/nt74Rm+PcfnirXGEdhZleTwGC2LMnuKTeeTIlI82xb5loBBoXNYzr2ezCroPSMtilK8EZIfcNZwOcHN+ib1Lg==", "dev": true }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, "dotenv": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", @@ -30342,12 +26826,6 @@ "safer-buffer": "^2.1.0" } }, - "editor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", - "integrity": "sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==", - "dev": true - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -30563,21 +27041,6 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, - "elementtree": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", - "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", - "requires": { - "sax": "1.1.4" - }, - "dependencies": { - "sax": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", - "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==" - } - } - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -30617,16 +27080,6 @@ "once": "^1.4.0" } }, - "endent": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz", - "integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==", - "requires": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.4" - } - }, "enhanced-resolve": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", @@ -30977,12 +27430,6 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -31757,7 +28204,9 @@ "extsprintf": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==" + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "optional": true }, "fancy-log": { "version": "2.0.0", @@ -31790,11 +28239,6 @@ "micromatch": "^4.0.4" } }, - "fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" - }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -32025,6 +28469,7 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -32198,23 +28643,6 @@ "serialize-error": "^7.0.1" } }, - "global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - } - } - }, "global-tunnel-ng": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", @@ -32504,12 +28932,6 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, "hdr-histogram-js": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", @@ -32862,12 +29284,6 @@ } } }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "dev": true - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -32903,34 +29319,6 @@ "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", "dev": true }, - "init-package-json": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", - "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", - "dev": true, - "requires": { - "npm-package-arg": "^8.1.5", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - } - } - }, "inquirer": { "version": "8.2.4", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", @@ -33004,271 +29392,6 @@ "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", "dev": true }, - "insight": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/insight/-/insight-0.11.1.tgz", - "integrity": "sha512-TBcZ0qC9dgdmcxL93OoqkY/RZXJtIi0i07phX/QyYk2ysmJtZex59dgTj4Doq50N9CG9dLRe/RIudc/5CCoFNw==", - "dev": true, - "requires": { - "async": "^2.6.2", - "chalk": "^4.1.1", - "conf": "^10.0.1", - "inquirer": "^6.3.1", - "lodash.debounce": "^4.0.8", - "os-name": "^4.0.1", - "request": "^2.88.0", - "tough-cookie": "^4.0.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "ansi-styles": { - "version": "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" - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "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 - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "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 - }, - "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" - } - } - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "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" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -33393,16 +29516,6 @@ "is-extglob": "^2.1.1" } }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -33420,12 +29533,6 @@ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -33440,12 +29547,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -33475,7 +29576,8 @@ "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true }, "is-plain-obj": { "version": "3.0.0", @@ -33572,12 +29674,6 @@ "is-docker": "^2.0.0" } }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -33594,12 +29690,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "dev": true - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -33978,12 +30068,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "json-schema-typed": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", - "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", - "dev": true - }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -34010,6 +30094,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -34125,15 +30210,6 @@ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, "lazy-val": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", @@ -34338,16 +30414,6 @@ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", "dev": true }, - "loud-rejection": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", - "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.2" - } - }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -34464,12 +30530,6 @@ "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz", "integrity": "sha512-Bt+SSVU8eBG27zChVewOicYs7Xsdt40qm4+UpHyX7k0/O9NliPc+x77k1/FEsPsjKPZGJvtRZM1vO+geW0OhGw==" }, - "md5-file": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz", - "integrity": "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==", - "dev": true - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -34575,12 +30635,6 @@ "mime-db": "1.52.0" } }, - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -34974,26 +31028,6 @@ "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -35179,12 +31213,6 @@ "boolbase": "^1.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true - }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -35241,11 +31269,6 @@ "es-abstract": "^1.20.4" } }, - "objectorarray": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", - "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==" - }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -35404,11 +31427,6 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -35454,26 +31472,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, "pacote": { "version": "13.6.2", "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", @@ -35731,12 +31729,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -35771,55 +31763,11 @@ "find-up": "^4.0.0" } }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - } - } - }, "plist": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", + "dev": true, "requires": { "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" @@ -36269,23 +32217,6 @@ "retry": "^0.12.0" } }, - "promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", - "dev": true, - "requires": { - "read": "1" - } - }, - "properties-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz", - "integrity": "sha512-AkSQxQAviJ89x4FIxOyHGfO3uund0gvYo7lfD0E+Gp7gFQKrTNgtoYQklu8EhrfHVZUzTwKGZx2r/KDSfnljcA==", - "requires": { - "string.prototype.codepointat": "^0.2.0" - } - }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -36586,19 +32517,11 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "devOptional": true }, "qs": { "version": "6.11.0", @@ -36608,12 +32531,6 @@ "side-channel": "^1.0.4" } }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -36677,41 +32594,6 @@ } } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true - } - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -36727,22 +32609,6 @@ } } }, - "read-chunk": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz", - "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==", - "requires": { - "pify": "^4.0.1", - "with-open-file": "^0.1.6" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - } - } - }, "read-config-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", @@ -36773,53 +32639,6 @@ } } }, - "read-package-json": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", - "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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" - } - } - } - }, "read-package-json-fast": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", @@ -36852,36 +32671,6 @@ "picomatch": "^2.2.1" } }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "requires": { - "minimatch": "^3.0.5" - }, - "dependencies": { - "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" - } - }, - "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" - } - } - } - }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -36948,24 +32737,6 @@ "unicode-match-property-value-ecmascript": "^2.1.0" } }, - "registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "dev": true, - "requires": { - "rc": "1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, "regjsgen": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", @@ -37595,23 +33366,6 @@ "dev": true, "optional": true }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, "semver-dsl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", @@ -38304,11 +34058,6 @@ "strip-ansi": "^6.0.1" } }, - "string.prototype.codepointat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", - "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" - }, "string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -38331,12 +34080,6 @@ "es-abstract": "^1.20.4" } }, - "stringify-package": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", - "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", - "dev": true - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -38345,11 +34088,6 @@ "ansi-regex": "^5.0.1" } }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" - }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -38453,12 +34191,6 @@ "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true }, - "systeminformation": { - "version": "5.12.15", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.15.tgz", - "integrity": "sha512-LMctTV27bGqWMBsuhzvNTH3roKOQonTN730F9v0x9YtoYducXcobs0rg3QKNnWDyHJyWIgKY6FiHlFcXJYclTQ==", - "dev": true - }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -38677,26 +34409,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, - "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "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 - } - } - }, "traverse": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", @@ -38976,15 +34688,6 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, "typedoc": { "version": "0.23.21", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.21.tgz", @@ -39021,11 +34724,6 @@ "which-boxed-primitive": "^1.0.2" } }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -39102,19 +34800,11 @@ "imurmurhash": "^0.1.4" } }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true }, "unix-crypt-td-js": { "version": "1.1.4", @@ -39127,11 +34817,6 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==" - }, "update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -39141,94 +34826,6 @@ "picocolors": "^1.0.0" } }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.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" - } - }, - "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" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "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 - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "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" - } - } - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -39242,16 +34839,6 @@ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, - "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, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -39288,12 +34875,6 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, - "valid-identifier": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/valid-identifier/-/valid-identifier-0.0.2.tgz", - "integrity": "sha512-zaSmOW6ykXwrkX0YTuFUSoALNEKGaQHpxBJQLb3TXspRNDpBwbfrIQCZqAQ0LKBlKuyn2YOq7NNd6415hvZ33g==", - "dev": true - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -39304,15 +34885,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -39743,15 +35315,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -39800,23 +35363,6 @@ } } }, - "with-open-file": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", - "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", - "requires": { - "p-finally": "^1.0.0", - "p-try": "^2.1.0", - "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - } - } - }, "wmf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", @@ -39877,30 +35423,12 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "ws": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "requires": {} }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, "xlsx": { "version": "0.18.5", "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", @@ -39936,7 +35464,8 @@ "xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true }, "xmldoc": { "version": "1.2.0", diff --git a/package.json b/package.json index f65f4c1f1..e13bbb080 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,6 @@ "build-no-pdf": "npm run preprocess && npm run ng build -- --configuration production", "build": "npm run preprocess && npm run mkdocs2pdf && npm run ng build -- --configuration production", "update-dist-index-mimetypes": "node scripts/update-dist-index-mimetypes.js", - "build-cordova": "npm run build-no-pdf && npm run update-dist-index-mimetypes && node scripts/add-cordova-script.js", - "release-android": "node scripts/bump-cordova-version.js && npm run build-cordova && \"node_modules/.bin/cordova\" platform add android; node scripts/remove-duplicate-sitemap.js && \"node_modules/.bin/cordova\" build android && node scripts/move-cordova-release.js", "electron": "npm run update-dist-index-mimetypes && \"node_modules/.bin/electron\" .", "release-linux-nocompile": "npm run update-dist-index-mimetypes && \"node_modules/.bin/electron-builder\"", "release-linux": "npm run build-no-pdf && npm run release-linux-nocompile", @@ -57,14 +55,6 @@ "ng2-charts": "^4.0.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^1.2.1", - "cordova-android": "^11.0.0", - "cordova-plugin-advanced-http": "^3.3.1", - "cordova-plugin-app-version": "^0.1.14", - "cordova-plugin-badge": "^0.8.8", - "cordova-plugin-device": "^2.1.0", - "cordova-plugin-file": "^7.0.0", - "cordova-plugin-file-opener2": "^3.0.5", - "cordova-plugin-local-notification": "^0.9.0-beta.2", "core-js": "^3.23.3", "file-saver": "^2.0.5", "he": "^1.2.0", @@ -102,8 +92,6 @@ "@typescript-eslint/eslint-plugin-tslint": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", "codelyzer": "^6.0.2", - "cordova": "^11.0.0", - "cordova-plugin-androidx-adapter": "^1.1.3", "electron": "^19.0.7", "electron-builder": "^23.1.0", "eslint": "^8.19.0", @@ -115,25 +103,5 @@ "ts-node": "^10.8.2", "typescript": "~4.7.4", "webpack-dev-server": "^4.9.3" - }, - "cordova": { - "plugins": { - "cordova-plugin-file": { - "ANDROIDX_WEBKIT_VERSION": "1.4.0" - }, - "cordova-plugin-file-opener2": { - "ANDROID_SUPPORT_V4_VERSION": "27.+" - }, - "cordova-plugin-device": {}, - "cordova-plugin-local-notification": {}, - "cordova-plugin-app-version": {}, - "cordova-plugin-advanced-http": { - "ANDROIDBLACKLISTSECURESOCKETPROTOCOLS": "SSLv3,TLSv1" - }, - "cordova-plugin-androidx-adapter": {} - }, - "platforms": [ - "android" - ] } } -- GitLab From d829276f1a4898c41264509d38377f19fd9dc843 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Fri, 25 Nov 2022 17:18:43 +0100 Subject: [PATCH 056/285] ci: use Docker image v3 refs #580 --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 48c33d73f..0ff5191b9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,7 +10,7 @@ stages: default: tags: [docker] - image: geaucassiopee/ci-cd-cross-platform-webapp:v2 + image: geaucassiopee/ci-cd-cross-platform-webapp:v3 variables: # from Gitlab CI/CD environment variables : -- GitLab From 45af51c820af15c97fe5cc650a1a451a34089f44 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Mon, 28 Nov 2022 08:54:16 +0100 Subject: [PATCH 057/285] doc: update DEVELOPERS.md (Android removal) refs #580 --- DEVELOPERS.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/DEVELOPERS.md b/DEVELOPERS.md index 908e88488..2888e23d6 100644 --- a/DEVELOPERS.md +++ b/DEVELOPERS.md @@ -9,7 +9,7 @@ Voir aussi : ngHyd est une interface Web pour [JaLHyd](https://gitlab.irstea.fr/cassiopee/jalhyd) écrite en Angular/typescript. -Elle est déclinée à l'aide d'Electron et Cordova sous forme d'application hors-ligne pour Linux, Mac, Windows et Android. +Elle est déclinée à l'aide d'Electron et de l'ensemble de technologies PWA (Progressive Web Application dont les service workers) sous forme d'application hors-ligne pour Linux, Mac, Windows et Android. Les tests unitaires sont réalisés avec Protractor. @@ -22,7 +22,7 @@ La documentation est générée avec Mkdocs, pandoc et LaTeX. * angular-material * protractor * electron - * cordova + * service workers * mkdocs * pandoc * LaTeX @@ -34,8 +34,6 @@ La documentation est générée avec Mkdocs, pandoc et LaTeX. * nodejs / npm * python (pour mkdocs) * wine (pour Electron / windows) - * java (pour cordova / Android) - * SDK Android (pour cordova / Android) * pandoc (pour la documentation PDF) * une distribution LaTeX, par exemple texlive (pour la documentation PDF) @@ -108,9 +106,10 @@ Le dossier `src/assets/icons/electron/` contient l'icône de l'application. Le dossier `release` contient (entre autres) les paquets générés par electron-builder. -### cordova +### PWA -Le déploiement de ngHyd sous forme d'application mobile se fait à l'aide de Cordova. Les fichiers et dossiers concernés sont `hooks`, `platforms`, `plugins`, `config.xml`, et les différentes icônes .png présentes dans `src`. +Le déploiement de ngHyd sous forme d'application mobile se fait à l'aide de l'ensemble de technologies rassemblées sous le nom de Progressive Web Application. +Les fichiers et dossiers concernés sont `ngsw-config.json`, `src/manifest.webmanifest` (fichiers nouveaux), `index.html`, `angular.json`, `src/app/app.module.ts` (fichiers modifiés), et les différentes icônes `.png` présentes dans `src/assets/icons`. ### documentation -- GitLab From ae7396ef64018b5846287f278bf57348692851db Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Mon, 28 Nov 2022 09:24:34 +0100 Subject: [PATCH 058/285] remove Cordova files refs #580 --- .gitignore | 4 --- config.xml | 40 ----------------------------- hooks/README.md | 23 ----------------- scripts/add-cordova-script.js | 7 ----- scripts/bump-cordova-version.js | 9 ------- scripts/move-cordova-release.js | 20 --------------- scripts/remove-duplicate-sitemap.js | 11 -------- 7 files changed, 114 deletions(-) delete mode 100644 config.xml delete mode 100644 hooks/README.md delete mode 100644 scripts/add-cordova-script.js delete mode 100644 scripts/bump-cordova-version.js delete mode 100644 scripts/move-cordova-release.js delete mode 100644 scripts/remove-duplicate-sitemap.js diff --git a/.gitignore b/.gitignore index d23875176..32421de85 100644 --- a/.gitignore +++ b/.gitignore @@ -59,9 +59,5 @@ install_jalhyd # viz output /nghyd_class_diagram.png -# Cordova -platforms/** -plugins/** - # Jalhyd directory (so far, to be removed if we make jalhyd a Git submodule) /jalhyd diff --git a/config.xml b/config.xml deleted file mode 100644 index bc6c498dc..000000000 --- a/config.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<widget id="fr.irstea.cassiopee" version="4.10.3" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> - <name>Cassiopée</name> - <description> - Hydraulic calculators / Modules de calcul d'hydraulique - </description> - <author email="bug@cassiopee.g-eau.fr" href="https://cassiopee.g-eau.fr"> - UMR G-EAU - </author> - <content src="index.html" /> - <icon src="src/assets/icons/android/icon.png" /> - <plugin name="cordova-plugin-whitelist" spec="1" /> - <access origin="*" /> - <allow-intent href="http://*/*" /> - <allow-intent href="https://*/*" /> - <allow-intent href="tel:*" /> - <allow-intent href="sms:*" /> - <allow-intent href="mailto:*" /> - <allow-intent href="geo:*" /> - <platform name="android"> - <allow-intent href="market:*" /> - <icon src="src/assets/icons/android/icon.png" qualifier="ldpi" /> - <!-- 2 following files are for notifications big icon: res://icon --> - <resource-file src="src/assets/icons/android/icon_96.png" target="app/src/main/res/icon.png" /> - <resource-file src="src/assets/icons/android/icon_96.png" target="app/src/main/res/drawable/icon.png" /> - <!-- all following files are for notifications small icon: res://ic_stat_notify --> - <resource-file src="src/assets/icons/android/ic_stat_notify.png" target="app/src/main/res/ic_stat_notify.png" /> - <resource-file src="src/assets/icons/android/ic_stat_notify.png" target="app/src/main/res/drawable/ic_stat_notify.png" /> - <!-- <resource-file src="src/assets/icons/android/ic_stat_notify_24.png" target="app/src/main/res/drawable-mdpi/ic_stat_notify.png" /> - <resource-file src="src/assets/icons/android/ic_stat_notify_36.png" target="app/src/main/res/drawable-hdpi/ic_stat_notify.png" /> - <resource-file src="src/assets/icons/android/ic_stat_notify_48.png" target="app/src/main/res/drawable-xhdpi/ic_stat_notify.png" /> - <resource-file src="src/assets/icons/android/ic_stat_notify_72.png" target="app/src/main/res/drawable-xxhdpi/ic_stat_notify.png" /> - <resource-file src="src/assets/icons/android/ic_stat_notify_96.png" target="app/src/main/res/drawable-xxxhdpi/ic_stat_notify.png" /> --> - </platform> - <platform name="ios"> - <allow-intent href="itms:*" /> - <allow-intent href="itms-apps:*" /> - <icon src="src/assets/icons/ios/icon.png" qualifier="ldpi" /> - </platform> -</widget> diff --git a/hooks/README.md b/hooks/README.md deleted file mode 100644 index 574ad4c9b..000000000 --- a/hooks/README.md +++ /dev/null @@ -1,23 +0,0 @@ -<!-- -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---> -# Cordova Hooks - -Cordova Hooks represent special scripts which could be added by application and plugin developers or even by your own build system to customize cordova commands. See Hooks Guide for more details: http://cordova.apache.org/docs/en/edge/guide_appdev_hooks_index.md.html#Hooks%20Guide. diff --git a/scripts/add-cordova-script.js b/scripts/add-cordova-script.js deleted file mode 100644 index 4064eef99..000000000 --- a/scripts/add-cordova-script.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const fs = require('fs'); - -const path = "./dist/index.html"; -const contents = fs.readFileSync(path, "utf-8"); -fs.writeFileSync(path, contents.replace('</title>', '</title> <script type=\"text/javascript\" src=\"cordova.js\"></script>')); diff --git a/scripts/bump-cordova-version.js b/scripts/bump-cordova-version.js deleted file mode 100644 index e54a3f038..000000000 --- a/scripts/bump-cordova-version.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -const fs = require('fs'); - -const path = "./config.xml"; -const version = require("../package.json").version; -const contents = fs.readFileSync(path, "utf-8"); - -fs.writeFileSync(path, contents.replace(/version="[0-9]+\.[0-9]+\.[0-9]+"/, 'version="' + version + '"')); diff --git a/scripts/move-cordova-release.js b/scripts/move-cordova-release.js deleted file mode 100644 index 7c508ed05..000000000 --- a/scripts/move-cordova-release.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -const fs = require('fs'); - -const oldPath = "platforms/android/app/build/outputs/apk/debug/app-debug.apk"; - -let version = require("../package.json").version; -if (version !== "") { - version = "-" + version; -} - -const releasePath = './release'; -const newPath = releasePath + "/cassiopee" + version + ".apk"; - -if (fs.existsSync(oldPath)) { - if (! fs.existsSync(releasePath)) { - fs.mkdirSync(releasePath); - } - fs.renameSync(oldPath, newPath); -} diff --git a/scripts/remove-duplicate-sitemap.js b/scripts/remove-duplicate-sitemap.js deleted file mode 100644 index f119d9836..000000000 --- a/scripts/remove-duplicate-sitemap.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -const fs = require('fs'); - -const paths = [ "dist/assets/docs/fr/sitemap.xml.gz", "dist/assets/docs/en/sitemap.xml.gz" ]; - -for (const path of paths) { - if (fs.existsSync(path)) { - fs.unlinkSync(path); - } -} -- GitLab From c1a5e65ffa167ea213a48c94e1817d0054eb2a88 Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Mon, 28 Nov 2022 10:37:15 +0100 Subject: [PATCH 059/285] remove Cordova related code refs #580 --- scripts/release-version.sh | 2 +- src/app/app.component.ts | 71 ++------------------------- src/index.html | 99 -------------------------------------- 3 files changed, 5 insertions(+), 167 deletions(-) diff --git a/scripts/release-version.sh b/scripts/release-version.sh index f8eceb83f..c40c6b227 100755 --- a/scripts/release-version.sh +++ b/scripts/release-version.sh @@ -4,7 +4,7 @@ set -o errexit # Output command lines for debugging set -x -# Fabrique les exécutables electron/cordova pour une version de Cassiopée $1, les +# Fabrique les exécutables Electron pour une version de Cassiopée $1, les # distribue sur le serveur $2@$3 dans le dossier $4, et met à jour le fichier releases.json # et les liens symboliques si la version n'est pas nightly diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 6c9375cae..d11194eca 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -35,13 +35,6 @@ import * as XLSX from "xlsx"; import * as pako from "pako"; import { ServiceWorkerUpdateService } from "./services/service-worker-update.service"; -// to be able to check for window.cordova -declare let window: any; -// to expose cordova API -declare let cordova: any; -// to expose cordova Device plugin -declare let device: any; - @Component({ selector: "nghyd-app", templateUrl: "./app.component.html", @@ -103,7 +96,7 @@ export class AppComponent implements OnInit, OnDestroy, Observer { if (!isDevMode()) { // évite de mettre en place un bandeau RGPD this.matomoTracker.disableCookies(); - // Set custom dimension for Electron / Cordova / pure Web browser + // Set custom dimension for Electron / pure Web browser this.matomoTracker.setCustomDimension(1, this.getRunningPlatform()); } @@ -208,67 +201,13 @@ export class AppComponent implements OnInit, OnDestroy, Observer { } /** - * Cordova-compatible file download method - * @see https://esstudio.site/2019/02/16/downloading-saving-and-opening-files-with-cordova.html + * file download method * @param blob binary object to download * @param filename * @param mimeType */ public static download(blob: Blob, filename: string, mimeType: string) { - if (window.cordova && cordova.platformId !== "browser") { - document.addEventListener("deviceready", function () { - // save file using codova-plugin-file - let storageLocation = ""; - switch (device.platform) { - case "Android": - storageLocation = cordova.file.externalDataDirectory; - break; - case "iOS": - storageLocation = cordova.file.documentsDirectory; - break; - } - const folderPath = storageLocation; - window.resolveLocalFileSystemURL(folderPath, (dir) => { - dir.getFile( - filename, - { create: true }, - (file) => { - file.createWriter( - function (fileWriter) { - fileWriter.write(blob); - fileWriter.onwriteend = () => { - const url = file.toURL(); - cordova.plugins.fileOpener2.open(url, mimeType, { - error: (err) => { - console.error(err); - alert(`No app found to handle type "${mimeType}"`); - }, - success: () => { - console.log("success with opening the file"); - } - }); - }; - fileWriter.onerror = function (err) { - console.error(err); - }; - }, - function (err) { - console.error(err); - } - ); - }, - (err) => { - console.error(err); - } - ); - }, (err) => { - console.error(err); - } - ); - }); - } else { - saveAs(blob, filename); - } + saveAs(blob, filename); } /** @@ -839,14 +778,12 @@ export class AppComponent implements OnInit, OnDestroy, Observer { /** * Returns a string representing the running platform : - * "cordova", "electron", or "browser" + * "electron", or "browser" */ public getRunningPlatform(): string { let runningPlatform = "browser"; if (navigator.userAgent.toLowerCase().indexOf("electron") > -1) { runningPlatform = "electron"; - } else if (window.cordova) { - runningPlatform = "cordova"; } // console.log(">> running platform: ", runningPlatform); return runningPlatform; diff --git a/src/index.html b/src/index.html index 4bef67938..5a2324c1d 100644 --- a/src/index.html +++ b/src/index.html @@ -160,105 +160,6 @@ </script> </nghyd-app> - <script type="text/javascript"> - /** - * Compares semver strings - * @see https://github.com/substack/semver-compare - */ - function semverCompare(a, b) { - var pa = a.split('.'); - var pb = b.split('.'); - for (var i = 0; i < 3; i++) { - var na = Number(pa[i]); - var nb = Number(pb[i]); - if (na > nb) return 1; - if (nb > na) return -1; - if (!isNaN(na) && isNaN(nb)) return 1; - if (isNaN(na) && !isNaN(nb)) return -1; - } - return 0; - } - /** - * Calls the Cassiopee update server to check for available updates; - * if so, displays a desktop notification which, if clicked, will - * trigger the download of the latest version installer for the - * current platform - * - * Web updates system prerequisites - * -------------------------------- - * - * ${URL} should point to an http-accessible directory containing: - * - * 1. a file named "releases.json" with a contents of the form - * { - * "latest": "4.5.0", - * "4.5.0": { - * "darwin": "cassiopee-setup-4.5.0.dmg", - * "linux": "fr.irstea.cassiopee_4.5.0_amd64.deb", - * "win32": "Cassiopée Setup 4.5.0.exe" - * }, - * "4.4.2": { - * "darwin": "cassiopee-setup-4.4.2.dmg", - * "linux": "fr.irstea.cassiopee_4.4.2_amd64.deb", - * "win32": "Cassiopée Setup 4.4.2.exe" - * } - * } - * - * 2. all platform-dependent installer files specified in "releases.json", - * at the root of the directory (ex: "fr.irstea.cassiopee_4.5.0_amd64.deb") - */ - const lookForUpdates = function() { - console.log("looking for updates"); - // Web update resources root directory - const URL = "https://cassiopee.g-eau.fr/cassiopee-releases/"; - - // detect current app version and platform - let version = "4.4.2"; // debug - cordova.getAppVersion.getVersionNumber((versionNumber) => { - version = versionNumber; - console.log("current version", version); - // fetch releases information - const options = { - method: 'get', - headers: { "Cache-Control": "no-cache" } - }; - cordova.plugin.http.sendRequest(URL + "releases.json", options, (response) => { - var data = JSON.parse(response.data); // This is the resultant JSON in useful form - // alert(`Youpi ! ${response.status} version=${version}, latest=${data.latest}, comp=${semverCompare(data.latest, version)}`); - console.log("latest version", data !== undefined ? data.latest : "err"); - // compare current version to latest version - if (data.latest && semverCompare(data.latest, version) == 1) { - // get download link for latest version, depending on platform - if (data[data.latest] && data[data.latest]["android"]) { - const latestVersionURL = URL + data[data.latest]["android"]; - // show notification - cordova.plugins.notification.local.schedule({ - title: `Cassiopee version ${data.latest} is available`, - text: "Download update installer", - foreground: true, - smallIcon: "res://ic_stat_notify", - icon: "res://icon" - }); - cordova.plugins.notification.local.on("click", () => { - // ask system to open URL with default browser - // @TODO find a way to get rid of "are you sure you want to leave this page ?" prompt - window.open(latestVersionURL, "_system"); - }); - } // else could not find link, silent fail - } // else you already have the latest version - }, (response) => { /* silent fail */}); - }); - }; - - // execute on Cordova (mobile app) only - if (window.cordova && cordova.platformId !== "browser") { - document.addEventListener("deviceready", function () { - // check updates at app startup - lookForUpdates(); - }); - } - </script> - <noscript>Please enable JavaScript to continue using this application.</noscript> </body> -- GitLab From 70baf42f92a85d5316aa00f6aad4519a04dd093f Mon Sep 17 00:00:00 2001 From: toto <toto@tata> Date: Mon, 28 Nov 2022 14:17:57 +0100 Subject: [PATCH 060/285] fix: display water rather than water line depth in results select refs #496 --- .../select-section-details/select-section-details.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/select-section-details/select-section-details.component.ts b/src/app/components/select-section-details/select-section-details.component.ts index d42b1e86a..55c21b523 100644 --- a/src/app/components/select-section-details/select-section-details.component.ts +++ b/src/app/components/select-section-details/select-section-details.component.ts @@ -39,7 +39,7 @@ export class SelectSectionDetailsComponent { public pointLabel(p: any): string { const abs = this.intlService.localizeText("INFO_REMOUSRESULTS_ABSCISSE"); const tirant = this.intlService.localizeText("INFO_REMOUSRESULTS_TIRANT"); - return abs + " : " + formattedValue(p.x, 1) + " - " + tirant + " : " + fv(p.z); + return abs + " : " + formattedValue(p.x, 1) + " - " + tirant + " : " + fv(p.y); } /** -- GitLab From abcd7d4e6d3dcd9fbb5665d9cb9f9ec6d390f517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 29 Nov 2022 10:42:20 +0100 Subject: [PATCH 061/285] fix: select not translated in predams wall parameters refs #581 --- .../elements/select/select-entry.ts | 25 ++++++++++++- .../select/select-field-downstream-basin.ts | 33 +++++++++-------- .../select/select-field-species-list.ts | 37 ++++++++++--------- .../select/select-field-upstream-basin.ts | 32 +++++++++------- 4 files changed, 79 insertions(+), 48 deletions(-) diff --git a/src/app/formulaire/elements/select/select-entry.ts b/src/app/formulaire/elements/select/select-entry.ts index cb4082fa3..753e94108 100644 --- a/src/app/formulaire/elements/select/select-entry.ts +++ b/src/app/formulaire/elements/select/select-entry.ts @@ -12,12 +12,17 @@ export class SelectEntry { /** * texte affiché pour cette entrée */ - public label: string; + private _label: string; + + /** + * informations (code, symbole, ...) de traduction + */ + private _intlInfo: any; constructor(id: string, val: any, lbl?: string) { this._id = id; this._value = val; - this.label = lbl; // redéfini par SelectField.updateLocalisation() plus tard + this._label = lbl; } get id(): string { @@ -27,4 +32,20 @@ export class SelectEntry { get value(): any { return this._value; } + + get label(): string { + return this._label; + } + + set label(l: string) { + this._label = l; + } + + public get intlInfo(): any { + return this._intlInfo; + } + + public set intlInfo(i: any) { + this._intlInfo = i; + } } diff --git a/src/app/formulaire/elements/select/select-field-downstream-basin.ts b/src/app/formulaire/elements/select/select-field-downstream-basin.ts index 05675917d..dd39ce857 100644 --- a/src/app/formulaire/elements/select/select-field-downstream-basin.ts +++ b/src/app/formulaire/elements/select/select-field-downstream-basin.ts @@ -7,7 +7,7 @@ import { SelectField } from "./select-field"; "id": "select_downstream_basin", "type": "select_custom", "source": "downstream_basin" -*/ +*/ // PbCloisons, bassin aval export class SelectFieldDownstreamBasin extends SelectField { @@ -19,27 +19,30 @@ export class SelectFieldDownstreamBasin extends SelectField { for (const b of preBarrageD.bassins) { const pos = b.findPositionInParent(); if (posUb === undefined || pos > posUb) { - this.addEntry( - new SelectEntry( - this._entriesBaseId + b.uid, - b.uid, - ServiceFactory.i18nService.localizeMessage(b.description) - ) - ); + const e = new SelectEntry(this._entriesBaseId + b.uid, b.uid); + e.intlInfo = b.description; + this.addEntry(e); } } // river downstream - this.addEntry( - new SelectEntry( - this._entriesBaseId + "none", - undefined, - ServiceFactory.i18nService.localizeText("INFO_LIB_AVAL") - ) - ); + const e = new SelectEntry(this._entriesBaseId + "none", undefined); + e.intlInfo = "INFO_LIB_AVAL"; + this.addEntry(e); } protected initSelectedValue() { const db = (this.nub as PbCloison).bassinAval; this.setValueFromId(this._entriesBaseId + (db ? db.uid : "none")); } + + public updateLocalisation() { + for (const e of this._entries) { + if (e.id === this._entriesBaseId + "none") { + e.label = ServiceFactory.i18nService.localizeText(e.intlInfo) + } + else { + e.label = ServiceFactory.i18nService.localizeMessage(e.intlInfo) + } + } + } } diff --git a/src/app/formulaire/elements/select/select-field-species-list.ts b/src/app/formulaire/elements/select/select-field-species-list.ts index 602a56854..9401148c3 100644 --- a/src/app/formulaire/elements/select/select-field-species-list.ts +++ b/src/app/formulaire/elements/select/select-field-species-list.ts @@ -24,27 +24,16 @@ export class SelectFieldSpeciesList extends SelectField { const especeNubs = Session.getInstance().getAllNubs().filter((element) => element.calcType === CalculatorType.Espece); for (const en of especeNubs) { const form = ServiceFactory.formulaireService.getFormulaireFromNubId(en.uid); - this.addEntry( - new SelectEntry( - this._entriesBaseId + en.uid, - en.uid, - sprintf( - ServiceFactory.i18nService.localizeText("INFO_VERIFICATEUR_CUSTOM_SPECIES"), - form ? form.calculatorName : "*** form not loaded yet ***" - ) - ) - ); + const e = new SelectEntry(this._entriesBaseId + en.uid, en.uid); + e.intlInfo = { "isnub": true, "code": "INFO_VERIFICATEUR_CUSTOM_SPECIES", "id": en.uid }; + this.addEntry(e); } // add all FishSpecies for (let j = 1; j < Object.keys(FishSpecies).length / 2; j++) { // exclude "0" (SPECIES_CUSTOM) const spgId = FishSpecies[j].substring(FishSpecies[j].lastIndexOf("_") + 1); - this.addEntry( - new SelectEntry( - this._entriesBaseId + spgId, - FishSpecies[j], - ServiceFactory.i18nService.localizeText("INFO_ENUM_" + FishSpecies[j]) - ) - ); + const e = new SelectEntry(this._entriesBaseId + spgId, FishSpecies[j]); + e.intlInfo = { "isnub": false, "code": FishSpecies[j] } + this.addEntry(e); } } @@ -61,5 +50,19 @@ export class SelectFieldSpeciesList extends SelectField { public updateLocalisation() { // do not override localisation done in populate() // ie. avoid what is done by SelectField.updateLocalisation() + + for (const e of this._entries) { + if (e.intlInfo.isnub) { + const id = e.intlInfo.id; + const form = ServiceFactory.formulaireService.getFormulaireFromNubId(id); + e.label = sprintf( + ServiceFactory.i18nService.localizeText(e.intlInfo.code), + form ? form.calculatorName : "*** form not loaded yet ***" + ); + } + else { + e.label = ServiceFactory.i18nService.localizeText("INFO_ENUM_" + e.intlInfo.code); + } + } } } diff --git a/src/app/formulaire/elements/select/select-field-upstream-basin.ts b/src/app/formulaire/elements/select/select-field-upstream-basin.ts index 0eeb6b605..d240d097c 100644 --- a/src/app/formulaire/elements/select/select-field-upstream-basin.ts +++ b/src/app/formulaire/elements/select/select-field-upstream-basin.ts @@ -15,25 +15,19 @@ export class SelectFieldUpstreamBasin extends SelectField { const pbWallU = this.parentForm.currentNub as PbCloison; const preBarrageU = pbWallU.parent as PreBarrage; const posDb = pbWallU.bassinAval?.findPositionInParent(); + // river upstream - this.addEntry( - new SelectEntry( - this._entriesBaseId + "none", - undefined, - ServiceFactory.i18nService.localizeText("INFO_LIB_AMONT") - ) - ); + const e = new SelectEntry(this._entriesBaseId + "none", undefined); + e.intlInfo = "INFO_LIB_AMONT"; + this.addEntry(e); + // all available basins, depending on current downstream basin for (const b of preBarrageU.bassins) { const pos = b.findPositionInParent(); if (posDb === undefined || pos < posDb) { - this.addEntry( - new SelectEntry( - this._entriesBaseId + b.uid, - b.uid, - ServiceFactory.i18nService.localizeMessage(b.description) - ) - ); + const e = new SelectEntry(this._entriesBaseId + b.uid, b.uid); + e.intlInfo = b.description; + this.addEntry(e); } } } @@ -42,4 +36,14 @@ export class SelectFieldUpstreamBasin extends SelectField { const ub = (this.nub as PbCloison).bassinAmont; this.setValueFromId(this._entriesBaseId + (ub ? ub.uid : "none")); } + + public updateLocalisation() { + for (const e of this._entries) { + if (e.id === this._entriesBaseId + "none") { + e.label = ServiceFactory.i18nService.localizeText(e.intlInfo); + } else { + e.label = ServiceFactory.i18nService.localizeMessage(e.intlInfo); + } + } + } } -- GitLab From 84b8fa7cbc2c2395f5e17cf1cd0c68f2a028e895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 29 Nov 2022 15:54:00 +0100 Subject: [PATCH 062/285] doc: add application version to generated PDFs refs #578 --- .gitignore | 3 ++ docs/latex/cassiopee_doc_en.tex | 7 ++-- docs/latex/cassiopee_doc_fr.tex | 7 ++-- mkdocs2pdf.py | 5 +++ package.json | 2 +- scripts/extract-nghyd-version.js | 65 ++++++++++++++++++++++++++++++++ 6 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 scripts/extract-nghyd-version.js diff --git a/.gitignore b/.gitignore index 32421de85..fb741a528 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,6 @@ install_jalhyd # Jalhyd directory (so far, to be removed if we make jalhyd a Git submodule) /jalhyd + +# generated ngHyd version in Latex format (must be in docs folder since docs/pdf_build is first removed by PDF doc generation) +docs/cassiopee_version.tex diff --git a/docs/latex/cassiopee_doc_en.tex b/docs/latex/cassiopee_doc_en.tex index 66d99b1dc..7f86d9a6b 100644 --- a/docs/latex/cassiopee_doc_en.tex +++ b/docs/latex/cassiopee_doc_en.tex @@ -13,15 +13,16 @@ % Insertion des différents préambules au document \input{rapport/english/preambule_rapport_english} \input{rapport_inrae/preambule_inrae} - +% Cassiopée version in the form \newcommand{\cassiopeeversion}{x.y.z} +\input{cassiopee_version} %******************************************************************************* %Données de titre et d'auteur pour la page de garde, les entêtes et pieds de page %******************************************************************************* % Le titre doit être relativement court mais assez explicite \newcommand{\service}{UMR G-EAU} -\newcommand{\titre}{Cassiopée 4 software} -\newcommand{\sousTitre}{User documentation} +\newcommand{\titre}{Cassiopée software} +\newcommand{\sousTitre}{version \cassiopeeversion\\User documentation} %Statut du document [rapport final, rapport intermédiaire] % auteur intellectuel, rédacteur du document, il peut y avoir plusieurs auteurs ; chaque auteur est renseigné sous la forme « Prénom NOM » \newcommand{\auteur}{David DORCHIES, Mathias CHOUET, François GRAND} diff --git a/docs/latex/cassiopee_doc_fr.tex b/docs/latex/cassiopee_doc_fr.tex index ca5a85f9a..3360b0583 100644 --- a/docs/latex/cassiopee_doc_fr.tex +++ b/docs/latex/cassiopee_doc_fr.tex @@ -13,15 +13,16 @@ % Insertion des différents préambules au document \input{rapport/francais/preambule_rapport_francais} \input{rapport_inrae/preambule_inrae} - +% version de Cassiopée sous la forme \newcommand{\cassiopeeversion}{x.y.z} +\input{cassiopee_version} %******************************************************************************* %Données de titre et d'auteur pour la page de garde, les entêtes et pieds de page %******************************************************************************* % Le titre doit être relativement court mais assez explicite \newcommand{\service}{UMR G-EAU} -\newcommand{\titre}{Logiciel Cassiopée 4} -\newcommand{\sousTitre}{Documentation utilisateur} +\newcommand{\titre}{Logiciel Cassiopée} +\newcommand{\sousTitre}{version \cassiopeeversion\\Documentation utilisateur} %Statut du document [rapport final, rapport intermédiaire] % auteur intellectuel, rédacteur du document, il peut y avoir plusieurs auteurs ; chaque auteur est renseigné sous la forme « Prénom NOM » \newcommand{\auteur}{David DORCHIES, Mathias CHOUET, François GRAND} diff --git a/mkdocs2pdf.py b/mkdocs2pdf.py index c83f54033..f2bf09c17 100644 --- a/mkdocs2pdf.py +++ b/mkdocs2pdf.py @@ -167,6 +167,11 @@ def buildPDF(lang): os.chdir(modelDir) sourceTexFile = 'cassiopee_doc_' + lang + '.tex' outputPdfFile = 'cassiopee_doc_' + lang + '.pdf' + + # copy Cassiopée version LateX file + cvt = os.path.join( baseDir,'docs/cassiopee_version.tex') + shutil.copy(cvt, modelDir) + os.system( 'latexmk -f -xelatex -pdf -interaction=nonstopmode {} > /dev/null 2>&1'.format(sourceTexFile) ) diff --git a/package.json b/package.json index e13bbb080..96094339f 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "node scripts/python3.js -m mkdocs build -f mkdocs-fr.yml && node scripts/python3.js -m mkdocs build -f mkdocs-en.yml && node scripts/mkdocs-postprocess.js", "mkdocs2pdf": "node scripts/python3.js mkdocs2pdf.py", - "preprocess": "node scripts/preprocessors.js && npm run mkdocs", + "preprocess": "node scripts/preprocessors.js && node scripts/extract-nghyd-version.js docs/cassiopee_version.tex && npm run mkdocs", "start": "npm run preprocess && npm run ng serve -- --host 0.0.0.0 --poll 5000", "build-no-pdf": "npm run preprocess && npm run ng build -- --configuration production", "build": "npm run preprocess && npm run mkdocs2pdf && npm run ng build -- --configuration production", diff --git a/scripts/extract-nghyd-version.js b/scripts/extract-nghyd-version.js new file mode 100644 index 000000000..aff3a3dd0 --- /dev/null +++ b/scripts/extract-nghyd-version.js @@ -0,0 +1,65 @@ +/* + * extract Cassiopée version from package.json and write files according to provided paths extension : + * - a LateX file defining a variable in the form \newcommand\{\cassiopeeversion}{x.y.z} for path(s) with .tex extension + * - a plain text file with version value (x.y.z) for path(s) without extension + */ + +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +if (process.argv.length < 3) { + console.error("ERROR : missing output file path(s)\n"); + console.error("syntax : extract-nghyd-version <path> [<path> ...]"); + console.error(" extract ngHyd current version to given files according to extension"); + console.error(" available extensions : .tex (LateX file with variable), <none (plain version in text file)>"); + process.exit(1); +} + +function createMissingDirs(p) { + const targetDir = path.dirname(p); + if (!fs.existsSync(targetDir)) { + console.log("creating output directory", targetDir) + fs.mkdirSync(targetDir, { recursive: true }); + } +} + +function writeTex(outPath, ver) { + // make LateX variable + const s = `\\newcommand\{\\cassiopeeversion\}\{${ver}\}`; + + // create intermediate folders if necessary + createMissingDirs(outPath) + + // write file + console.log("writing LateX file", outPath); + fs.writeFileSync(outPath, s); +} + +function writePlain(outPath, ver) { + // create intermediate folders if necessary + createMissingDirs(outPath) + + // write file + console.log("writing plain file", outPath); + fs.writeFileSync(outPath, ver); +} + +// read package.json +console.log("reading package.json"); +var fdata = fs.readFileSync('package.json', 'utf8'); +var data = JSON.parse(fdata) + +// get Cassiopée version +const ver = data.version +console.log("got ngHyd version", ver); + +for (let i = 2; i < process.argv.length; i++) { + const p = process.argv[i]; + if (p.endsWith(".tex")) { + writeTex(p, ver); + } else { + writePlain(p, ver); + } +} -- GitLab From d7beb2b6d3766ff7a2a20fd802bc9386236f2b08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 30 Nov 2022 13:42:03 +0100 Subject: [PATCH 063/285] refactor: remove scripts/python3.js refs #578 --- package.json | 4 ++-- scripts/python3.js | 15 --------------- 2 files changed, 2 insertions(+), 17 deletions(-) delete mode 100644 scripts/python3.js diff --git a/package.json b/package.json index 96094339f..b174352ec 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "e2e": "npm run preprocess && node scripts/check-translations.js && npm run ng -- e2e --suite=regular --webdriver-update=false", "e2equick": "node scripts/check-translations.js && npm run ng -- e2e --dev-server-target= --suite=regular --webdriver-update=false", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", - "mkdocs": "node scripts/python3.js -m mkdocs build -f mkdocs-fr.yml && node scripts/python3.js -m mkdocs build -f mkdocs-en.yml && node scripts/mkdocs-postprocess.js", - "mkdocs2pdf": "node scripts/python3.js mkdocs2pdf.py", + "mkdocs": "python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && node scripts/mkdocs-postprocess.js", + "mkdocs2pdf": "python3 mkdocs2pdf.py", "preprocess": "node scripts/preprocessors.js && node scripts/extract-nghyd-version.js docs/cassiopee_version.tex && npm run mkdocs", "start": "npm run preprocess && npm run ng serve -- --host 0.0.0.0 --poll 5000", "build-no-pdf": "npm run preprocess && npm run ng build -- --configuration production", diff --git a/scripts/python3.js b/scripts/python3.js deleted file mode 100644 index 00ee016d7..000000000 --- a/scripts/python3.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -const exec = require("child_process").execSync; -const os = require("os"); - -let py = "python3"; -if (os.platform() === "win32") { - py = "python"; -} - -const command = py + " " + process.argv.slice(2).join(" "); -console.log("executing", command); - -const ret = exec(command); -console.log(ret.toString()); -- GitLab From 51b2122cf0a4a5f07ae4d31133de723b5f2abc76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 30 Nov 2022 13:44:48 +0100 Subject: [PATCH 064/285] build: add clean script to package.json refs #578 --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index b174352ec..fd0b9b63d 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && node scripts/mkdocs-postprocess.js", "mkdocs2pdf": "python3 mkdocs2pdf.py", + "clean": "rm -rf dist release src/date_revision.ts src/assets/docs compodoc-fr docs/fr/pdf docs/en/pdf docs/pdf_build docs/cassiopee_version.tex", "preprocess": "node scripts/preprocessors.js && node scripts/extract-nghyd-version.js docs/cassiopee_version.tex && npm run mkdocs", "start": "npm run preprocess && npm run ng serve -- --host 0.0.0.0 --poll 5000", "build-no-pdf": "npm run preprocess && npm run ng build -- --configuration production", -- GitLab From 4db3200c5b0a761093261662bfb5c95871eff4d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 30 Nov 2022 14:57:53 +0100 Subject: [PATCH 065/285] refactor(build): package.json: preprocess script cleanup refs #578 --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index fd0b9b63d..2d4444080 100644 --- a/package.json +++ b/package.json @@ -15,12 +15,12 @@ "e2equick": "node scripts/check-translations.js && npm run ng -- e2e --dev-server-target= --suite=regular --webdriver-update=false", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && node scripts/mkdocs-postprocess.js", - "mkdocs2pdf": "python3 mkdocs2pdf.py", + "mkdocs2pdf": "node scripts/extract-nghyd-version.js docs/cassiopee_version.tex && python3 mkdocs2pdf.py", "clean": "rm -rf dist release src/date_revision.ts src/assets/docs compodoc-fr docs/fr/pdf docs/en/pdf docs/pdf_build docs/cassiopee_version.tex", - "preprocess": "node scripts/preprocessors.js && node scripts/extract-nghyd-version.js docs/cassiopee_version.tex && npm run mkdocs", - "start": "npm run preprocess && npm run ng serve -- --host 0.0.0.0 --poll 5000", - "build-no-pdf": "npm run preprocess && npm run ng build -- --configuration production", - "build": "npm run preprocess && npm run mkdocs2pdf && npm run ng build -- --configuration production", + "preprocess": "node scripts/preprocessors.js", + "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 0.0.0.0 --poll 5000", + "build-no-pdf": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production", + "build": "npm run preprocess && npm run mkdocs && npm run mkdocs2pdf && npm run ng build -- --configuration production", "update-dist-index-mimetypes": "node scripts/update-dist-index-mimetypes.js", "electron": "npm run update-dist-index-mimetypes && \"node_modules/.bin/electron\" .", "release-linux-nocompile": "npm run update-dist-index-mimetypes && \"node_modules/.bin/electron-builder\"", -- GitLab From 86ce479f86c0d5ec31d286a58c6fcc4599f9741c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 30 Nov 2022 16:08:35 +0100 Subject: [PATCH 066/285] doc: PDF generation: raise error on commands run from Python script refs #578 --- mkdocs2pdf.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/mkdocs2pdf.py b/mkdocs2pdf.py index f2bf09c17..f4dff0da7 100644 --- a/mkdocs2pdf.py +++ b/mkdocs2pdf.py @@ -33,6 +33,10 @@ filenamePrefix = 'cassiopee_doc_' latexModelRepository = 'https://gitlab.irstea.fr/david.dorchies/latex_models.git' +def runCommand(cmd): + if os.waitstatus_to_exitcode(os.system(cmd)) != 0: + raise RuntimeError("error executing:",cmd) + # Reads an MkDocs configuration file def readConfig(sYAML): f = open(sYAML, 'r') @@ -93,7 +97,7 @@ def exploreAndMerge(docs_dir, nav, output = '', level = 0): # Creates a filePath.tex LaTeX contents file based on filePath.md def convertMdToTex(filePath): # Convert .md to .tex - os.system( + runCommand( 'pandoc {0}.md -f markdown -t latex -s -o {0}.tex'.format(filePath) ) # Remove header of tex file @@ -125,7 +129,7 @@ def convertMdToTex(filePath): def getLatexModel(): # Clone Git repository os.chdir(buildDir) - os.system( + runCommand( 'git clone {} {}'.format(latexModelRepository, latexModelDir) ) # back to original working drectory @@ -141,21 +145,21 @@ def injectContentIntoModel(mergedDocFilenameTex, lang): # Symlink necessary resources os.chdir(modelDir) relPathToMergedTexDoc = os.path.join('..', mergedDocFilenameTex) - os.system( + runCommand( 'ln -s {} .'.format(relPathToMergedTexDoc) ) latexTemplate = 'cassiopee_doc_' + lang + '.tex' relPathToLatexTemplate = os.path.join('../../latex', latexTemplate) - os.system( + runCommand( 'ln -s {} .'.format(relPathToLatexTemplate) ) - os.system( + runCommand( 'ln -s ../../latex/logo_pole.png .' ) - os.system( + runCommand( 'rm rapport_inrae/logos.tex' ) - os.system( + runCommand( 'ln -s ../../../latex/logos.tex rapport_inrae/' ) # back to original working drectory @@ -172,7 +176,7 @@ def buildPDF(lang): cvt = os.path.join( baseDir,'docs/cassiopee_version.tex') shutil.copy(cvt, modelDir) - os.system( + runCommand( 'latexmk -f -xelatex -pdf -interaction=nonstopmode {} > /dev/null 2>&1'.format(sourceTexFile) ) # copy generated PDF to release directory -- GitLab From ddca1fb5523d700ab7a06ab9b0c083ecd0f432e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 30 Nov 2022 16:11:36 +0100 Subject: [PATCH 067/285] doc: PDF generation: use defined filename prefix refs #578 --- mkdocs2pdf.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mkdocs2pdf.py b/mkdocs2pdf.py index f4dff0da7..465aeef43 100644 --- a/mkdocs2pdf.py +++ b/mkdocs2pdf.py @@ -148,7 +148,7 @@ def injectContentIntoModel(mergedDocFilenameTex, lang): runCommand( 'ln -s {} .'.format(relPathToMergedTexDoc) ) - latexTemplate = 'cassiopee_doc_' + lang + '.tex' + latexTemplate = filenamePrefix + lang + '.tex' relPathToLatexTemplate = os.path.join('../../latex', latexTemplate) runCommand( 'ln -s {} .'.format(relPathToLatexTemplate) @@ -169,8 +169,8 @@ def injectContentIntoModel(mergedDocFilenameTex, lang): def buildPDF(lang): # Compile LaTeX source os.chdir(modelDir) - sourceTexFile = 'cassiopee_doc_' + lang + '.tex' - outputPdfFile = 'cassiopee_doc_' + lang + '.pdf' + sourceTexFile = filenamePrefix + lang + '.tex' + outputPdfFile = filenamePrefix + lang + '.pdf' # copy Cassiopée version LateX file cvt = os.path.join( baseDir,'docs/cassiopee_version.tex') -- GitLab From 9f3b7f1171b540e06beae70757a66decbcc66cf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 30 Nov 2022 17:49:33 +0100 Subject: [PATCH 068/285] fix(doc): missing links to image in PDF generation refs #578 --- mkdocs2pdf.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/mkdocs2pdf.py b/mkdocs2pdf.py index 465aeef43..9109fe9e2 100644 --- a/mkdocs2pdf.py +++ b/mkdocs2pdf.py @@ -156,6 +156,18 @@ def injectContentIntoModel(mergedDocFilenameTex, lang): runCommand( 'ln -s ../../latex/logo_pole.png .' ) + runCommand( + 'ln -s {}/schema_rugosite_fond.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam')) + ) + runCommand( + 'ln -s {}/bloc_cylindre.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam')) + ) + runCommand( + 'ln -s {}/bloc_face_arrondie.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam')) + ) + runCommand( + 'ln -s {}/bloc_base_carree.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam')) + ) runCommand( 'rm rapport_inrae/logos.tex' ) @@ -176,7 +188,7 @@ def buildPDF(lang): cvt = os.path.join( baseDir,'docs/cassiopee_version.tex') shutil.copy(cvt, modelDir) - runCommand( + os.system( 'latexmk -f -xelatex -pdf -interaction=nonstopmode {} > /dev/null 2>&1'.format(sourceTexFile) ) # copy generated PDF to release directory -- GitLab From 959551a20577282ec4d7a2609c4fb1f092df159c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 30 Nov 2022 17:59:08 +0100 Subject: [PATCH 069/285] refactor(doc): write intermediate files to a single (build) directory refs #578 --- .gitignore | 5 +---- mkdocs2pdf.py | 16 ++++++++-------- package.json | 6 +++--- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index fb741a528..8938871aa 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ /docs/fr/pdf /docs/en/pdf /release -docs/pdf_build +/build # dependencies /node_modules @@ -61,6 +61,3 @@ install_jalhyd # Jalhyd directory (so far, to be removed if we make jalhyd a Git submodule) /jalhyd - -# generated ngHyd version in Latex format (must be in docs folder since docs/pdf_build is first removed by PDF doc generation) -docs/cassiopee_version.tex diff --git a/mkdocs2pdf.py b/mkdocs2pdf.py index 9109fe9e2..45f9dd85a 100644 --- a/mkdocs2pdf.py +++ b/mkdocs2pdf.py @@ -21,8 +21,8 @@ import re import shutil baseDir = os.getcwd(); - -buildDir = os.path.join(baseDir, 'docs/pdf_build') +latexSourceDir = os.path.join(baseDir, 'docs/latex') +buildDir = os.path.join(baseDir, 'build/pdf_build') outputDir = os.path.join(baseDir, 'src/assets/docs/pdf') latexModelDir = 'latex_models' @@ -75,7 +75,7 @@ def exploreAndMerge(docs_dir, nav, output = '', level = 0): filepath = os.path.join(docs_dir, d) f = open(filepath, 'r') # Triple "../" because file will be compiled from pdf_build/latex_models - path = os.path.join('../../..', os.path.dirname(filepath)) + path = os.path.join(baseDir, os.path.dirname(filepath)) s = f.read() + "\n" # Modification of image and links paths s = re.sub(r'(\!\[.+\]\()(.+)(\))', r'\1'+path+r'/\2\3', s) @@ -149,12 +149,12 @@ def injectContentIntoModel(mergedDocFilenameTex, lang): 'ln -s {} .'.format(relPathToMergedTexDoc) ) latexTemplate = filenamePrefix + lang + '.tex' - relPathToLatexTemplate = os.path.join('../../latex', latexTemplate) + relPathToLatexTemplate = os.path.join(latexSourceDir, latexTemplate) runCommand( - 'ln -s {} .'.format(relPathToLatexTemplate) + 'ln -s {}'.format(relPathToLatexTemplate) ) runCommand( - 'ln -s ../../latex/logo_pole.png .' + 'ln -s {}'.format(os.path.join(latexSourceDir, 'logo_pole.png')) ) runCommand( 'ln -s {}/schema_rugosite_fond.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam')) @@ -172,7 +172,7 @@ def injectContentIntoModel(mergedDocFilenameTex, lang): 'rm rapport_inrae/logos.tex' ) runCommand( - 'ln -s ../../../latex/logos.tex rapport_inrae/' + 'ln -s {} rapport_inrae/'.format(os.path.join(latexSourceDir, 'logos.tex')) ) # back to original working drectory os.chdir(baseDir) @@ -185,7 +185,7 @@ def buildPDF(lang): outputPdfFile = filenamePrefix + lang + '.pdf' # copy Cassiopée version LateX file - cvt = os.path.join( baseDir,'docs/cassiopee_version.tex') + cvt = os.path.join( baseDir, 'build', 'cassiopee_version.tex') shutil.copy(cvt, modelDir) os.system( diff --git a/package.json b/package.json index 2d4444080..cc09431f4 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,9 @@ "e2equick": "node scripts/check-translations.js && npm run ng -- e2e --dev-server-target= --suite=regular --webdriver-update=false", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && node scripts/mkdocs-postprocess.js", - "mkdocs2pdf": "node scripts/extract-nghyd-version.js docs/cassiopee_version.tex && python3 mkdocs2pdf.py", - "clean": "rm -rf dist release src/date_revision.ts src/assets/docs compodoc-fr docs/fr/pdf docs/en/pdf docs/pdf_build docs/cassiopee_version.tex", - "preprocess": "node scripts/preprocessors.js", + "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 mkdocs2pdf.py", + "clean": "rm -rf build dist release src/date_revision.ts src/assets/docs compodoc-fr docs/fr/pdf docs/en/pdf docs/pdf_build docs/cassiopee_version.tex", + "preprocess": "mkdir -p build; node scripts/preprocessors.js", "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 0.0.0.0 --poll 5000", "build-no-pdf": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production", "build": "npm run preprocess && npm run mkdocs && npm run mkdocs2pdf && npm run ng build -- --configuration production", -- GitLab From 4b91746648c0d224446fc4ee5b29e81b03eaf0ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 1 Dec 2022 09:45:46 +0100 Subject: [PATCH 070/285] refactor(doc): output generated PDFs to dist rather than to src refs #578 --- .gitignore | 3 --- mkdocs2pdf.py | 2 +- package.json | 6 +++--- scripts/mkdocs-postprocess.js | 3 --- scripts/mkdocs2pdf-postprocess.js | 13 +++++++++++++ 5 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 scripts/mkdocs2pdf-postprocess.js diff --git a/.gitignore b/.gitignore index 8938871aa..78a09cc0f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,9 +5,6 @@ /tmp /out-tsc /src/assets/docs -/compodoc-fr -/docs/fr/pdf -/docs/en/pdf /release /build diff --git a/mkdocs2pdf.py b/mkdocs2pdf.py index 45f9dd85a..a4f15b0dc 100644 --- a/mkdocs2pdf.py +++ b/mkdocs2pdf.py @@ -23,7 +23,7 @@ import shutil baseDir = os.getcwd(); latexSourceDir = os.path.join(baseDir, 'docs/latex') buildDir = os.path.join(baseDir, 'build/pdf_build') -outputDir = os.path.join(baseDir, 'src/assets/docs/pdf') +outputDir = os.path.join(baseDir, 'dist/assets/docs/pdf') latexModelDir = 'latex_models' modelDir = os.path.join(buildDir, latexModelDir) diff --git a/package.json b/package.json index cc09431f4..31400d75d 100644 --- a/package.json +++ b/package.json @@ -15,12 +15,12 @@ "e2equick": "node scripts/check-translations.js && npm run ng -- e2e --dev-server-target= --suite=regular --webdriver-update=false", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && node scripts/mkdocs-postprocess.js", - "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 mkdocs2pdf.py", - "clean": "rm -rf build dist release src/date_revision.ts src/assets/docs compodoc-fr docs/fr/pdf docs/en/pdf docs/pdf_build docs/cassiopee_version.tex", + "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 mkdocs2pdf.py && node scripts/mkdocs2pdf-postprocess.js", + "clean": "rm -rf build dist release src/date_revision.ts src/assets/docs", "preprocess": "mkdir -p build; node scripts/preprocessors.js", "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 0.0.0.0 --poll 5000", "build-no-pdf": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production", - "build": "npm run preprocess && npm run mkdocs && npm run mkdocs2pdf && npm run ng build -- --configuration production", + "build": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production && npm run mkdocs2pdf", "update-dist-index-mimetypes": "node scripts/update-dist-index-mimetypes.js", "electron": "npm run update-dist-index-mimetypes && \"node_modules/.bin/electron\" .", "release-linux-nocompile": "npm run update-dist-index-mimetypes && \"node_modules/.bin/electron-builder\"", diff --git a/scripts/mkdocs-postprocess.js b/scripts/mkdocs-postprocess.js index 61d0abe11..558e8300f 100644 --- a/scripts/mkdocs-postprocess.js +++ b/scripts/mkdocs-postprocess.js @@ -52,6 +52,3 @@ fs.copySync("docs/matomo-tracking.js", destPath_EN_JS + "/matomo-tracking.js"); fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_JS + "/mermaid.min.js"); fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_FR_JS + "/mermaid.min.js"); fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_EN_JS + "/mermaid.min.js"); - -// copy illustrated guide (not related to MkDocs, but still a part of the doc) -fs.copySync("docs/cassiopee_notice_illustree_fr.pdf", "src/assets/docs/pdf/cassiopee_notice_illustree_fr.pdf"); diff --git a/scripts/mkdocs2pdf-postprocess.js b/scripts/mkdocs2pdf-postprocess.js new file mode 100644 index 000000000..0752898f8 --- /dev/null +++ b/scripts/mkdocs2pdf-postprocess.js @@ -0,0 +1,13 @@ +'use strict'; + +/* + * mkdocs2pdf post processing. + * - copy illustrated guide (not related to MkDocs, but still a part of the doc) to dist/assets/docs/pdf + */ + +const fs = require('fs-extra'); + +const destPath_PDF = "dist/assets/docs/pdf"; // pour la doc illustrée + +fs.ensureDirSync(destPath_PDF); +fs.copySync("docs/cassiopee_notice_illustree_fr.pdf", destPath_PDF + "/cassiopee_notice_illustree_fr.pdf"); -- GitLab From 248a2cdd6d9c2da0d69dedba9e01906f217211cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 1 Dec 2022 10:07:35 +0100 Subject: [PATCH 071/285] refactor(doc): mkdocs2pdf.py: add variable for general build directory refs #578 --- mkdocs2pdf.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/mkdocs2pdf.py b/mkdocs2pdf.py index a4f15b0dc..f66b301a9 100644 --- a/mkdocs2pdf.py +++ b/mkdocs2pdf.py @@ -20,13 +20,14 @@ import yaml import re import shutil -baseDir = os.getcwd(); +baseDir = os.getcwd() +buildDir = os.path.join(baseDir, 'build') latexSourceDir = os.path.join(baseDir, 'docs/latex') -buildDir = os.path.join(baseDir, 'build/pdf_build') +pdfBuildDir = os.path.join(buildDir, 'pdf_build') outputDir = os.path.join(baseDir, 'dist/assets/docs/pdf') latexModelDir = 'latex_models' -modelDir = os.path.join(buildDir, latexModelDir) +modelDir = os.path.join(pdfBuildDir, latexModelDir) mergedDocFilenamePrefix = 'cassiopee_doc_contents_' filenamePrefix = 'cassiopee_doc_' @@ -128,7 +129,7 @@ def convertMdToTex(filePath): def getLatexModel(): # Clone Git repository - os.chdir(buildDir) + os.chdir(pdfBuildDir) runCommand( 'git clone {} {}'.format(latexModelRepository, latexModelDir) ) @@ -185,7 +186,7 @@ def buildPDF(lang): outputPdfFile = filenamePrefix + lang + '.pdf' # copy Cassiopée version LateX file - cvt = os.path.join( baseDir, 'build', 'cassiopee_version.tex') + cvt = os.path.join(buildDir, 'cassiopee_version.tex') shutil.copy(cvt, modelDir) os.system( @@ -200,7 +201,7 @@ def buildPDF(lang): def buildDocForLang(lang): # Prepare temporary build directory - os.makedirs(buildDir, exist_ok=True) + os.makedirs(pdfBuildDir, exist_ok=True) # Prepare output directory os.makedirs(outputDir, exist_ok=True) @@ -212,7 +213,7 @@ def buildDocForLang(lang): s = exploreAndMerge(dMkdocsYaml['docs_dir'], dMkdocsYaml['nav']) # Save the merged .md file mergedDocFilename = mergedDocFilenamePrefix + lang - mergedDocOutputPath = os.path.join(buildDir, mergedDocFilename) + mergedDocOutputPath = os.path.join(pdfBuildDir, mergedDocFilename) # remove internal links @TODO convert them to hyperref ? s = re.sub(r'\[([^/]+)\]\([^ ]+\.md\)', r'\1', s) with open('{}.md'.format(mergedDocOutputPath), 'w') as f: @@ -229,7 +230,7 @@ def buildDocForLang(lang): buildPDF(lang) # Clean build dir - shutil.rmtree(buildDir) + shutil.rmtree(pdfBuildDir) if __name__ == '__main__': -- GitLab From 0fa87f19b02944676644ca84dc5b7c372199a756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 1 Dec 2022 12:54:54 +0100 Subject: [PATCH 072/285] feat(doc): add Cassiopee version in HTML documentation header alse move Mkdocs files to own folder refs #578 --- mkdocs-en.yml => mkdocs/mkdocs-en.yml | 0 mkdocs-fr.yml => mkdocs/mkdocs-fr.yml | 0 package.json | 4 ++-- mkdocs2pdf.py => scripts/mkdocs2pdf.py | 3 ++- scripts/prepare_mkdocs.sh | 26 ++++++++++++++++++++++++++ 5 files changed, 30 insertions(+), 3 deletions(-) rename mkdocs-en.yml => mkdocs/mkdocs-en.yml (100%) rename mkdocs-fr.yml => mkdocs/mkdocs-fr.yml (100%) rename mkdocs2pdf.py => scripts/mkdocs2pdf.py (99%) create mode 100644 scripts/prepare_mkdocs.sh diff --git a/mkdocs-en.yml b/mkdocs/mkdocs-en.yml similarity index 100% rename from mkdocs-en.yml rename to mkdocs/mkdocs-en.yml diff --git a/mkdocs-fr.yml b/mkdocs/mkdocs-fr.yml similarity index 100% rename from mkdocs-fr.yml rename to mkdocs/mkdocs-fr.yml diff --git a/package.json b/package.json index 31400d75d..27d885816 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "e2e": "npm run preprocess && node scripts/check-translations.js && npm run ng -- e2e --suite=regular --webdriver-update=false", "e2equick": "node scripts/check-translations.js && npm run ng -- e2e --dev-server-target= --suite=regular --webdriver-update=false", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", - "mkdocs": "python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && node scripts/mkdocs-postprocess.js", - "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 mkdocs2pdf.py && node scripts/mkdocs2pdf-postprocess.js", + "mkdocs": "bash scripts/prepare_mkdocs.sh; cd build; python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && cd .. && node scripts/mkdocs-postprocess.js", + "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 scripts/mkdocs2pdf.py && node scripts/mkdocs2pdf-postprocess.js", "clean": "rm -rf build dist release src/date_revision.ts src/assets/docs", "preprocess": "mkdir -p build; node scripts/preprocessors.js", "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 0.0.0.0 --poll 5000", diff --git a/mkdocs2pdf.py b/scripts/mkdocs2pdf.py similarity index 99% rename from mkdocs2pdf.py rename to scripts/mkdocs2pdf.py index f66b301a9..6e3cf6804 100644 --- a/mkdocs2pdf.py +++ b/scripts/mkdocs2pdf.py @@ -206,7 +206,7 @@ def buildDocForLang(lang): os.makedirs(outputDir, exist_ok=True) # Read config - yamlPath = 'mkdocs-' + lang + '.yml' + yamlPath = 'mkdocs/mkdocs-' + lang + '.yml' dMkdocsYaml = readConfig(yamlPath) # Create string with merged MarkDown @@ -231,6 +231,7 @@ def buildDocForLang(lang): # Clean build dir shutil.rmtree(pdfBuildDir) + #raise RuntimeError() if __name__ == '__main__': diff --git a/scripts/prepare_mkdocs.sh b/scripts/prepare_mkdocs.sh new file mode 100644 index 000000000..af53d10dc --- /dev/null +++ b/scripts/prepare_mkdocs.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +set -o errexit + +BUILD_DIR=build +VER_FILE=$BUILD_DIR/cassiopee_version + +function prepareMkdocs +{ + local lang=$1 + + # copy and modify Mkdocs configuration file : + # - add Cassiopée version + # - modify path to input files + # - modify path to output files + cat mkdocs/mkdocs-$lang.yml \ + | sed "/^site_name:/ s/$/ v$VER/" \ + | sed "/^docs_dir:/ s/docs_dir: /docs_dir: ..\//" \ + | sed "/^site_dir:/ s/site_dir: /site_dir: ..\//" > $BUILD_DIR/mkdocs-$1.yml +} + +node scripts/extract-nghyd-version.js $VER_FILE +VER=$(cat $VER_FILE) + +prepareMkdocs fr +prepareMkdocs en -- GitLab From 070271d58501dacaa83ec370ebb0dbeb318faf0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 2 Dec 2022 08:57:22 +0100 Subject: [PATCH 073/285] ci: update jalhyd_branch to 330-prebarrage-puissance-dissipee-negative refs #538 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index d64531f13..ad8cc6ff7 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -devel +330-prebarrage-puissance-dissipee-negative -- GitLab From 96b87a9e49ebda706014f00d576a2c187f713af4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 2 Dec 2022 09:58:49 +0100 Subject: [PATCH 074/285] test(e2e): check that predam calculation with low iteration count generates log messages refs #538 --- e2e/predam-log.e2e-spec.ts | 44 ++++++++++++++++++++++++++++++++++++++ e2e/preferences.po.ts | 6 ++++++ 2 files changed, 50 insertions(+) create mode 100644 e2e/predam-log.e2e-spec.ts diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts new file mode 100644 index 000000000..cb06046b7 --- /dev/null +++ b/e2e/predam-log.e2e-spec.ts @@ -0,0 +1,44 @@ +import { browser, by, element } from "protractor"; +import { CalculatorPage } from "./calculator.po"; +import { ListPage } from "./list.po"; +import { Navbar } from "./navbar.po"; +import { PreferencesPage } from "./preferences.po" + +describe("check that low iteration count leads to log messages", () => { + let listPage: ListPage; + let prefPage: PreferencesPage; + let navBar: Navbar; + let calcPage: CalculatorPage; + + beforeEach(async () => { + prefPage = new PreferencesPage(); + listPage = new ListPage(); + navBar = new Navbar(); + calcPage = new CalculatorPage(); + + // disable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await browser.sleep(200); + await prefPage.disableEvilEmptyFields(); + await browser.sleep(100); + }); + + it("", async () => { + browser.manage().window().setPosition(2000, 30); + + // set low iteration count + await prefPage.setIterationCount(5); + + // open predam calculator + await navBar.clickNewCalculatorButton(); + await listPage.clickMenuEntryForCalcType(30); + await browser.sleep(200); + + // run calculation + const calcButton = calcPage.getCalculateButton(); + await calcButton.click(); + + // check log messages presence + expect(calcPage.hasLog()).toBe(true); + }); +}); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 2360ff351..264ebb84f 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -64,4 +64,10 @@ export class PreferencesPage { await cb.click(); } } + + async setIterationCount(n: number) { + const input = this.getInputFromName("nmi"); + input.clear(); + await input.sendKeys(n.toString()); + } } -- GitLab From 209be381f1cda43a8b32933805e6c144de33595a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 6 Dec 2022 14:21:15 +0100 Subject: [PATCH 075/285] fix(e2e): translation checks fail due to multiple imports in jalhyd/src/util/message.ts refs #538 --- scripts/check-translations.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/check-translations.js b/scripts/check-translations.js index e52f610a0..99b0058dc 100644 --- a/scripts/check-translations.js +++ b/scripts/check-translations.js @@ -38,8 +38,14 @@ jm = jm.replace(/\n/g, ""); // split on "," const messages = jm.split(","); -// remove import on 1st line (wtf) @clodo -messages[0] = messages[0].substring(24); +// remove imports +const firstLine = messages[0].split(";"); +while (firstLine.length > 1) { + if (firstLine[0].indexOf("import") !== -1) { + firstLine.splice(0, 1); + } +} +messages[0] = firstLine[firstLine.length - 1]; // read every language file const localePath = "src/locale"; -- GitLab From c7ec804e41178849d70e1d56081cb938675cf028 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 7 Dec 2022 10:49:36 +0100 Subject: [PATCH 076/285] fix: fish ladder generation dialog: set rounding precision to 3 digits refs #543 --- .../dialog-generate-pab/dialog-generate-pab.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/dialog-generate-pab/dialog-generate-pab.component.ts b/src/app/components/dialog-generate-pab/dialog-generate-pab.component.ts index 202aa1fd8..ebbeb1450 100644 --- a/src/app/components/dialog-generate-pab/dialog-generate-pab.component.ts +++ b/src/app/components/dialog-generate-pab/dialog-generate-pab.component.ts @@ -26,7 +26,7 @@ export class DialogGeneratePABComponent { private appSetupService: ApplicationSetupService, @Inject(MAT_DIALOG_DATA) public data: any ) { - const nDigits = this.appSetupService.displayPrecision; + const nDigits = 3; // nghyd#543 this.coteAmont = data.coteAmont ? round(data.coteAmont, nDigits) : undefined; this.debit = data.debit ? round(data.debit, nDigits) : undefined; this.nbBassins = data.nbBassins; -- GitLab From f0c51eb08cc6c25570bf1775de47683c18c8024f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 7 Dec 2022 12:45:27 +0100 Subject: [PATCH 077/285] fix: fish ladder calculator: set precision display in table to 3 digits refs #543 --- src/app/components/pab-table/pab-table.component.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index d21fa2838..8ef4e14c1 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -77,6 +77,9 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni /** used for shift+click implementation */ private latestClickedCell: any; + /** number of digits (after decimal point) to use to display number in the table */ + private readonly nDigits = 3; // 3 -> cf. nghyd#543 + public constructor( private i18nService: I18nService, private formService: FormulaireService, @@ -1427,7 +1430,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni } public getCellValue(cell) { - return cell.model.singleValue; + return round(cell.model.singleValue, this.nDigits); } public setCellValue(cell, event) { -- GitLab From 5fdb17eea7a2e7089ba905f8b15ed317240d8812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 7 Dec 2022 13:16:26 +0100 Subject: [PATCH 078/285] fix: predams graph: do not allow to remove basin if it's unique refs #582 --- src/app/components/pb-schema/pb-schema.component.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/app/components/pb-schema/pb-schema.component.ts b/src/app/components/pb-schema/pb-schema.component.ts index 7ac6b72a7..6de70eecd 100644 --- a/src/app/components/pb-schema/pb-schema.component.ts +++ b/src/app/components/pb-schema/pb-schema.component.ts @@ -435,6 +435,13 @@ export class PbSchemaComponent implements AfterViewInit, AfterContentInit, OnIni } public get enableRemoveButton() { + // do not allow to remove last basin + if (this._selectedItem instanceof PbBassin) { + if (this.predamService.bassins.length == 1) { + return false; + } + } + if (this._selectedItem === this.predamService.upstreamBassin) { return false; } -- GitLab From 430a0773dc8c22333b12dabf8832cf05df88f2cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 7 Dec 2022 13:41:36 +0100 Subject: [PATCH 079/285] fix: fish ladder table: right align inputs, prevent long (many digits) number to overlap neighbouring table cell refs #583 --- src/styles.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/styles.scss b/src/styles.scss index cdcf478a9..734ff3487 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -272,6 +272,8 @@ field-set { > input[type="number"] { -moz-appearance: textfield; + text-align: right; + width: 88%; } input[type=number]::-webkit-outer-spin-button, input[type=number]::-webkit-inner-spin-button { -- GitLab From 6f2079a95bb6b4335132e430f2581bf7a7a17c96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 7 Dec 2022 16:50:21 +0100 Subject: [PATCH 080/285] =?UTF-8?q?doc:=20tag=20creation=20script:=20add?= =?UTF-8?q?=20reminder=20to=20modify=20Cassiop=C3=A9e=20version=20in=20pre?= =?UTF-8?q?sentation=20document=20(referred=20to=20with=20DOI=2010.15454/T?= =?UTF-8?q?LO5LX)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/deploy-new-stable-version.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/deploy-new-stable-version.sh b/scripts/deploy-new-stable-version.sh index e981740c5..92733055e 100755 --- a/scripts/deploy-new-stable-version.sh +++ b/scripts/deploy-new-stable-version.sh @@ -105,4 +105,8 @@ git tag -fa "$VERSION" -m "release version $VERSION" git push git push --tags --force +echo +echo "N'oubliez pas de modifier le numéro de version dans le document https://doi.org/10.15454/TLO5LX" +echo + echo "Tagging done, Gitlab CI/CD should take care of the rest." -- GitLab From 88e15cfe4ff6ea5fcc943703701143c6c8d97cb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 7 Dec 2022 17:18:52 +0100 Subject: [PATCH 081/285] doc: legal notice and terms of use: update director of publication/developers --- docs/en/mentions_legales.md | 4 ++-- docs/fr/mentions_legales.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/mentions_legales.md b/docs/en/mentions_legales.md index 3aef772b2..59055318f 100644 --- a/docs/en/mentions_legales.md +++ b/docs/en/mentions_legales.md @@ -11,11 +11,11 @@ The site cassiopee.g-eau.fr hereinafter referred to as "Cassiopée" is published > France > Tel: +33 (0) 4 67 04 63 00 -Director of publication: Olivier Barreteau, Director of the UMR G-EAU +Director of publication: Marcel Kuper, Director of the UMR G-EAU Development Project Manager: David Dorchies -Developers: François Grand, Mathias Chouet +Developers: David Dorchies, François Grand, Mathias Chouet Cassiopée is a tool proposed by [OFB (French Office for Biodiversity)](https://ofb.gouv.fr/) within the framework of the OFB-Irstea conventions (Action n°100 of the 2016-2018 convention and Action n°21 of the 2019-2021 convention). diff --git a/docs/fr/mentions_legales.md b/docs/fr/mentions_legales.md index f6795c5eb..570947aa0 100644 --- a/docs/fr/mentions_legales.md +++ b/docs/fr/mentions_legales.md @@ -13,11 +13,11 @@ Le site cassiopee.g-eau.fr dénommé ci-après « Cassiopée » est édité par > Tél : +33 (0) 4 67 04 63 00 -Directeur de publication : Olivier Barreteau, Directeur de l’UMR G-EAU +Directeur de publication : Marcel Kuper, Directeur de l’UMR G-EAU Responsable du projet de développement : David Dorchies -Développeurs : François Grand, Mathias Chouet +Développeurs : David Dorchies, François Grand, Mathias Chouet Cassiopée est un outil proposé par [l'OFB (Office Français de la Biodiversité)](https://ofb.gouv.fr/) dans le cadre des conventions OFB-Irstea (Action n°100 de la convention 2016-2018 et Action n°21 de la convention 2019-2021). -- GitLab From ad2ca9414fbc846598ef1f233bc0c476e1c9def1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 8 Dec 2022 14:05:06 +0100 Subject: [PATCH 082/285] fix: fish ladder graphs: "message not found" in legend refs #584 --- src/app/calculators/pab/en.json | 1 + src/app/calculators/pab/fr.json | 3 ++- .../pab-profile-chart/pab-profile-chart.component.ts | 4 +++- src/app/services/formulaire.service.ts | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/app/calculators/pab/en.json b/src/app/calculators/pab/en.json index d3fda007d..a9360eb6c 100644 --- a/src/app/calculators/pab/en.json +++ b/src/app/calculators/pab/en.json @@ -4,6 +4,7 @@ "Q": "Flow", "Z1": "Upstream elevation", "Z2": "Downstream elevation", + "ZW": "Water line (m)", "Z": "Water elevation", "LB": "Basin length", diff --git a/src/app/calculators/pab/fr.json b/src/app/calculators/pab/fr.json index d951248b7..68b983df6 100644 --- a/src/app/calculators/pab/fr.json +++ b/src/app/calculators/pab/fr.json @@ -4,6 +4,7 @@ "Q": "Débit", "Z1": "Cote amont", "Z2": "Cote aval", + "ZW": "Ligne d'eau (m)", "Z": "Cote de l'eau", "LB": "Longueur du bassin", @@ -29,4 +30,4 @@ "UNIT_H1": "m", "UNIT_H2": "m", "UNIT_SUBMERGENCE": "%" -} \ No newline at end of file +} diff --git a/src/app/components/pab-profile-chart/pab-profile-chart.component.ts b/src/app/components/pab-profile-chart/pab-profile-chart.component.ts index 5bbc25c8f..c8eff7ec5 100644 --- a/src/app/components/pab-profile-chart/pab-profile-chart.component.ts +++ b/src/app/components/pab-profile-chart/pab-profile-chart.component.ts @@ -16,6 +16,7 @@ import { CalculatorResults } from 'app/results/calculator-results'; import zoomPlugin from 'chartjs-plugin-zoom'; import { Chart } from "chart.js"; +import { FormulaireService } from "app/services/formulaire.service"; @Component({ selector: "pab-profile-chart", @@ -70,6 +71,7 @@ export class PabProfileChartComponent extends ResultsComponentDirective implemen public constructor( private intlService: I18nService, + private formService: FormulaireService, private cd: ChangeDetectorRef ) { super(); @@ -444,7 +446,7 @@ export class PabProfileChartComponent extends ResultsComponentDirective implemen label: ( this._results.variatedParameters.length > 0 ? this.getLegendForSeries(n) : - this.intlService.localizeText("INFO_LIB_ZW") // ligne d'eau + this.formService.localizeText("ZW", this.formService.currentForm.calculatorType) // ligne d'eau ), color: palette[ n % palette.length ] }); diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 19022be0b..5c29f442d 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -602,7 +602,7 @@ export class FormulaireService extends Observable { } } - private get currentForm(): FormulaireDefinition { + public get currentForm(): FormulaireDefinition { return this.getFormulaireFromId(this._currentFormId); } -- GitLab From 759af5cf1f5e3e62702f1ccad4a9990cdbdb8263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 14 Dec 2022 16:32:28 +0100 Subject: [PATCH 083/285] refactor: move sections specific code to FormulaireSection --- .../formulaire/definition/form-definition.ts | 45 ++++-------------- src/app/formulaire/definition/form-section.ts | 47 ++++++++++++++++++- 2 files changed, 54 insertions(+), 38 deletions(-) diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index 1915ac99d..656478c2a 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -5,8 +5,6 @@ import { Props, Observer, Session, - SectionNub, - acSection, ParamDefinition, Result, VariatedDetails, @@ -28,7 +26,6 @@ import { PabTable } from "../elements/pab-table"; import { SelectEntry } from "../elements/select/select-entry"; import { SelectField } from "../elements/select/select-field"; import { DeepSelectFieldIterator } from "../form-iterator/deep-selectfield-iterator"; -import { ConfigParser as ConfigParser } from "./config-parser"; /** * classe de base pour tous les formulaires @@ -44,9 +41,6 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs /** propriétés par défaut (lues si _currentNub === undefined ) */ protected _props = {}; - /** for SectionNubs only */ - private _defaultSectionType; - /** aide en ligne pour les résultats */ protected _resultsHelpLinks: { [key: string]: string }; @@ -126,16 +120,6 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs const p = props ? props : new Props(this.defaultProperties); p.setPropValue(Prop_NullParameters, ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit); // transmit "empty fields" flag this.currentNub = Session.getInstance().createSessionNub(p); - - if (this.currentNub instanceof SectionNub) { - // add new Section as first child, from given nodeType - const propsSection = new Props(); - propsSection.setPropValue("calcType", CalculatorType.Section); - propsSection.setPropValue("nodeType", this._defaultSectionType); - propsSection.setPropValue(Prop_NullParameters, ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit); - const section = Session.getInstance().createNub(propsSection); - this.currentNub.setSection(section as acSection); - } } public get currentNub(): Nub { @@ -163,8 +147,14 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs Session.getInstance().deleteNub(sn); } + /** + * prepare options parsing + */ + protected preparseOptions() { + } + protected parseOptions(json: {}) { - this.parseDefaultSectionType(); + this.preparseOptions(); this._helpLink = json["help"]; this._resultsHelpLinks = json["resultsHelp"]; @@ -173,25 +163,6 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } } - /** - * determine default section type from select configuration - */ - private parseDefaultSectionType() { - if (this._defaultSectionType === undefined) { - const jp = new ConfigParser(this._jsonConfig); - for (const fs of jp.forAll("fieldset")) { - const fsp = new ConfigParser(fs["fields"]); - for (const sel of fsp.forAll("select")) { - if (sel["id"] === "select_section") { - const st = sel["default"]; - this._defaultSectionType = SectionType[st]; - return; - } - } - } - } - } - /** called at the end of parseConfig() */ protected completeParse(firstNotif: boolean = true) { this.helpLinks = this._resultsHelpLinks; @@ -258,7 +229,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs public preparseConfig(json: {}) { this._jsonConfig = json; - this.parseDefaultSectionType(); + this.preparseOptions(); // analyse des options globales // il est utile de le faire avant le reste pour les modules de calcul utilisant diff --git a/src/app/formulaire/definition/form-section.ts b/src/app/formulaire/definition/form-section.ts index c408e572a..7ef1534e1 100644 --- a/src/app/formulaire/definition/form-section.ts +++ b/src/app/formulaire/definition/form-section.ts @@ -2,10 +2,55 @@ import { FormulaireFixedVar } from "./form-fixedvar"; import { FieldSet } from "../elements/fieldset"; import { ServiceFactory } from "../../services/service-factory"; -import { IObservable, Session, SectionNub } from "jalhyd"; +import { IObservable, Session, SectionNub, Props, CalculatorType, Prop_NullParameters, acSection } from "jalhyd"; +import { ConfigParser } from "./config-parser"; +import { SectionType } from "jalhyd"; export class FormulaireSection extends FormulaireFixedVar { + /** for SectionNubs only */ + protected _defaultSectionType; + + /** + * determine default section type from select configuration + */ + private parseDefaultSectionType() { + if (this._defaultSectionType === undefined) { + const jp = new ConfigParser(this._jsonConfig); + for (const fs of jp.forAll("fieldset")) { + const fsp = new ConfigParser(fs["fields"]); + for (const sel of fsp.forAll("select")) { + if (sel["id"] === "select_section") { + const st = sel["default"]; + this._defaultSectionType = SectionType[st]; + return; + } + } + } + } + } + + protected preparseOptions() { + this.parseDefaultSectionType(); + } + + public initNub(props?: Props) { + super.initNub(props); + + if (this.currentNub instanceof SectionNub) { + // add new Section as first child, from given nodeType + const propsSection = new Props(); + propsSection.setPropValue("calcType", CalculatorType.Section); + propsSection.setPropValue("nodeType", this._defaultSectionType); + propsSection.setPropValue(Prop_NullParameters, ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit); + const section = Session.getInstance().createNub(propsSection); + this.currentNub.setSection(section as acSection); + } + else{ + throw new Error("nub is not a section nub!"); + } + } + public update(sender: IObservable, data: any) { super.update(sender, data); // changement de propriété du FieldSet contenant le select de choix du type de section -- GitLab From d0880a553f1338be263fb7a3be38b4ddda2f76a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 14 Dec 2022 17:03:45 +0100 Subject: [PATCH 084/285] refactor: move pab_table object (from calculator JSON configuration) processing to FormulairePab --- .../formulaire/definition/form-definition.ts | 28 +++++++++---------- src/app/formulaire/definition/form-pab.ts | 16 +++++++++-- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index 656478c2a..475c630c8 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -22,7 +22,6 @@ import { DeepFieldsetIterator } from "../form-iterator/deep-fieldset-iterator"; import { TopFormulaireElementIterator } from "../form-iterator/top-element-iterator"; import { CalculatorResults } from "../../results/calculator-results"; import { ServiceFactory } from "../../services/service-factory"; -import { PabTable } from "../elements/pab-table"; import { SelectEntry } from "../elements/select/select-entry"; import { SelectField } from "../elements/select/select-field"; import { DeepSelectFieldIterator } from "../form-iterator/deep-selectfield-iterator"; @@ -216,13 +215,6 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs this.kids.push(fsc); } - // @TODO move to FormulairePAB by overloading parseConfig() - private parse_pab_table(json: {}) { - const tab: PabTable = new PabTable(this); - tab.parseConfig(json); - this.kids.push(tab); - } - /** * 1ère passe d'analyse de la configuration */ @@ -246,6 +238,16 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } } + /** + * parse specific type from configuration file + * @param type object name + * @param confData object data + * @returns false if type is unknown + */ + protected parseConfigType(type: string, confData: any): boolean { + return false; + } + /** * 2ème passe d'analyse de la configuration */ @@ -278,12 +280,10 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs this.parse_template_container(conf, templates); break; - case "pab_table": // not generic at all - this.parse_pab_table(conf); - break; - default: - throw new Error(`type d'objet de module de calcul ${type} non pris en charge`); + if (!this.parseConfigType(type, conf)) { + throw new Error(`type d'objet de module de calcul ${type} non pris en charge`); + } } } @@ -522,5 +522,5 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs this.compute(); } - public resetFormResults() {} + public resetFormResults() { } } diff --git a/src/app/formulaire/definition/form-pab.ts b/src/app/formulaire/definition/form-pab.ts index b82eea454..85f423501 100644 --- a/src/app/formulaire/definition/form-pab.ts +++ b/src/app/formulaire/definition/form-pab.ts @@ -2,9 +2,9 @@ import { Pab, Result, VariatedDetails } from "jalhyd"; import { FormulaireDefinition } from "./form-definition"; import { PabResults } from "../../results/pab-results"; -import { NgParameter, ParamRadioConfig } from "../elements/ngparam"; +import { NgParameter } from "../elements/ngparam"; import { longestVarParam } from "../../util"; -import { CalculatorResults } from "../../results/calculator-results"; +import { PabTable } from "../elements/pab-table"; /** * Formulaire pour les passes à bassins, inspiré du formulaire @@ -24,6 +24,18 @@ export class FormulairePab extends FormulaireDefinition { return this.currentNub as Pab; } + protected parseConfigType(type: string, confData: any): boolean { + switch (type) { + case "pab_table": + const tab: PabTable = new PabTable(this); + tab.parseConfig(confData); + this.kids.push(tab); + return true; + } + + return false; + } + protected compute() { this.runNubCalc(this.currentNub); // reset variable index to avoid trying to access an index > 0 when nothing varies -- GitLab From 877ce7bb9140ff4983cbc061b3cb5899af422515 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 12 Dec 2022 08:51:32 +0100 Subject: [PATCH 085/285] update jalhyd_branch to 334-restructurer-lechapt-et-calmon-pour-de-nouvelles-lois-de-pertes-de-charge refs #585 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index ad8cc6ff7..0bd0de843 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -330-prebarrage-puissance-dissipee-negative +334-restructurer-lechapt-et-calmon-pour-de-nouvelles-lois-de-pertes-de-charge -- GitLab From 88d2ffdc60c402403248439101fdbf0f667047a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 14 Dec 2022 17:13:57 +0100 Subject: [PATCH 086/285] refactor: application start page: rename Lechapt-Calmon calculator to Pressure loss refs #585 --- .../config.json | 21 ++++++++++++++----- .../{lechaptcalmon => pressureloss}/en.json | 2 ++ .../{lechaptcalmon => pressureloss}/fr.json | 2 ++ .../calculator-list.component.ts | 3 ++- src/app/config.json | 2 +- src/locale/messages.en.json | 1 + src/locale/messages.fr.json | 1 + 7 files changed, 25 insertions(+), 7 deletions(-) rename src/app/calculators/{lechaptcalmon => pressureloss}/config.json (54%) rename src/app/calculators/{lechaptcalmon => pressureloss}/en.json (91%) rename src/app/calculators/{lechaptcalmon => pressureloss}/fr.json (91%) diff --git a/src/app/calculators/lechaptcalmon/config.json b/src/app/calculators/pressureloss/config.json similarity index 54% rename from src/app/calculators/lechaptcalmon/config.json rename to src/app/calculators/pressureloss/config.json index 1b440a6ae..00befe99f 100644 --- a/src/app/calculators/lechaptcalmon/config.json +++ b/src/app/calculators/pressureloss/config.json @@ -1,6 +1,21 @@ [ { - "id": "fs_materiau", + "id": "fs_pressureloss_law", + "type": "fieldset", + "fields": [ + { + "id": "select_pressureloss_law", + "type": "select", + "property": "pressureLossType", + "default": "LechaptCalmon", + "help": { + "0": "hyd_en_charge/lechapt-calmon.html" + } + } + ] + }, + { + "id": "fs_lechaptcalmon", "type": "fieldset", "fields": [ { @@ -24,9 +39,5 @@ "Lg", "Ks" ] - }, - { - "type": "options", - "help": "hyd_en_charge/lechapt-calmon.html" } ] \ No newline at end of file diff --git a/src/app/calculators/lechaptcalmon/en.json b/src/app/calculators/pressureloss/en.json similarity index 91% rename from src/app/calculators/lechaptcalmon/en.json rename to src/app/calculators/pressureloss/en.json index 729994b0e..e93afd9bf 100644 --- a/src/app/calculators/lechaptcalmon/en.json +++ b/src/app/calculators/pressureloss/en.json @@ -1,4 +1,6 @@ { + "fs_pressureloss_law": "Pressure loss", + "select_pressureloss_law": "Pressure loss law", "fs_materiau": "Type of material", "select_material": "Choice of material", "MATERIAL_0": "Unlined cast iron - Coarse concrete (corrosive water)", diff --git a/src/app/calculators/lechaptcalmon/fr.json b/src/app/calculators/pressureloss/fr.json similarity index 91% rename from src/app/calculators/lechaptcalmon/fr.json rename to src/app/calculators/pressureloss/fr.json index 89884cabd..17965675c 100644 --- a/src/app/calculators/lechaptcalmon/fr.json +++ b/src/app/calculators/pressureloss/fr.json @@ -1,4 +1,6 @@ { + "fs_pressureloss_law": "Perte de charge", + "select_pressureloss_law": "Loi de perte de charge", "fs_materiau": "Type du matériau", "select_material": "Choix du matériau", "MATERIAL_0": "Fonte ou acier non revêtus - Béton grossier (eau corrosive)", diff --git a/src/app/components/calculator-list/calculator-list.component.ts b/src/app/components/calculator-list/calculator-list.component.ts index ec0ec059a..b62c4f2e4 100644 --- a/src/app/components/calculator-list/calculator-list.component.ts +++ b/src/app/components/calculator-list/calculator-list.component.ts @@ -120,7 +120,8 @@ export class CalculatorListComponent implements OnInit { CalculatorType.CloisonAval, CalculatorType.YAXN, CalculatorType.PbBassin, - CalculatorType.PbCloison + CalculatorType.PbCloison, + CalculatorType.LechaptCalmon ].includes(t) ) { unusedTheme.calculators.push({ diff --git a/src/app/config.json b/src/app/config.json index 97f3c60d6..1bc488230 100644 --- a/src/app/config.json +++ b/src/app/config.json @@ -63,7 +63,7 @@ "path": "en-charge.jpg", "credits": "Catherine Tailleux / Inrae" }, - "calculators": [ 1, 0 ] + "calculators": [ 35, 0 ] }, { "name": "LOIS_D_OUVRAGES", diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 6ac8ce559..c88ae52e5 100755 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -261,6 +261,7 @@ "INFO_LECHAPTCALMON_DESCRIPTION": "pipe flow circular headloss", "INFO_LECHAPTCALMON_TITRE_COURT": "Lechapt-C.", "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon", + "INFO_PRESSURELOSS_TITRE": "Pressure loss", "INFO_LIB_ABSCISSE": "Abscissa (m)", "INFO_LIB_ALTITUDE": "Altitude (m)", "INFO_LIB_LENGTHS": "Every length", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 241353236..70fd109ee 100755 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -261,6 +261,7 @@ "INFO_LECHAPTCALMON_DESCRIPTION": "Hydraulique en charge conduite colebrook", "INFO_LECHAPTCALMON_TITRE_COURT": "Lechapt-C.", "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon", + "INFO_PRESSURELOSS_TITRE": "Perte de charge", "INFO_LIB_ABSCISSE": "Abscisse (m)", "INFO_LIB_ALTITUDE": "Altitude (m)", "INFO_LIB_LENGTHS": "Toutes les longueurs", -- GitLab From f11b78e934c021c011ddeaa79aebb589f8a28bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 15 Dec 2022 11:27:26 +0100 Subject: [PATCH 087/285] fix(e2e): exclude LechaptCalmon calculator refs #585 --- e2e/tested_calctypes.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/e2e/tested_calctypes.ts b/e2e/tested_calctypes.ts index cdd1fc766..590416318 100644 --- a/e2e/tested_calctypes.ts +++ b/e2e/tested_calctypes.ts @@ -1,7 +1,9 @@ // cannot import JaLHyd here :/ // @WARNING keep in sync if CalculatorType enum order changes in JaLHyd export const testedCalcTypes = [ - 0, 1, 2, 3, 4, 5, 6, + 0, + // omit 1 - LechaptCalmon + 2, 3, 4, 5, 6, // omit 7 - Structure 8, 9, 10, 11, 12, 13, // omit 14 -Section -- GitLab From 232fb2a7df237267fbd1705678e6ca05e1e22c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 15 Dec 2022 11:29:38 +0100 Subject: [PATCH 088/285] feat: add FormulaireDefinition.parseSelectDefaultValue() refs #585 --- .../formulaire/definition/form-definition.ts | 19 +++++++++++++++++++ src/app/formulaire/definition/form-section.ts | 14 ++------------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index 475c630c8..f2141323a 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -25,6 +25,7 @@ import { ServiceFactory } from "../../services/service-factory"; import { SelectEntry } from "../elements/select/select-entry"; import { SelectField } from "../elements/select/select-field"; import { DeepSelectFieldIterator } from "../form-iterator/deep-selectfield-iterator"; +import { ConfigParser } from "./config-parser"; /** * classe de base pour tous les formulaires @@ -146,6 +147,24 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs Session.getInstance().deleteNub(sn); } + /** + * parse calculator JSON configuration for select default value + * @param selectId select id, ie. "id" field value + * @return select "default" field value + */ + protected parseSelectDefaultValue(json: {}, selectId: string): string { + const jp = new ConfigParser(json); + for (const fs of jp.forAll("fieldset")) { + const fsp = new ConfigParser(fs["fields"]); + for (const sel of fsp.forAll("select")) { + if (sel["id"] === selectId) { + return sel["default"]; + } + } + } + return undefined; + } + /** * prepare options parsing */ diff --git a/src/app/formulaire/definition/form-section.ts b/src/app/formulaire/definition/form-section.ts index 7ef1534e1..8f8be0af9 100644 --- a/src/app/formulaire/definition/form-section.ts +++ b/src/app/formulaire/definition/form-section.ts @@ -3,7 +3,6 @@ import { FieldSet } from "../elements/fieldset"; import { ServiceFactory } from "../../services/service-factory"; import { IObservable, Session, SectionNub, Props, CalculatorType, Prop_NullParameters, acSection } from "jalhyd"; -import { ConfigParser } from "./config-parser"; import { SectionType } from "jalhyd"; export class FormulaireSection extends FormulaireFixedVar { @@ -16,17 +15,8 @@ export class FormulaireSection extends FormulaireFixedVar { */ private parseDefaultSectionType() { if (this._defaultSectionType === undefined) { - const jp = new ConfigParser(this._jsonConfig); - for (const fs of jp.forAll("fieldset")) { - const fsp = new ConfigParser(fs["fields"]); - for (const sel of fsp.forAll("select")) { - if (sel["id"] === "select_section") { - const st = sel["default"]; - this._defaultSectionType = SectionType[st]; - return; - } - } - } + const def = this.parseSelectDefaultValue(this._jsonConfig, "select_section"); + this._defaultSectionType = SectionType[def]; } } -- GitLab From 786bbb81cafe92b3d97b88862d5ae7f90fcb2aa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 15 Dec 2022 13:48:23 +0100 Subject: [PATCH 089/285] feat: add pressure loss form refs #585 --- .../definition/form-pressureloss.ts | 24 +++++++++++++++++++ src/app/services/formulaire.service.ts | 5 ++++ 2 files changed, 29 insertions(+) create mode 100644 src/app/formulaire/definition/form-pressureloss.ts diff --git a/src/app/formulaire/definition/form-pressureloss.ts b/src/app/formulaire/definition/form-pressureloss.ts new file mode 100644 index 000000000..4ba8f55dd --- /dev/null +++ b/src/app/formulaire/definition/form-pressureloss.ts @@ -0,0 +1,24 @@ +import { PressureLoss, Props, PressureLossType } from "jalhyd"; +import { FormulaireFixedVar } from "./form-fixedvar"; + +/** + * Formulaire pour la perte de charge + */ +export class FormulairePressureLoss extends FormulaireFixedVar { + public preparseConfig(json: {}) { + super.preparseConfig(json); + + // get pressure loss law select default value + const dft: string = this.parseSelectDefaultValue(json, "select_pressureloss_law"); + this.defaultProperties["pressureLossType"] = PressureLossType[dft]; + } + + public initNub(props?: Props) { + if (props === undefined) { + props = new Props(); + } + props.setPropValue("calcType", this.calculatorType); + props.setPropValue("pressureLossType", this.defaultProperties["pressureLossType"]); + super.initNub(props); + } +} diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 19022be0b..c7486a1b1 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -57,6 +57,7 @@ import { FormulaireVerificateur } from "../formulaire/definition/form-verificate import { FormulaireEspece } from "../formulaire/definition/form-espece"; import { FormulairePrebarrage } from "../formulaire/definition/form-prebarrage"; import { ServiceFactory } from "./service-factory"; +import { FormulairePressureLoss } from "app/formulaire/definition/form-pressureloss"; @Injectable() export class FormulaireService extends Observable { @@ -346,6 +347,10 @@ export class FormulaireService extends Observable { f = new FormulairePrebarrage(); break; + case CalculatorType.PressureLoss: + f = new FormulairePressureLoss(); + break; + default: f = new FormulaireFixedVar(); } -- GitLab From c047d84112f58dc8b519a6d911caa93c64d21381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 15 Dec 2022 14:17:37 +0100 Subject: [PATCH 090/285] fix: do not load translation files for Lechapt-Calmon calculor (now, it's a child nub) refs #585 --- src/app/services/internationalisation.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/services/internationalisation.service.ts b/src/app/services/internationalisation.service.ts index af0f2d42e..ba7e4cf84 100644 --- a/src/app/services/internationalisation.service.ts +++ b/src/app/services/internationalisation.service.ts @@ -62,7 +62,8 @@ export class I18nService extends Observable implements Observer { public async setLanguage(code: string) { /** excluded calculators */ const childCalculatorType: CalculatorType[] = [ - CalculatorType.Section, CalculatorType.Structure, CalculatorType.CloisonAval, CalculatorType.YAXN + CalculatorType.Section, CalculatorType.Structure, CalculatorType.CloisonAval, CalculatorType.YAXN, + CalculatorType.LechaptCalmon ]; // ensure 2-letter language code -- GitLab From 528f5808c337b03a9258c02af305d1b918c3462c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 15 Dec 2022 14:24:16 +0100 Subject: [PATCH 091/285] pressure loss: add translations for short title/description refs #585 --- src/locale/messages.en.json | 2 ++ src/locale/messages.fr.json | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index c88ae52e5..fb955b4d2 100755 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -261,6 +261,8 @@ "INFO_LECHAPTCALMON_DESCRIPTION": "pipe flow circular headloss", "INFO_LECHAPTCALMON_TITRE_COURT": "Lechapt-C.", "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon", + "INFO_PRESSURELOSS_TITRE_DESCRIPTION": "Headloss in a pipe flow", + "INFO_PRESSURELOSS_TITRE_COURT": "Press. loss", "INFO_PRESSURELOSS_TITRE": "Pressure loss", "INFO_LIB_ABSCISSE": "Abscissa (m)", "INFO_LIB_ALTITUDE": "Altitude (m)", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 70fd109ee..81d52af76 100755 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -261,6 +261,8 @@ "INFO_LECHAPTCALMON_DESCRIPTION": "Hydraulique en charge conduite colebrook", "INFO_LECHAPTCALMON_TITRE_COURT": "Lechapt-C.", "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon", + "INFO_PRESSURELOSS_TITRE_DESCRIPTION": "Pertes dans une conduite en charge", + "INFO_PRESSURELOSS_TITRE_COURT": "Perte de ch.", "INFO_PRESSURELOSS_TITRE": "Perte de charge", "INFO_LIB_ABSCISSE": "Abscisse (m)", "INFO_LIB_ALTITUDE": "Altitude (m)", -- GitLab From 666e455a89a5c56cede264c76b1a63b3310fc1ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 15 Dec 2022 14:35:05 +0100 Subject: [PATCH 092/285] fix: SelectFieldFactory.newSelectField(): syntax error in error message refs #585 --- src/app/formulaire/elements/select/select-field-factory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/formulaire/elements/select/select-field-factory.ts b/src/app/formulaire/elements/select/select-field-factory.ts index 49fed0c91..8c3072db3 100644 --- a/src/app/formulaire/elements/select/select-field-factory.ts +++ b/src/app/formulaire/elements/select/select-field-factory.ts @@ -72,7 +72,7 @@ export class SelectFieldFactory { return new SelectFieldNubProperty(parent); default: - throw new Error("unknown select id ${id}"); + throw new Error(`unknown select id ${json["id"]}`); } } } -- GitLab From 63a416ce798f76c261358cb3b8b037b983d6cec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 15 Dec 2022 14:45:50 +0100 Subject: [PATCH 093/285] fix: pressure loss calculator JSON configuration: bad select id refs #585 --- src/app/calculators/pressureloss/config.json | 2 +- src/app/calculators/pressureloss/en.json | 2 +- src/app/calculators/pressureloss/fr.json | 2 +- src/app/formulaire/definition/form-pressureloss.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/calculators/pressureloss/config.json b/src/app/calculators/pressureloss/config.json index 00befe99f..18f6ed008 100644 --- a/src/app/calculators/pressureloss/config.json +++ b/src/app/calculators/pressureloss/config.json @@ -4,7 +4,7 @@ "type": "fieldset", "fields": [ { - "id": "select_pressureloss_law", + "id": "select_pressurelosstype", "type": "select", "property": "pressureLossType", "default": "LechaptCalmon", diff --git a/src/app/calculators/pressureloss/en.json b/src/app/calculators/pressureloss/en.json index e93afd9bf..d2ffa6aeb 100644 --- a/src/app/calculators/pressureloss/en.json +++ b/src/app/calculators/pressureloss/en.json @@ -1,6 +1,6 @@ { "fs_pressureloss_law": "Pressure loss", - "select_pressureloss_law": "Pressure loss law", + "select_pressurelosstype": "Pressure loss law", "fs_materiau": "Type of material", "select_material": "Choice of material", "MATERIAL_0": "Unlined cast iron - Coarse concrete (corrosive water)", diff --git a/src/app/calculators/pressureloss/fr.json b/src/app/calculators/pressureloss/fr.json index 17965675c..17cde6a02 100644 --- a/src/app/calculators/pressureloss/fr.json +++ b/src/app/calculators/pressureloss/fr.json @@ -1,6 +1,6 @@ { "fs_pressureloss_law": "Perte de charge", - "select_pressureloss_law": "Loi de perte de charge", + "select_pressurelosstype": "Loi de perte de charge", "fs_materiau": "Type du matériau", "select_material": "Choix du matériau", "MATERIAL_0": "Fonte ou acier non revêtus - Béton grossier (eau corrosive)", diff --git a/src/app/formulaire/definition/form-pressureloss.ts b/src/app/formulaire/definition/form-pressureloss.ts index 4ba8f55dd..60c98da99 100644 --- a/src/app/formulaire/definition/form-pressureloss.ts +++ b/src/app/formulaire/definition/form-pressureloss.ts @@ -9,7 +9,7 @@ export class FormulairePressureLoss extends FormulaireFixedVar { super.preparseConfig(json); // get pressure loss law select default value - const dft: string = this.parseSelectDefaultValue(json, "select_pressureloss_law"); + const dft: string = this.parseSelectDefaultValue(json, "select_pressurelosstype"); this.defaultProperties["pressureLossType"] = PressureLossType[dft]; } -- GitLab From 407ca9af897aaaf46217148b8b143a596be00c23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 15 Dec 2022 14:46:55 +0100 Subject: [PATCH 094/285] select field factory: add pressure loss law select refs #585 --- src/app/formulaire/elements/select/select-field-factory.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/formulaire/elements/select/select-field-factory.ts b/src/app/formulaire/elements/select/select-field-factory.ts index 8c3072db3..afb4246e0 100644 --- a/src/app/formulaire/elements/select/select-field-factory.ts +++ b/src/app/formulaire/elements/select/select-field-factory.ts @@ -69,6 +69,7 @@ export class SelectFieldFactory { case "select_section": case "select_sppoperation": case "select_unit": + case "select_pressurelosstype": return new SelectFieldNubProperty(parent); default: -- GitLab From e921c0ea82bfe53d9a172bddfa8c506c10847227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 15 Dec 2022 14:59:56 +0100 Subject: [PATCH 095/285] pressure loss: add translation for law select entry refs #585 --- src/app/calculators/pressureloss/en.json | 2 ++ src/app/calculators/pressureloss/fr.json | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/app/calculators/pressureloss/en.json b/src/app/calculators/pressureloss/en.json index d2ffa6aeb..04967c221 100644 --- a/src/app/calculators/pressureloss/en.json +++ b/src/app/calculators/pressureloss/en.json @@ -1,6 +1,8 @@ { "fs_pressureloss_law": "Pressure loss", "select_pressurelosstype": "Pressure loss law", + "PRESSURELOSSTYPE_0": "Lechapt-Calmon", + "fs_materiau": "Type of material", "select_material": "Choice of material", "MATERIAL_0": "Unlined cast iron - Coarse concrete (corrosive water)", diff --git a/src/app/calculators/pressureloss/fr.json b/src/app/calculators/pressureloss/fr.json index 17cde6a02..d1b06625f 100644 --- a/src/app/calculators/pressureloss/fr.json +++ b/src/app/calculators/pressureloss/fr.json @@ -1,6 +1,8 @@ { "fs_pressureloss_law": "Perte de charge", "select_pressurelosstype": "Loi de perte de charge", + "PRESSURELOSSTYPE_0": "Lechapt-Calmon", + "fs_materiau": "Type du matériau", "select_material": "Choix du matériau", "MATERIAL_0": "Fonte ou acier non revêtus - Béton grossier (eau corrosive)", -- GitLab From d10a3b2a2db749cc8d5105841bd271484b3380d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 15 Dec 2022 15:09:14 +0100 Subject: [PATCH 096/285] pressure loss JSON configuration: merge select and Lechapt-Calmon fieldsets refs #585 --- src/app/calculators/pressureloss/config.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/app/calculators/pressureloss/config.json b/src/app/calculators/pressureloss/config.json index 18f6ed008..7160ed307 100644 --- a/src/app/calculators/pressureloss/config.json +++ b/src/app/calculators/pressureloss/config.json @@ -11,13 +11,7 @@ "help": { "0": "hyd_en_charge/lechapt-calmon.html" } - } - ] - }, - { - "id": "fs_lechaptcalmon", - "type": "fieldset", - "fields": [ + }, { "id": "select_material", "type": "select", -- GitLab From 3b91b900cd66c03e037ba2fe9e93e3244c963224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 16 Dec 2022 13:10:51 +0100 Subject: [PATCH 097/285] pressure loss: set info_child_type translations refs #585 --- src/locale/messages.en.json | 1 + src/locale/messages.fr.json | 1 + 2 files changed, 2 insertions(+) diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index fb955b4d2..5130406b1 100755 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -233,6 +233,7 @@ "INFO_CHILD_TYPE_SECTION": "section", "INFO_CHILD_TYPE_SECTION_PLUR": "sections", "INFO_CHILD_TYPE_SECTION_SHORT": "S", + "INFO_CHILD_TYPE_LECHAPTCALMON": "Lechapt-Calmon", "INFO_DIALOG_PARSIM_DESC": "Choose a combination of values to generate the simulation", "INFO_FIELDSET_ADD": "Add", "INFO_FIELDSET_COPY": "Copy", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 81d52af76..f487a29c0 100755 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -233,6 +233,7 @@ "INFO_CHILD_TYPE_SECTION": "section", "INFO_CHILD_TYPE_SECTION_PLUR": "sections", "INFO_CHILD_TYPE_SECTION_SHORT": "S", + "INFO_CHILD_TYPE_LECHAPTCALMON": "Lechapt-Calmon", "INFO_DIALOG_PARSIM_DESC": "Choisir une combinaison de valeurs pour générer la simulation", "INFO_FIELDSET_ADD": "Ajouter", "INFO_FIELDSET_COPY": "Copier", -- GitLab From 8401a3cdf6172a6f8265bfb3be7e1880781aa464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 9 Jan 2023 13:10:46 +0100 Subject: [PATCH 098/285] fix: pressure loss JSON configuration: rename Ks to Kloc refs #585 --- src/app/calculators/pressureloss/config.json | 4 ++-- src/app/calculators/pressureloss/en.json | 4 ++-- src/app/calculators/pressureloss/fr.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/calculators/pressureloss/config.json b/src/app/calculators/pressureloss/config.json index 7160ed307..e74c60cd9 100644 --- a/src/app/calculators/pressureloss/config.json +++ b/src/app/calculators/pressureloss/config.json @@ -31,7 +31,7 @@ "D", "J", "Lg", - "Ks" + "Kloc" ] } -] \ No newline at end of file +] diff --git a/src/app/calculators/pressureloss/en.json b/src/app/calculators/pressureloss/en.json index 04967c221..3ed24c3c7 100644 --- a/src/app/calculators/pressureloss/en.json +++ b/src/app/calculators/pressureloss/en.json @@ -20,7 +20,7 @@ "fs_hydraulique": "Hydraulic features", "D": "Pipe diameter", "J": "Total head loss", - "Ks": "Singular head loss coefficient", + "Kloc": "Singular head loss coefficient", "Lg": "Pipe length", "fs_param_calc": "Calculation parameters", "Jl": "Linear head loss", @@ -29,4 +29,4 @@ "UNIT_JL": "m", "UNIT_V": "m/s" -} \ No newline at end of file +} diff --git a/src/app/calculators/pressureloss/fr.json b/src/app/calculators/pressureloss/fr.json index d1b06625f..9028496a3 100644 --- a/src/app/calculators/pressureloss/fr.json +++ b/src/app/calculators/pressureloss/fr.json @@ -20,7 +20,7 @@ "fs_hydraulique": "Caractéristiques hydrauliques", "D": "Diamètre du tuyau", "J": "Perte de charge totale", - "Ks": "Coefficient de perte de charge singulière", + "Kloc": "Coefficient de perte de charge singulière", "Lg": "Longueur du tuyau", "fs_param_calc": "Paramètres de calcul", "Jl": "Perte de charge linéaire", @@ -29,4 +29,4 @@ "UNIT_JL": "m", "UNIT_V": "m/s" -} \ No newline at end of file +} -- GitLab From 3d6323b80943e3439f748c0478422b2aa86b1eca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 11 Jan 2023 13:38:20 +0100 Subject: [PATCH 099/285] update jalhyd_branch to 338-optimiser-l-affichage-des-unites refs #590 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index 0bd0de843..9e2dece83 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -334-restructurer-lechapt-et-calmon-pour-de-nouvelles-lois-de-pertes-de-charge +338-optimiser-l-affichage-des-unites -- GitLab From 117f1d12a214473003675821082b9d47c9a26571 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 11 Jan 2023 13:37:12 +0100 Subject: [PATCH 100/285] refactor : do not create a Nub to get results units refs #590 --- src/app/services/formulaire.service.ts | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index e54805c7d..880741539 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -58,6 +58,7 @@ import { FormulaireEspece } from "../formulaire/definition/form-espece"; import { FormulairePrebarrage } from "../formulaire/definition/form-prebarrage"; import { ServiceFactory } from "./service-factory"; import { FormulairePressureLoss } from "app/formulaire/definition/form-pressureloss"; +import { getNubResultUnit } from "jalhyd"; @Injectable() export class FormulaireService extends Observable { @@ -194,7 +195,7 @@ export class FormulaireService extends Observable { * Returns variable name and unit from symbol * @param calcType * @param symbol - * @param forceUnit if given, will be used as nuit + * @param forceUnit if given, will be used as unit */ public expandVariableNameAndUnit(calcType: CalculatorType, symbol: string, forceUnit?: string): string { let s = this.expandVariableName(calcType, symbol); @@ -217,16 +218,8 @@ export class FormulaireService extends Observable { if (forceUnit) { unit = forceUnit; } else { - // create dummy Nub from CalcType just to get results units - let dummyNub: Nub; - try { - dummyNub = Session.getInstance().createNub(new Props({ "calcType": calcType })); - } catch (e) { - // silent fail - } - if (dummyNub?.resultsUnits && dummyNub.resultsUnits[symbol]) { - unit = dummyNub.resultsUnits[symbol]; - } else { + unit = getNubResultUnit(calcType, symbol); + if (unit === undefined) { // last chance: if unit cannot be read in model, use translation files const unitKey = "UNIT_" + symbolBase; if (langCache && langCache[unitKey] !== undefined) { -- GitLab From fdaa1677d7c18f841054d4eda55e228305b7902e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 11 Jan 2023 14:43:16 +0100 Subject: [PATCH 101/285] refactor : optimise select entry creation refs #590 --- .../elements/select/select-field-charttype.ts | 4 ++-- .../select/select-field-device-loi-debit.ts | 2 +- .../select/select-field-device-structure-type.ts | 2 +- .../select/select-field-downstream-basin.ts | 4 ++-- .../elements/select/select-field-nub-prop.ts | 2 +- .../elements/select/select-field-remous-target.ts | 4 ++-- .../elements/select/select-field-searched-param.ts | 2 +- .../select/select-field-solver-targeted-result.ts | 4 ++-- .../elements/select/select-field-solveur-target.ts | 2 +- .../elements/select/select-field-species-list.ts | 4 ++-- .../elements/select/select-field-target-pass.ts | 2 +- .../elements/select/select-field-upstream-basin.ts | 4 ++-- src/app/formulaire/elements/select/select-field.ts | 14 ++++++++++++++ 13 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/app/formulaire/elements/select/select-field-charttype.ts b/src/app/formulaire/elements/select/select-field-charttype.ts index b6f35d3f9..223dcaf39 100644 --- a/src/app/formulaire/elements/select/select-field-charttype.ts +++ b/src/app/formulaire/elements/select/select-field-charttype.ts @@ -20,7 +20,7 @@ export class SelectFieldChartType extends SelectField { protected populate() { for (const v of this._entryValues) { const id: string = ChartType[v]; - this.addEntry(new SelectEntry(id, v)); + this.addEntry(this.createOrGetEntry(id, v)); } } @@ -50,4 +50,4 @@ export class SelectFieldChartType extends SelectField { this._label = this.intlService.localizeText("INFO_PARAMFIELD_CHART_TYPE"); } -} \ No newline at end of file +} diff --git a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts index 2c556ff0a..07c1f555a 100644 --- a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts +++ b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts @@ -47,7 +47,7 @@ export class SelectFieldDeviceLoiDebit extends SelectField { const stName = StructureType[stCode]; if (la[stName] !== undefined) { for (const ld of la[stName]) { - const e: SelectEntry = new SelectEntry(this._entriesBaseId + LoiDebit[ld], ld); + const e: SelectEntry = this.createOrGetEntry(this._entriesBaseId + LoiDebit[ld], ld); this.addEntry(e); } } diff --git a/src/app/formulaire/elements/select/select-field-device-structure-type.ts b/src/app/formulaire/elements/select/select-field-device-structure-type.ts index aee929760..7b188d114 100644 --- a/src/app/formulaire/elements/select/select-field-device-structure-type.ts +++ b/src/app/formulaire/elements/select/select-field-device-structure-type.ts @@ -24,7 +24,7 @@ export class SelectFieldDeviceStructureType extends SelectField { protected populate() { // possible values depend on CalcType for (const st in (this.nub as ParallelStructure).getLoisAdmissibles()) { - const e: SelectEntry = new SelectEntry(this._entriesBaseId + st, StructureType[st]); + const e: SelectEntry = this.createOrGetEntry(this._entriesBaseId + st, StructureType[st]); this.addEntry(e); } } diff --git a/src/app/formulaire/elements/select/select-field-downstream-basin.ts b/src/app/formulaire/elements/select/select-field-downstream-basin.ts index dd39ce857..9c34a16e8 100644 --- a/src/app/formulaire/elements/select/select-field-downstream-basin.ts +++ b/src/app/formulaire/elements/select/select-field-downstream-basin.ts @@ -19,13 +19,13 @@ export class SelectFieldDownstreamBasin extends SelectField { for (const b of preBarrageD.bassins) { const pos = b.findPositionInParent(); if (posUb === undefined || pos > posUb) { - const e = new SelectEntry(this._entriesBaseId + b.uid, b.uid); + const e = this.createOrGetEntry(this._entriesBaseId + b.uid, b.uid); e.intlInfo = b.description; this.addEntry(e); } } // river downstream - const e = new SelectEntry(this._entriesBaseId + "none", undefined); + const e = this.createOrGetEntry(this._entriesBaseId + "none", undefined); e.intlInfo = "INFO_LIB_AVAL"; this.addEntry(e); } diff --git a/src/app/formulaire/elements/select/select-field-nub-prop.ts b/src/app/formulaire/elements/select/select-field-nub-prop.ts index df62610a8..4fa8c4e86 100644 --- a/src/app/formulaire/elements/select/select-field-nub-prop.ts +++ b/src/app/formulaire/elements/select/select-field-nub-prop.ts @@ -31,7 +31,7 @@ export class SelectFieldNubProperty extends SelectField { if (enumClass !== undefined) { // add one select entry per enum entry, in the enum order for (let j = 0; j < Object.keys(enumClass).length / 2; j++) { - this.addEntry(new SelectEntry(this._entriesBaseId + j, j)); + this.addEntry(this.createOrGetEntry(this._entriesBaseId + j, j)); } } } diff --git a/src/app/formulaire/elements/select/select-field-remous-target.ts b/src/app/formulaire/elements/select/select-field-remous-target.ts index 20b40cc47..f6eb90e6f 100644 --- a/src/app/formulaire/elements/select/select-field-remous-target.ts +++ b/src/app/formulaire/elements/select/select-field-remous-target.ts @@ -19,9 +19,9 @@ export class SelectFieldRemousTarget extends SelectField { protected populate() { // driven by string[], not enum (easier for variable names) - this.addEntry(new SelectEntry(this._entriesBaseId + "none", "")); + this.addEntry(this.createOrGetEntry(this._entriesBaseId + "none", "")); for (const at of CourbeRemous.availableTargets) { - const e: SelectEntry = new SelectEntry(this._entriesBaseId + at, at); + const e: SelectEntry = this.createOrGetEntry(this._entriesBaseId + at, at); this.addEntry(e); } } diff --git a/src/app/formulaire/elements/select/select-field-searched-param.ts b/src/app/formulaire/elements/select/select-field-searched-param.ts index 1342fb643..339acbfe5 100644 --- a/src/app/formulaire/elements/select/select-field-searched-param.ts +++ b/src/app/formulaire/elements/select/select-field-searched-param.ts @@ -28,7 +28,7 @@ export class SelectFieldSearchedParam extends SelectField { const calc = fs.getFormulaireFromId(p.originNub.uid).calculatorName; const varName = fs.expandVariableName(p.originNub.calcType, p.symbol); const label = `${p.symbol} - ${varName} (${calc})`; - this.addEntry(new SelectEntry(this._entriesBaseId + p.getParentComputeNode(false).uid + "_" + p.symbol, p, decodeHtml(label))); + this.addEntry(this.createOrGetEntry(this._entriesBaseId + p.getParentComputeNode(false).uid + "_" + p.symbol, p, decodeHtml(label))); } } } diff --git a/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts b/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts index a547bde3c..36094a8dd 100644 --- a/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts +++ b/src/app/formulaire/elements/select/select-field-solver-targeted-result.ts @@ -24,12 +24,12 @@ export class SelectFieldSolverTargetedResult extends SelectField { // 1. calculated param const ntc = (this.nub as Solveur).nubToCalculate; if (ntc?.calculatedParam !== undefined) { // some nubs have no calculatedParam, for ex. SectionParam - this.addEntry(new SelectEntry(this._entriesBaseId + "none", "")); + this.addEntry(this.createOrGetEntry(this._entriesBaseId + "none", "")); } // 2. extra results if (ntc?.resultsFamilies !== undefined) { for (const er of Object.keys(ntc.resultsFamilies)) { - const e: SelectEntry = new SelectEntry(this._entriesBaseId + er, er); + const e: SelectEntry = this.createOrGetEntry(this._entriesBaseId + er, er); this.addEntry(e); } } diff --git a/src/app/formulaire/elements/select/select-field-solveur-target.ts b/src/app/formulaire/elements/select/select-field-solveur-target.ts index aecd238b8..b98546e22 100644 --- a/src/app/formulaire/elements/select/select-field-solveur-target.ts +++ b/src/app/formulaire/elements/select/select-field-solveur-target.ts @@ -33,7 +33,7 @@ export class SelectFieldSolverTarget extends SelectField { const varName = fs.expandVariableName(cn.calcType, cn.calculatedParam.symbol); label += ` / ${varName} (${cn.calculatedParam.symbol})`; } - this.addEntry(new SelectEntry(this._entriesBaseId + cn.uid, cn.uid, decodeHtml(label))); + this.addEntry(this.createOrGetEntry(this._entriesBaseId + cn.uid, cn.uid, decodeHtml(label))); } else { // silent fail, this Solveur nub was probably loaded before all the candidate nubs are done loading } diff --git a/src/app/formulaire/elements/select/select-field-species-list.ts b/src/app/formulaire/elements/select/select-field-species-list.ts index 9401148c3..7b94345aa 100644 --- a/src/app/formulaire/elements/select/select-field-species-list.ts +++ b/src/app/formulaire/elements/select/select-field-species-list.ts @@ -24,14 +24,14 @@ export class SelectFieldSpeciesList extends SelectField { const especeNubs = Session.getInstance().getAllNubs().filter((element) => element.calcType === CalculatorType.Espece); for (const en of especeNubs) { const form = ServiceFactory.formulaireService.getFormulaireFromNubId(en.uid); - const e = new SelectEntry(this._entriesBaseId + en.uid, en.uid); + const e = this.createOrGetEntry(this._entriesBaseId + en.uid, en.uid); e.intlInfo = { "isnub": true, "code": "INFO_VERIFICATEUR_CUSTOM_SPECIES", "id": en.uid }; this.addEntry(e); } // add all FishSpecies for (let j = 1; j < Object.keys(FishSpecies).length / 2; j++) { // exclude "0" (SPECIES_CUSTOM) const spgId = FishSpecies[j].substring(FishSpecies[j].lastIndexOf("_") + 1); - const e = new SelectEntry(this._entriesBaseId + spgId, FishSpecies[j]); + const e = this.createOrGetEntry(this._entriesBaseId + spgId, FishSpecies[j]); e.intlInfo = { "isnub": false, "code": FishSpecies[j] } this.addEntry(e); } diff --git a/src/app/formulaire/elements/select/select-field-target-pass.ts b/src/app/formulaire/elements/select/select-field-target-pass.ts index 10cd639a1..6383c02ff 100644 --- a/src/app/formulaire/elements/select/select-field-target-pass.ts +++ b/src/app/formulaire/elements/select/select-field-target-pass.ts @@ -33,7 +33,7 @@ export class SelectFieldTargetPass extends SelectField { const nub = fs.getFormulaireFromId(cn.uid); if (nub) { const label = nub.calculatorName + " (" + fs.getLocalisedTitleFromCalculatorType(nub.calculatorType) + ")"; - this.addEntry(new SelectEntry(this._entriesBaseId + cn.uid, cn.uid, decodeHtml(label))); + this.addEntry(this.createOrGetEntry(this._entriesBaseId + cn.uid, cn.uid, decodeHtml(label))); } else { // silent fail, this Verificateur nub was probably loaded before all the candidate nubs are done loading } diff --git a/src/app/formulaire/elements/select/select-field-upstream-basin.ts b/src/app/formulaire/elements/select/select-field-upstream-basin.ts index d240d097c..cc70f8a53 100644 --- a/src/app/formulaire/elements/select/select-field-upstream-basin.ts +++ b/src/app/formulaire/elements/select/select-field-upstream-basin.ts @@ -17,7 +17,7 @@ export class SelectFieldUpstreamBasin extends SelectField { const posDb = pbWallU.bassinAval?.findPositionInParent(); // river upstream - const e = new SelectEntry(this._entriesBaseId + "none", undefined); + const e = this.createOrGetEntry(this._entriesBaseId + "none", undefined); e.intlInfo = "INFO_LIB_AMONT"; this.addEntry(e); @@ -25,7 +25,7 @@ export class SelectFieldUpstreamBasin extends SelectField { for (const b of preBarrageU.bassins) { const pos = b.findPositionInParent(); if (posDb === undefined || pos < posDb) { - const e = new SelectEntry(this._entriesBaseId + b.uid, b.uid); + const e = this.createOrGetEntry(this._entriesBaseId + b.uid, b.uid); e.intlInfo = b.description; this.addEntry(e); } diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index 5e490c754..86a988004 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -36,6 +36,11 @@ export abstract class SelectField extends Field { */ protected _messageWhenEmpty: string; + /** + * map id <-> select entry + */ + protected _entryMap: { [key: string]: SelectEntry } = {}; + constructor(parent: FormulaireNode) { super(parent); this.clearEntries(); @@ -210,6 +215,15 @@ export abstract class SelectField extends Field { this._entries.push(e); } + protected createOrGetEntry(id: string, val: any, lbl?: string): SelectEntry { + let res: SelectEntry = this._entryMap[id]; + if (res === undefined) { + res = new SelectEntry(id, val, lbl); + this._entryMap[id] = res; + } + return res; + } + public getEntryFromValue(val: any): SelectEntry { for (const se of this._entries) { if (se.value === val) { -- GitLab From 1e28998663d86f2af5ea1b421c85ce62f22a6e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 16 Jan 2023 13:34:32 +0100 Subject: [PATCH 102/285] test(e2e): temporarly disable Lechapt&Calmon test, see jalhyd#334, nghyd#585 refs #590 --- e2e/lechapt-calmon.e2e-spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e/lechapt-calmon.e2e-spec.ts b/e2e/lechapt-calmon.e2e-spec.ts index f0b991c6d..4dd2d834c 100644 --- a/e2e/lechapt-calmon.e2e-spec.ts +++ b/e2e/lechapt-calmon.e2e-spec.ts @@ -36,11 +36,11 @@ describe("Lechapt&Calmon - ", () => { await browser.sleep(200); // open Lechapt-Calmon calculator - await listPage.clickMenuEntryForCalcType(1); + await listPage.clickMenuEntryForCalcType(35); await browser.sleep(200); } - it("when material is modified, results should change", async () => { + xit("when material is modified, results should change", async () => { // temporairement débranché, cf. jalhyd#334 / nghyd#585 await setup(); // select last material type -- GitLab From b37ef81cb39bc5d5242faef7ee20aac836fa43ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 16 Jan 2023 14:16:12 +0100 Subject: [PATCH 103/285] update jalhyd_branch to 334-restructurer-lechapt-et-calmon-pour-de-nouvelles-lois-de-pertes-de-charge refs #585 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index 9e2dece83..0bd0de843 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -338-optimiser-l-affichage-des-unites +334-restructurer-lechapt-et-calmon-pour-de-nouvelles-lois-de-pertes-de-charge -- GitLab From 2fea08b1497f7c5e3d2fb53bf2b89b17945c1052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 17 Jan 2023 17:32:09 +0100 Subject: [PATCH 104/285] refactor: modify code to fit encapsulation of properties Nub field refs #585 --- .../fieldset-container.component.ts | 4 +- .../macrorugo-compound-results.component.ts | 2 +- .../modules-diagram.component.ts | 4 +- .../pab-profile-chart.component.ts | 6 +- .../pab-table/pab-table.component.ts | 4 +- .../definition/form-courbe-remous.ts | 2 +- .../formulaire/definition/form-definition.ts | 14 ++- src/app/formulaire/definition/form-espece.ts | 2 +- .../formulaire/definition/form-fixedvar.ts | 2 +- .../definition/form-macrorugo-compound.ts | 2 +- .../definition/form-parallel-structures.ts | 18 ++-- .../formulaire/definition/form-pb-cloison.ts | 8 +- .../formulaire/definition/form-prebarrage.ts | 2 +- src/app/formulaire/definition/form-solveur.ts | 4 +- .../definition/form-verificateur.ts | 2 +- src/app/formulaire/elements/fieldset.ts | 97 ++++++++++--------- .../select/select-field-device-loi-debit.ts | 2 +- .../elements/select/select-field-nub-prop.ts | 5 +- 18 files changed, 93 insertions(+), 87 deletions(-) diff --git a/src/app/components/fieldset-container/fieldset-container.component.ts b/src/app/components/fieldset-container/fieldset-container.component.ts index f612f362a..042df7517 100644 --- a/src/app/components/fieldset-container/fieldset-container.component.ts +++ b/src/app/components/fieldset-container/fieldset-container.component.ts @@ -89,8 +89,8 @@ export class FieldsetContainerComponent implements DoCheck, AfterViewInit { const prms = after.backupParameters(); // replace in-place to change properties (overkill) // @WTF why only those two ? - newFs.setNubPropValue("structureType", after.properties.getPropValue("structureType")); - newFs.setNubPropValue("loiDebit", after.properties.getPropValue("loiDebit")); + newFs.setPropValue("structureType", after.getPropValue("structureType")); + newFs.setPropValue("loiDebit", after.getPropValue("loiDebit")); // au cas où un des paramètres du fieldset source est en mode calcul, // on met le paramètre copié en mode fixé (nghyd#567) diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts index 86eba4301..f388647da 100644 --- a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts @@ -92,7 +92,7 @@ export class MacrorugoCompoundResultsComponent extends ResultsComponentDirective this.mrcResults && this.mrcResults.result && this.mrcResults.result.sourceNub - && this.mrcResults.result.sourceNub.properties.getPropValue("inclinedApron") === MRCInclination.INCLINED + && this.mrcResults.result.sourceNub.getPropValue("inclinedApron") === MRCInclination.INCLINED ); } diff --git a/src/app/components/modules-diagram/modules-diagram.component.ts b/src/app/components/modules-diagram/modules-diagram.component.ts index 6f227edcb..0b607e51e 100644 --- a/src/app/components/modules-diagram/modules-diagram.component.ts +++ b/src/app/components/modules-diagram/modules-diagram.component.ts @@ -265,11 +265,11 @@ export class ModulesDiagramComponent implements AfterContentInit, AfterViewCheck */ private describe(n: Nub) { let type = CalculatorType[n.calcType]; - const nt = n.properties.getPropValue("nodeType"); + const nt = n.getPropValue("nodeType"); if (nt) { type = SectionType[nt]; } else { - const ld = n.properties.getPropValue("loiDebit"); + const ld = n.getPropValue("loiDebit"); if (ld !== undefined) { type = LoiDebit[ld]; } diff --git a/src/app/components/pab-profile-chart/pab-profile-chart.component.ts b/src/app/components/pab-profile-chart/pab-profile-chart.component.ts index c8eff7ec5..ee664e43a 100644 --- a/src/app/components/pab-profile-chart/pab-profile-chart.component.ts +++ b/src/app/components/pab-profile-chart/pab-profile-chart.component.ts @@ -268,7 +268,7 @@ export class PabProfileChartComponent extends ResultsComponentDirective implemen ddSeries[sti] = []; } // orifices have no relevant ZDV - if (st.properties.getPropValue("loiDebit") !== LoiDebit.OrificeSubmerged) { + if (st.getPropValue("loiDebit") !== LoiDebit.OrificeSubmerged) { // 2 points, to draw a segment ddSeries[sti].push({ x: xs[i], @@ -305,7 +305,7 @@ export class PabProfileChartComponent extends ResultsComponentDirective implemen } // orifices have no relevant ZDV; lift gate will be drawn later for each series if (! [ LoiDebit.OrificeSubmerged, LoiDebit.VanLevLarinier, LoiDebit.VanLevVillemonte ] - .includes(st.properties.getPropValue("loiDebit")) + .includes(st.getPropValue("loiDebit")) ) { // 2 points, to draw a segment ddSeries[sti].push({ @@ -403,7 +403,7 @@ export class PabProfileChartComponent extends ResultsComponentDirective implemen // draw lift gate if any if (isLastAbscissa) { for (const st of dw.structures) { - if ([ LoiDebit.VanLevLarinier, LoiDebit.VanLevVillemonte ].includes(st.properties.getPropValue("loiDebit"))) { + if ([LoiDebit.VanLevLarinier, LoiDebit.VanLevVillemonte].includes(st.getPropValue("loiDebit"))) { // skip a point to disjoin line dataN.push({ x: x, diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index 8ef4e14c1..ead6072f1 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -594,7 +594,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni if (i === 0) { // 1st row deviceParamRow.cells.push({ model: ouvrage, - modelValue: ouvrage.properties.getPropValue("loiDebit"), + modelValue: ouvrage.getPropValue("loiDebit"), options: loisCloisons, selectable: ouvrage }); @@ -719,7 +719,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni if (i === 0) { // 1st row deviceParamRowDW.cells.push({ model: ouvrage, - modelValue: ouvrage.properties.getPropValue("loiDebit"), + modelValue: ouvrage.getPropValue("loiDebit"), options: loisAval }); } diff --git a/src/app/formulaire/definition/form-courbe-remous.ts b/src/app/formulaire/definition/form-courbe-remous.ts index 3762c846c..62c8d3b3b 100644 --- a/src/app/formulaire/definition/form-courbe-remous.ts +++ b/src/app/formulaire/definition/form-courbe-remous.ts @@ -31,7 +31,7 @@ export class FormulaireCourbeRemous extends FormulaireSection { this._remousResults.parameters = prmCR; // variable supplémentaire à calculer - this._remousResults.extraParamSymbol = this.currentNub.properties.getPropValue("varCalc"); + this._remousResults.extraParamSymbol = this.currentNub.getPropValue("varCalc"); // calcul this._remousResults.result = cr.CalcSerie(); diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index f2141323a..b4a34d345 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -81,14 +81,18 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs return this._calculateDisabled; } + private getPropValue(key: string): any { + if (this._currentNub === undefined) + return this.defaultProperties[key]; + return this._currentNub.getPropValue(key); + } + public get calculatorType(): CalculatorType { - const props = this._currentNub === undefined ? this.defaultProperties : (this._currentNub.properties as Props).props; - return props["calcType"]; + return this.getPropValue("calcType") } public get nodeType(): SectionType { - const props = this._currentNub === undefined ? this.defaultProperties : (this._currentNub.properties as Props).props; - return props["nodeType"]; + return this.getPropValue("nodeType") } public get calculatorName() { @@ -127,7 +131,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } public set currentNub(n: Nub) { - const nubCalcType = (n.properties as Props).getPropValue("calcType"); + const nubCalcType = n.getPropValue("calcType"); if (this._props["calcType"] !== nubCalcType) { throw new Error( `Nub ${n.properties["calcType"]} incompatible avec le formulaire ${this._calculatorName} (${this._props["calcType"]})` diff --git a/src/app/formulaire/definition/form-espece.ts b/src/app/formulaire/definition/form-espece.ts index 10ded3b83..f0a36b93e 100644 --- a/src/app/formulaire/definition/form-espece.ts +++ b/src/app/formulaire/definition/form-espece.ts @@ -10,7 +10,7 @@ export class FormulaireEspece extends FormulaireFixedVar { protected completeParse(firstNotif: boolean = true) { super.completeParse(firstNotif); - this.updateDivingJetCriteriaInputs(this.currentNub.properties.getPropValue("divingJetSupported")); + this.updateDivingJetCriteriaInputs(this.currentNub.getPropValue("divingJetSupported")); } /** diff --git a/src/app/formulaire/definition/form-fixedvar.ts b/src/app/formulaire/definition/form-fixedvar.ts index 0a329f489..8eb6917e7 100644 --- a/src/app/formulaire/definition/form-fixedvar.ts +++ b/src/app/formulaire/definition/form-fixedvar.ts @@ -63,7 +63,7 @@ export class FormulaireFixedVar extends FormulaireDefinition { public afterParseFieldset(fs: FieldSet) { // observe all Select fields @see this.update() - fs.properties.addObserver(this); + fs.addPropertiesObserver(this); } protected completeParse(firstNotif: boolean = true) { diff --git a/src/app/formulaire/definition/form-macrorugo-compound.ts b/src/app/formulaire/definition/form-macrorugo-compound.ts index ec470e645..306332cb5 100644 --- a/src/app/formulaire/definition/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/form-macrorugo-compound.ts @@ -56,7 +56,7 @@ export class FormulaireMacrorugoCompound extends FormulaireRepeatableFieldset { super.completeParse(firstNotif); this.fieldsetContainer.addObserver(this); if (firstNotif) { - this.updateApronState(this.currentNub.properties.getPropValue("inclinedApron")); + this.updateApronState(this.currentNub.getPropValue("inclinedApron")); } } diff --git a/src/app/formulaire/definition/form-parallel-structures.ts b/src/app/formulaire/definition/form-parallel-structures.ts index b47c4808b..a5de99edd 100644 --- a/src/app/formulaire/definition/form-parallel-structures.ts +++ b/src/app/formulaire/definition/form-parallel-structures.ts @@ -1,4 +1,4 @@ -import { Structure, Nub, ParallelStructure, StructureProperties, Props, Session, ParamDefinition, Prop_NullParameters } from "jalhyd"; +import { Structure, Nub, ParallelStructure, StructureProperties, Props, Session, ParamDefinition, Prop_NullParameters, IProperties } from "jalhyd"; import { FieldsetContainer } from "../elements/fieldset-container"; import { FieldSet } from "../elements/fieldset"; @@ -71,7 +71,7 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { * and return it; does not store it in the Session (for Structures, not for Calculator Modules) * @param p properties for the new Nub */ - protected createStructure(p: Props): Structure { + protected createStructure(p: IProperties): Structure { return Session.getInstance().createNub(p, this.currentNub as ParallelStructure) as Structure; } @@ -81,9 +81,9 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { * @param sn Structure to replace * @param params properties to build the new Nub (calcType, loiDebit...) */ - protected replaceNub(sn: Structure, params: Props): Nub { + protected replaceNub(sn: Structure): Nub { const parent = (this.currentNub as ParallelStructure); - const newStructure = this.createStructure(params); + const newStructure = this.createStructure(sn); parent.replaceChildInplace(sn, newStructure); return newStructure; } @@ -108,7 +108,7 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { * @param name nom de la propriété qui vient de changer * @param val nouvelle valeur de la propriété */ - protected adjustProperties(props: Props, name: string, val: any) { + protected adjustProperties(props: IProperties, name: string, val: any) { if (name === "structureType") { if (! StructureProperties.isCompatibleValues( val, props.getPropValue("loiDebit"), this.currentNub as ParallelStructure @@ -159,12 +159,12 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { } else if (sender instanceof FieldSet && data.action === "propertyChange") { switch (sender.id) { case "fs_ouvrage": - const props = sender.properties; // ensure loiDebit is set - props.setPropValue("loiDebit", data.value); - this.adjustProperties(props, data["name"], data["value"]); + //props.setPropValue("loiDebit", data.value); // ?? et si la propriété modifiée n'est pas la loi de débit ? + + this.adjustProperties(sender, data["name"], data["value"]); // replace Structure Nub - const newNub = this.replaceNub((sender.nub as Structure), props); + const newNub = this.replaceNub(sender.nub as Structure); sender.setNub(newNub); // treat the fieldset as new to re-subscribe to Nub properties change events this.afterParseFieldset(sender); diff --git a/src/app/formulaire/definition/form-pb-cloison.ts b/src/app/formulaire/definition/form-pb-cloison.ts index 25910c87d..145c03fe4 100644 --- a/src/app/formulaire/definition/form-pb-cloison.ts +++ b/src/app/formulaire/definition/form-pb-cloison.ts @@ -27,12 +27,12 @@ export class FormulairePbCloison extends FormulaireParallelStructure { } else if (sender instanceof FieldSet && data.action === "propertyChange") { switch (sender.id) { case "fs_ouvrage": - const props = sender.properties; // ensure loiDebit is set - props.setPropValue("loiDebit", data.value); - this.adjustProperties(props, data["name"], data["value"]); + //props.setPropValue("loiDebit", data.value); // ?? et si la propriété modifiée n'est pas la loi de débit ? + + this.adjustProperties(sender, data["name"], data["value"]); // replace Structure Nub - const newNub = this.replaceNub((sender.nub as Structure), props); + const newNub = this.replaceNub(sender.nub as Structure); sender.setNub(newNub); // treat the fieldset as new to re-subscribe to Nub properties change events this.afterParseFieldset(sender); diff --git a/src/app/formulaire/definition/form-prebarrage.ts b/src/app/formulaire/definition/form-prebarrage.ts index 95e5f6549..c9a0d9e0d 100644 --- a/src/app/formulaire/definition/form-prebarrage.ts +++ b/src/app/formulaire/definition/form-prebarrage.ts @@ -367,7 +367,7 @@ export class FormulairePrebarrage extends FormulaireFixedVar { } catch (e) { let res; if (p.parentNub.calcType === CalculatorType.Structure) { - res = p.parentNub.getParent().uid; + res = p.parentNub.parent.uid; } else { res = p.parentNub.uid; } diff --git a/src/app/formulaire/definition/form-solveur.ts b/src/app/formulaire/definition/form-solveur.ts index f658c98ee..0a3d446ef 100644 --- a/src/app/formulaire/definition/form-solveur.ts +++ b/src/app/formulaire/definition/form-solveur.ts @@ -58,7 +58,7 @@ export class FormulaireSolveur extends FormulaireFixedVar { // if searchedParam is set to a value that won't be available anymore // once nubToCalculate is updated, setPropValue throws an error, but // nubToCalculate is updated anyway; here, just inhibit the error - this._currentNub.properties.setPropValue("nubToCalculate", data.value.value); + this._currentNub.setPropValue("nubToCalculate", data.value.value); } catch (e) { } // refresh targetted result selector const trSel = this.getFormulaireNodeById(this._targettedResultSelectId) as SelectField; @@ -73,7 +73,7 @@ export class FormulaireSolveur extends FormulaireFixedVar { // update Solveur property: searched Parameter try { const p: ParamDefinition = data.value.value; - this._currentNub.properties.setPropValue( + this._currentNub.setPropValue( "searchedParameter", p.nubUid + "/" + p.symbol ); diff --git a/src/app/formulaire/definition/form-verificateur.ts b/src/app/formulaire/definition/form-verificateur.ts index 893754665..337bc789a 100644 --- a/src/app/formulaire/definition/form-verificateur.ts +++ b/src/app/formulaire/definition/form-verificateur.ts @@ -97,7 +97,7 @@ export class FormulaireVerificateur extends FormulaireFixedVar { this.reset(); // reset results if (sender.id === "select_target_pass" && data.action === "select") { // update Verificateur property: Pass to check - this._currentNub.properties.setPropValue("nubToVerify", data.value ? data.value.value : undefined); + this._currentNub.setPropValue("nubToVerify", data.value ? data.value.value : undefined); } else if (sender.id === "select_species_list" && data.action === "select") { // update Verificateur property: Species list (string[]) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index d0229afe7..2c130b65f 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -1,7 +1,7 @@ import { CalculatorType, ParamDefinition, - Props, + IProperties, Observer, Nub, enumValueFromString @@ -16,7 +16,7 @@ import { SelectFieldFactory } from "./select/select-field-factory"; import { FormulaireFixedVar } from "../definition/form-fixedvar"; import { SelectEntry } from "./select/select-entry"; -export class FieldSet extends FormulaireElement implements Observer { +export class FieldSet extends FormulaireElement implements IProperties { /** Nub associé */ private _nub: Nub; @@ -45,7 +45,7 @@ export class FieldSet extends FormulaireElement implements Observer { } private addField(f: Field) { - if (! f) { + if (!f) { throw new Error("FieldSet.addField() : argument incorrect (undefined)"); } this.kids.push(f); @@ -114,40 +114,8 @@ export class FieldSet extends FormulaireElement implements Observer { return res; } - public get properties(): Props { - return this.nub.properties; - } - - private get sectionProperties(): Props { - const section = this.nub.getChildren()[0]; - if (section) { - return section.properties; - } else { - return new Props(); - } - } - - /** - * get associated nub property value - * @param key property name - * @param inSection if true, will look for the required property in the Nub's section (children[0]) - */ - private getNubPropValue(key: string, inSection: boolean = false): any { - if (inSection) { - return this.sectionProperties.getPropValue(key); - } else { - return this.properties.getPropValue(key); - } - } - - /** - * assign associated nub property - * @param key nub property name - * @param val value to assign with - * @returns true if property value has changed - */ - public setNubPropValue(key: string, val: any): boolean { - return this.properties.setPropValue(key, val, this); + public addPropertiesObserver(o: Observer) { + this.nub.addPropertiesObserver(o); } private getNubParamFromSymbol(symbol: string): ParamDefinition { @@ -250,7 +218,7 @@ export class FieldSet extends FormulaireElement implements Observer { private setSelectValueFromProperty(selectId: string, inSection: boolean = false) { const selectField: SelectField = this.getFormulaireNodeById(selectId) as SelectField; if (selectField) { - let propVal: any = this.getNubPropValue(selectField.associatedProperty, inSection); + let propVal: any = this.getPropValue(selectField.associatedProperty, inSection); if (propVal === undefined) { propVal = ""; // clodo bullet-proof loading } @@ -277,9 +245,9 @@ export class FieldSet extends FormulaireElement implements Observer { this._helpLink = json["help"]; const ct: string = json["calcType"]; - const currentCt = this.properties.getPropValue("calcType"); + const currentCt = this.getPropValue("calcType"); const calc_type: CalculatorType = currentCt ? currentCt : (ct ? CalculatorType[ct] : this.parentForm.calculatorType); - this.setNubPropValue("calcType", calc_type); + this.setPropValue("calcType", calc_type); // parse fields once, so that SelectField elements are present // when setting default properties below @@ -293,9 +261,9 @@ export class FieldSet extends FormulaireElement implements Observer { const prop = sel.associatedProperty; const defaultValue = sel.configDefaultValue; // Sets Nub default property, unless this property is already set - const currentValue = this.properties.getPropValue(prop); + const currentValue = this.getPropValue(prop); if (defaultValue !== undefined && currentValue === undefined) { - this.setNubPropValue(prop, enumValueFromString(prop, defaultValue)); + this.setPropValue(prop, enumValueFromString(prop, defaultValue)); } } } @@ -314,7 +282,7 @@ export class FieldSet extends FormulaireElement implements Observer { public getNodeParameterValue(symbol: string): number { const p = this.getNodeParameter(symbol); - if (! p) { + if (!p) { throw new Error(`FieldSet.getNodeParameterValue() : pas de paramètre ${symbol} trouvé`); } @@ -336,7 +304,7 @@ export class FieldSet extends FormulaireElement implements Observer { public getSelectedValue(selectFieldId: string): string | string[] { for (const p of this.kids) { if (p instanceof SelectField && p.isDisplayed && p.id === selectFieldId) { - if (! p.multiple) { + if (!p.multiple) { const value: string = (p.getValue() as SelectEntry).value; return FormulaireElement.removePrefix(value, selectFieldId + "_"); } else { @@ -359,7 +327,7 @@ export class FieldSet extends FormulaireElement implements Observer { if (senderId === "select_section") { // sections paramétrées, courbes de remous, régimes uniformes // "nodeType" is a property of the section child, not of the parent - const oldNodeType = this.nub.getChildren()[0].properties.getPropValue("nodeType"); + const oldNodeType = this.nub.getChildren()[0].getPropValue("nodeType"); if (oldNodeType !== data.value.value) { // avoid infinite loops // manually notify parent so that it replaces the child Nub @WARNING clodo trick this.parentForm.update(this, { @@ -380,9 +348,9 @@ export class FieldSet extends FormulaireElement implements Observer { const prop = sel.associatedProperty; // for multiple select if (Array.isArray(data.value)) { - this.setNubPropValue(prop, data.value.map((v: any) => v.value)); + this.setPropValue(prop, data.value.map((v: any) => v.value)); } else { - this.setNubPropValue(prop, data.value.value); + this.setPropValue(prop, data.value.value); } } } @@ -394,4 +362,39 @@ export class FieldSet extends FormulaireElement implements Observer { } } } + + // interface IProperties + + /** + * list of properties keys + */ + public get keys(): string[] { + return this._nub.keys; + } + + /** + * get associated nub property value + * @param key property name + * @param inSection if true, will look for the required property in the Nub's section (children[0]) + */ + public getPropValue(key: string, inSection: boolean = false): any { + if (inSection) { + const section = this.nub.getChildren()[0]; + if (section) { + return section.getPropValue(key); + } + return undefined; + } + return this.nub.getPropValue(key); + } + + /** + * assign associated nub property + * @param key nub property name + * @param val value to assign with + * @returns true if property value has changed + */ + public setPropValue(key: string, val: any): boolean { + return this.nub.setPropValue(key, val, this); + } } diff --git a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts index 07c1f555a..683adebae 100644 --- a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts +++ b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts @@ -34,7 +34,7 @@ export class SelectFieldDeviceLoiDebit extends SelectField { */ private get loiDebit(): LoiDebit { const child = this.nub.getChildren()[this.parent.indexAsKid()]; - return child.properties.getPropValue("loiDebit"); + return child.getPropValue("loiDebit"); } protected populate() { diff --git a/src/app/formulaire/elements/select/select-field-nub-prop.ts b/src/app/formulaire/elements/select/select-field-nub-prop.ts index 4fa8c4e86..233502db0 100644 --- a/src/app/formulaire/elements/select/select-field-nub-prop.ts +++ b/src/app/formulaire/elements/select/select-field-nub-prop.ts @@ -1,6 +1,5 @@ -import { Session } from "jalhyd"; +import { Props } from "jalhyd"; import { FormulaireNode } from "../formulaire-node"; -import { SelectEntry } from "./select-entry"; import { SelectField } from "./select-field"; /* @@ -27,7 +26,7 @@ export class SelectFieldNubProperty extends SelectField { protected populate() { // find enum associated to property - const enumClass = Session.enumFromProperty[this._associatedProperty]; + const enumClass = Props.enumFromProperty[this._associatedProperty]; if (enumClass !== undefined) { // add one select entry per enum entry, in the enum order for (let j = 0; j < Object.keys(enumClass).length / 2; j++) { -- GitLab From 0f85a057f3ed52e0add2497f8b861e1bb63bad4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 18 Jan 2023 13:31:54 +0100 Subject: [PATCH 105/285] fix(e2e) : Lechapt-Calmon : material change does not modify results refs #585 --- e2e/lechapt-calmon.e2e-spec.ts | 4 ++-- src/app/formulaire/elements/fieldset.ts | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/e2e/lechapt-calmon.e2e-spec.ts b/e2e/lechapt-calmon.e2e-spec.ts index 4dd2d834c..91dea3194 100644 --- a/e2e/lechapt-calmon.e2e-spec.ts +++ b/e2e/lechapt-calmon.e2e-spec.ts @@ -35,12 +35,12 @@ describe("Lechapt&Calmon - ", () => { await navBar.clickNewCalculatorButton(); await browser.sleep(200); - // open Lechapt-Calmon calculator + // open Lechapt-Calmon (pressure loss) calculator await listPage.clickMenuEntryForCalcType(35); await browser.sleep(200); } - xit("when material is modified, results should change", async () => { // temporairement débranché, cf. jalhyd#334 / nghyd#585 + it("when material is modified, results should change", async () => { await setup(); // select last material type diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 2c130b65f..3637d892d 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -365,6 +365,10 @@ export class FieldSet extends FormulaireElement implements IProperties { // interface IProperties + public hasProperty(key: string): boolean { + return this._nub.hasProperty(key); + } + /** * list of properties keys */ -- GitLab From 85654c12f2d54d28c2217c54946e56364f44d9c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 19 Jan 2023 15:55:52 +0100 Subject: [PATCH 106/285] test(e2e) : add PressureLoss calculator refs #585 --- e2e/tested_calctypes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/tested_calctypes.ts b/e2e/tested_calctypes.ts index 590416318..be3f390fc 100644 --- a/e2e/tested_calctypes.ts +++ b/e2e/tested_calctypes.ts @@ -13,5 +13,5 @@ export const testedCalcTypes = [ // omit 26 - YAXN 27, 28, 29, 30, // omit 31 - PbCloison and 32 - PbBassin - 33, 34 + 33, 34, 35 ]; -- GitLab From d1cd2406f8b8a1f9d66fa637ae90b8a0c7aba369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 19 Jan 2023 16:06:29 +0100 Subject: [PATCH 107/285] chore: update package-lock.json (lodash added to jalhyd) refs #585 --- package-lock.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/package-lock.json b/package-lock.json index 9661a8c87..87ddd2409 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,6 +84,7 @@ "license": "LGPL-3.0-or-later", "dependencies": { "@types/base-64": "^1.0.0", + "@types/lodash": "^4.14.191", "base-64": "^1.0.0" }, "devDependencies": { @@ -4138,6 +4139,11 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" + }, "node_modules/@types/marked": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.7.tgz", @@ -23282,6 +23288,11 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" + }, "@types/marked": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.7.tgz", @@ -29813,6 +29824,7 @@ "requires": { "@types/base-64": "^1.0.0", "@types/jasmine": "^4.0.3", + "@types/lodash": "^4.14.191", "@types/node": "^18.0.3", "@typescript-eslint/eslint-plugin": "^5.30.6", "@typescript-eslint/parser": "^5.30.6", -- GitLab From cfb78656c6581760b1cbe85a6166f64ba85d3959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 20 Jan 2023 09:45:22 +0100 Subject: [PATCH 108/285] test(e2e): pressure loss: check fields are empty when calculator is created with "empty fields" flags refs #585 --- e2e/pressure-loss-empty-fields.e2e-spec.ts | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 e2e/pressure-loss-empty-fields.e2e-spec.ts diff --git a/e2e/pressure-loss-empty-fields.e2e-spec.ts b/e2e/pressure-loss-empty-fields.e2e-spec.ts new file mode 100644 index 000000000..c4516a88b --- /dev/null +++ b/e2e/pressure-loss-empty-fields.e2e-spec.ts @@ -0,0 +1,40 @@ +import { ListPage } from "./list.po"; +import { Navbar } from "./navbar.po"; +import { browser } from "protractor"; +import { CalculatorPage } from "./calculator.po"; +import { PreferencesPage } from "./preferences.po"; + +describe("Check fields are empty in 'pressure loss' calculator when created with 'empty fields' option -", () => { + let listPage: ListPage; + let navBar: Navbar; + let calcPage: CalculatorPage; + let prefPage: PreferencesPage; + + beforeAll(async () => { + listPage = new ListPage(); + navBar = new Navbar(); + calcPage = new CalculatorPage(); + prefPage = new PreferencesPage(); + }); + + beforeEach(async () => { + // enable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await prefPage.enableEvilEmptyFields(); + await browser.sleep(200); + }); + + it("with Lechapt-Calmon pressure loss law", async () => { + // open "pressure loss" calculator + await navBar.clickNewCalculatorButton(); + await listPage.clickMenuEntryForCalcType(35); + await browser.sleep(200); + + // select Lechapt-Calmon pressure loss law + const materialSelect = calcPage.getSelectById("select_pressurelosstype"); + await calcPage.changeSelectValue(materialSelect, 0); + await browser.sleep(200); + + expect(calcPage.checkEmptyOrFilledFields(["Q", "D", "Lg", "Kloc"], [true, true, true, true])); + }); +}); -- GitLab From 7c28d21bbdab5a3e839dbfa31ca484b271fb6d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 20 Jan 2023 10:28:52 +0100 Subject: [PATCH 109/285] refactor : linear head loss coefficient renamed to Klin refs #585 --- src/app/calculators/pressureloss/en.json | 2 +- src/app/calculators/pressureloss/fr.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/calculators/pressureloss/en.json b/src/app/calculators/pressureloss/en.json index 3ed24c3c7..464b3cd2d 100644 --- a/src/app/calculators/pressureloss/en.json +++ b/src/app/calculators/pressureloss/en.json @@ -24,7 +24,7 @@ "Lg": "Pipe length", "fs_param_calc": "Calculation parameters", "Jl": "Linear head loss", - "Kl": "Linear head loss coefficient", + "Klin": "Linear head loss coefficient", "fD": "Darcy friction factor", "UNIT_JL": "m", diff --git a/src/app/calculators/pressureloss/fr.json b/src/app/calculators/pressureloss/fr.json index 9028496a3..9244b7db3 100644 --- a/src/app/calculators/pressureloss/fr.json +++ b/src/app/calculators/pressureloss/fr.json @@ -24,7 +24,7 @@ "Lg": "Longueur du tuyau", "fs_param_calc": "Paramètres de calcul", "Jl": "Perte de charge linéaire", - "Kl": "Coefficient de perte de charge linéaire", + "Klin": "Coefficient de perte de charge linéaire", "fD": "Coefficient de perte de charge de Darcy", "UNIT_JL": "m", -- GitLab From 4b4e822038c3b970cb2e46f16a03913c552f3888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 20 Jan 2023 15:10:35 +0100 Subject: [PATCH 110/285] refactor: rename linear head loss to Jlin refs #585 --- src/app/calculators/pressureloss/en.json | 4 ++-- src/app/calculators/pressureloss/fr.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/calculators/pressureloss/en.json b/src/app/calculators/pressureloss/en.json index 464b3cd2d..de3a81a4e 100644 --- a/src/app/calculators/pressureloss/en.json +++ b/src/app/calculators/pressureloss/en.json @@ -23,10 +23,10 @@ "Kloc": "Singular head loss coefficient", "Lg": "Pipe length", "fs_param_calc": "Calculation parameters", - "Jl": "Linear head loss", + "Jlin": "Linear head loss", "Klin": "Linear head loss coefficient", "fD": "Darcy friction factor", - "UNIT_JL": "m", + "UNIT_JLIN": "m", "UNIT_V": "m/s" } diff --git a/src/app/calculators/pressureloss/fr.json b/src/app/calculators/pressureloss/fr.json index 9244b7db3..cbf2dd2d8 100644 --- a/src/app/calculators/pressureloss/fr.json +++ b/src/app/calculators/pressureloss/fr.json @@ -23,10 +23,10 @@ "Kloc": "Coefficient de perte de charge singulière", "Lg": "Longueur du tuyau", "fs_param_calc": "Paramètres de calcul", - "Jl": "Perte de charge linéaire", + "Jlin": "Perte de charge linéaire", "Klin": "Coefficient de perte de charge linéaire", "fD": "Coefficient de perte de charge de Darcy", - "UNIT_JL": "m", + "UNIT_JLIN": "m", "UNIT_V": "m/s" } -- GitLab From 4c2fff02b187156e61b73bb5cf251038b8462d75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 27 Jan 2023 11:27:12 +0100 Subject: [PATCH 111/285] feat(e2e): add scrollPageToTop() refs #592 --- e2e/calculate-all-params.e2e-spec.ts | 3 ++- e2e/calculator.po.ts | 3 ++- e2e/clone-all-calc.e2e-spec.ts | 3 ++- e2e/clone-calc.e2e-spec.ts | 3 ++- e2e/pab.e2e-spec.ts | 5 +++-- e2e/solveur.e2e-spec.ts | 5 +++-- e2e/util.po.ts | 8 ++++++++ 7 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 e2e/util.po.ts diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 39129ac61..9003678bd 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -4,6 +4,7 @@ import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { browser, element, by } from "protractor"; import { testedCalcTypes } from "./tested_calctypes"; +import { scrollPageToTop } from "./util.po"; /** * For all calculators, try to calculate every parameter: check that only one parameter @@ -65,7 +66,7 @@ describe("ngHyd − calculate all parameters of all calculators", async () => { // that the calculable parameters are shown if (ct === 30 && i > 0) { // prevents "Element is not clickable at point" - await browser.executeScript("window.scrollTo(0, 0);"); + await scrollPageToTop(); const inputLink = element(by.css("#pb-data-results-selector .drs-item a")); await inputLink.click(); } diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 400f4b0ab..f816fd4ff 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -1,4 +1,5 @@ import { by, element, ElementFinder, browser } from "protractor"; +import { scrollPageToTop } from "./util.po"; export class CalculatorPage { @@ -287,7 +288,7 @@ export class CalculatorPage { const container = await this.findParentContainer(elt); // find radio buttons const button = container.element(by.css("mat-button-toggle.radio_" + mode + " > button")); - await browser.executeScript("window.scrollTo(0, 0);"); // sometimes button slides behind navbar and click() fails + await scrollPageToTop(); // sometimes button slides behind navbar and click() fails await button.click(); // for "var" mode, close the modal if (mode === "var") { diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index e55c8b3f4..ca352163c 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -4,6 +4,7 @@ import { Navbar } from "./navbar.po"; import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { testedCalcTypes } from "./tested_calctypes"; +import { scrollPageToTop } from "./util.po"; /** * Clone calculators @@ -48,7 +49,7 @@ describe("ngHyd − clone all calculators with all possible <select> values", () const sourceValues = await calcPage.storeAllInputValues(); // clone calculator - await browser.executeScript("window.scrollTo(0, 0);"); + await scrollPageToTop(); await calcPage.clickCloneCalcButton(); await browser.sleep(300); diff --git a/e2e/clone-calc.e2e-spec.ts b/e2e/clone-calc.e2e-spec.ts index c09edd3c8..038a90e66 100644 --- a/e2e/clone-calc.e2e-spec.ts +++ b/e2e/clone-calc.e2e-spec.ts @@ -4,6 +4,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; +import { scrollPageToTop } from "./util.po"; /** * Clone calculators @@ -66,7 +67,7 @@ describe("ngHyd − clone a calculator", () => { await browser.sleep(500); // otherwise clickCloneCalcButton() fails with "Element is not clickable at point" - await browser.executeScript("window.scrollTo(0, 0);"); + await scrollPageToTop(); await calcPage.clickCloneCalcButton(); await browser.sleep(500); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 2f75f8df9..866f67fb5 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -5,6 +5,7 @@ import { browser, by, element } from "protractor"; import { AppPage } from "./app.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; +import { scrollPageToTop } from "./util.po"; /** * Clone calculators @@ -124,7 +125,7 @@ describe("ngHyd − Passe à Bassins", () => { await calcButtonCl.click(); // make sure "Generate PAB" button is visible (it might be hidden behind navbar) - await browser.executeScript("window.scrollTo(0, 0);"); + await scrollPageToTop(); // generate PAB const genButton = calcPage.getGeneratePabButton(); await genButton.isPresent(); @@ -182,7 +183,7 @@ describe("ngHyd − Passe à Bassins", () => { await calcButtonCl.click(); // make sure "Generate PAB" button is visible (it might be hidden behind navbar) - await browser.executeScript("window.scrollTo(0, 0);"); + await scrollPageToTop(); // create PAB from it, changing modal parameters const genButton = calcPage.getGeneratePabButton(); await genButton.click(); diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index a542f32ba..89ca70d6e 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -5,6 +5,7 @@ import { Navbar } from "./navbar.po"; import { browser, by, element } from "protractor"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; +import { scrollPageToTop } from "./util.po"; /** * Clone calculators @@ -124,8 +125,8 @@ describe("Solveur - ", () => { const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); - // otherwise clickCloneCalcButton() fails with "Element is not clickable at point" - await browser.executeScript("window.scrollTo(0, 0);"); + await scrollPageToTop(); // otherwise clickCloneCalcButton() fails with "Element is not clickable at point" + await calcPage.clickCloneCalcButton(); await browser.sleep(500); diff --git a/e2e/util.po.ts b/e2e/util.po.ts new file mode 100644 index 000000000..65d5cc7cf --- /dev/null +++ b/e2e/util.po.ts @@ -0,0 +1,8 @@ +import { browser } from "protractor"; + +/** + * scroll page to top + */ +export async function scrollPageToTop() { + await browser.executeScript("window.scrollTo(0, 0);"); +} -- GitLab From 741678f506da0fa420a8d49647436d88966affde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 27 Jan 2023 13:24:53 +0100 Subject: [PATCH 112/285] fix(e2e): openNthCalculator() : select option naming does not always start at 0 refs #592 --- e2e/navbar.po.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index 4fd34062a..814da4e21 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -31,8 +31,11 @@ export class Navbar { const dropDown = element(by.css("mat-select#selectCalculator")); if (await dropDown.isPresent() && await dropDown.isDisplayed()) { await dropDown.click(); - const optionId = ".cdk-overlay-container mat-option#mat-option-" + n; - const option = element(by.css(optionId)); + + // 1st option is not necessarly "mat-option-0"... + const options = element.all(by.css(".cdk-overlay-container mat-option")); + const option = options.get(n); + await option.click(); } else { const tabs = this.getAllCalculatorTabs(); -- GitLab From d9c57972ae08490db308f4b1c82dc3127f682641 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 27 Jan 2023 13:35:30 +0100 Subject: [PATCH 113/285] test(e2e): check that selects value is restored when loading a session file refs #592 --- e2e/calculator.po.ts | 74 +++++++++- e2e/load-save-session.e2e-spec.ts | 215 +++++++++++++++++++++++++----- e2e/util.po.ts | 10 +- 3 files changed, 254 insertions(+), 45 deletions(-) diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index f816fd4ff..3e5af1c82 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -1,5 +1,5 @@ -import { by, element, ElementFinder, browser } from "protractor"; -import { scrollPageToTop } from "./util.po"; +import { by, element, ElementFinder, browser, protractor, ElementArrayFinder } from "protractor"; +import { scrollPageToTop, scrollToElement } from "./util.po"; export class CalculatorPage { @@ -26,6 +26,66 @@ export class CalculatorPage { return element(by.css("h1")); } + /** + * return all selects in the calculator which id is in the form "select_*" + */ + getAllCalculatorSelects(): ElementArrayFinder { + return element.all(by.css("mat-select[id^=select_]")); // all mat-select with id starting with "select_" + } + + /** + * get the option count of a select + */ + async getMatselectOptionCount(select: string | ElementFinder) { + const sel = select instanceof ElementFinder ? select : element(by.id(select)); + await scrollToElement(sel); + + if (await sel.isPresent() && await sel.isDisplayed()) { + await sel.click(); + const options = element.all(by.css(".cdk-overlay-container mat-option")); + await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown + return await options.count(); + } + } + + /** + * get the text of the all given select options + */ + async getMatselectOptionsText(select: string | ElementFinder): Promise<string[]> { + const sel = select instanceof ElementFinder ? select : element(by.id(select)); + await scrollToElement(sel); + + if (await sel.isPresent() && await sel.isDisplayed()) { + await sel.click(); + const options = element.all(by.css(".cdk-overlay-container mat-option span")); + let res = []; + const nopt = await options.count(); + for (let o = 0; o < nopt; o++) { + const opt = options.get(o); + res.push(await opt.getText()) + } + await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown + + return res; + } + } + + /** + * get select current option + */ + async getSelectCurrentOption(select: ElementFinder): Promise<ElementFinder> { + const id = await select.getAttribute("id"); + return element(by.css("mat-select#" + id + " div[id^=mat-select-value-]")) + } + + /** + * get text of select current option + */ + async getMatselectCurrentOptionText(select: ElementFinder): Promise<string> { + const currentOption = await this.getSelectCurrentOption(select); + return await currentOption.element(by.css("span span")).getText(); + } + getSelectById(id: string) { return element(by.id(id)); } @@ -92,11 +152,11 @@ export class CalculatorPage { return element.all(by.css("fixedvar-results var-results table tbody tr")); } - scrollTo(elt: ElementFinder) { - browser.controlFlow().execute(function () { - browser.executeScript("arguments[0].scrollIntoView(true)", elt.getWebElement()); - }); - } + // scrollTo(elt: ElementFinder) { + // browser.controlFlow().execute(function () { + // browser.executeScript("arguments[0].scrollIntoView(true)", elt.getWebElement()); + // }); + // } getFixedResultsTable() { return element(by.css(".fixed-results-inner-container table")); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 6535d3265..1ba2b23f7 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -3,21 +3,90 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser } from "protractor"; +import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; +const fs = require("fs"); +const path = require("path"); +const os = require("os"); + +let startPage: AppPage; +let listPage: ListPage; +let calcPage: CalculatorPage; +let navbar: Navbar; +let sidenav: SideNav; +let prefPage: PreferencesPage; + +async function saveSession(): Promise<string> { + await calcPage.clickSaveCalcButton(); + await browser.sleep(500); + + // see: https://stackoverflow.com/questions/21935696/protractor-e2e-test-case-for-downloading-pdf-file + const filename = path.resolve(os.homedir(), "Téléchargements/session.json"); + if (fs.existsSync(filename)) { + // Make sure the browser doesn't have to rename the download. + fs.unlinkSync(filename); + } + + // Le code laissé en commentaire tente de corriger un bug : + // il s'écoule 40 secondes entre le clic sur le bouton menu (en haut à gauche) et l'ouverture du sidenav. + // Ceci ne se produit que lorsqu'on sauve effectivement la session : si on annule la sauvegarde, il n'y a pas de délai. + // https://stackoverflow.com/questions/75235558/delay-after-downloading-a-file-in-protractor-test + + //browser.manage().timeouts().implicitlyWait(100); + //browser.ignoreSynchronization = true; + // await browser.waitForAngularEnabled(false); + + if (true) { + await calcPage.getSaveSessionButton().click(); + } else { + const cancel = element(by.css("dialog-save-session button.mat-primary")); + await cancel.click(); + } + await browser.sleep(200); + // browser.ignoreSynchronization = false; + // await browser.waitForAngularEnabled(true); + + // browser.executeScript('window.stop();'); + + // const wins = await browser.driver.getAllWindowHandles(); + // await browser.switchTo().window(wins[0]); + + // await browser.switchTo().activeElement(); + + // const bd = element(by.css("body")); + // await browser.actions().mouseMove(bd, { x: 0, y: 0 }).click().perform(); + + // await navbar.clickCalculatorTab(0); + // await browser.sleep(200); + + // browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + + return filename; +} + +async function loadSession(path: string) { + await navbar.clickMenuButton(); + await browser.sleep(200); + + await sidenav.clickLoadSessionButton(); + await browser.sleep(200); + + await sidenav.loadSessionFile(path); +} + +function expectNumber(msg: string, val: number, expected: number) { + if (val !== expected) { + console.log(msg, "got", val, "expected", expected); + } + expect(val).toEqual(expected); +} + /** * Save and load (serialise and unserialise) calculators to/from JSON files */ describe("ngHyd − save and load sessions", () => { - let startPage: AppPage; - let listPage: ListPage; - let calcPage: CalculatorPage; - let navbar: Navbar; - let sidenav: SideNav; - let prefPage: PreferencesPage; - - beforeEach(() => { + beforeAll(() => { startPage = new AppPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); @@ -26,17 +95,16 @@ describe("ngHyd − save and load sessions", () => { prefPage = new PreferencesPage(); }); + beforeEach(() => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = 45 * 60 * 1000; // 45 min + browser.manage().window().setPosition(2000, 30); + }); + it("when loading session-6-calc.test.json file from home page, 6 calculators should be loaded", async () => { await startPage.navigateTo(); - await navbar.clickMenuButton(); - await browser.sleep(200); - - await sidenav.clickLoadSessionButton(); - await browser.sleep(200); - - await sidenav.loadSessionFile("./session/session-6-calc.test.json"); - await browser.sleep(200); + await loadSession("./session/session-6-calc.test.json"); + await browser.sleep(1000); expect(await navbar.getAllCalculatorTabs().count()).toBe(6); }); @@ -44,13 +112,7 @@ describe("ngHyd − save and load sessions", () => { it("when loading session-optional-params.test.json file from home page, the calculator should be loaded", async () => { await startPage.navigateTo(); - await navbar.clickMenuButton(); - await browser.sleep(200); - - await sidenav.clickLoadSessionButton(); - await browser.sleep(200); - - await sidenav.loadSessionFile("./session/session-optional-params.test.json"); + await loadSession("./session/session-optional-params.test.json"); await browser.sleep(200); expect(await navbar.getAllCalculatorTabs().count()).toBe(1); @@ -73,19 +135,7 @@ describe("ngHyd − save and load sessions", () => { await calcPage.getInputById("Ks").sendKeys("42"); await browser.sleep(1000); - await calcPage.clickSaveCalcButton(); - - // see: https://stackoverflow.com/questions/21935696/protractor-e2e-test-case-for-downloading-pdf-file - const fs = require("fs"); - const path = require("path"); - const os = require("os"); - const filename = path.resolve(os.homedir(), "Téléchargements/session.json"); - if (fs.existsSync(filename)) { - // Make sure the browser doesn't have to rename the download. - fs.unlinkSync(filename); - } - - await calcPage.getSaveSessionButton().click(); + const filename = await saveSession(); await browser.sleep(1000); const fileContent = fs.readFileSync(filename, { encoding: "utf8" }); @@ -93,4 +143,95 @@ describe("ngHyd − save and load sessions", () => { expect(fileContent).toContain(`{"symbol":"Ks","mode":"SINGLE","value":42}`); }); + it("select value must be recovered when loading a session file", async () => { + // start page + await startPage.navigateTo(); + await browser.sleep(200); + + const calcTypes = await listPage.getAvailableCalcTypes(); + + const excludedCalculators = [ + 34, // vérificateur (nécessite d'ouvrir plusieurs calculettes) + ]; + + for (let i = 0; i < calcTypes.length; i++) { + const ct = calcTypes[i]; + if (!excludedCalculators.includes(ct)) { + if (i == 0) { + // enable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await prefPage.disableEvilEmptyFields(); + await browser.sleep(200); + + // start page + await navbar.clickNewCalculatorButton(); + await browser.sleep(200); + } + else { + // empty session + await navbar.clickMenuButton(); + await browser.sleep(200); + await sidenav.clickNewSessionButton(); + await browser.sleep(200); + } + console.log("calc", ct); + + // open calculator + await listPage.clickMenuEntryForCalcType(ct); + await browser.sleep(200); + + // detect selects + const selects = calcPage.getAllCalculatorSelects(); + const nsel = await selects.count(); + for (let s = 0; s < nsel; s++) { // /!\ ElementArrayFinder.each() is ASYNCHRONOUS !! https://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.each + const sel = selects.get(s); + const selId = await sel.getAttribute("id"); + + const options = await calcPage.getMatselectOptionsText(sel); + const optionCount = options.length; + + if (optionCount > 0) { + // index of current selected option + const optTxt = await calcPage.getMatselectCurrentOptionText(sel); + const ind = options.indexOf(optTxt); + + // select next select option (optionally looping) + const nextInd = (ind + 1) % optionCount; + await calcPage.changeSelectValue(sel, nextInd); + await browser.sleep(200); + + // save session + const filename = await saveSession(); + await browser.sleep(200); + + // load session + await loadSession(filename); // bug here : the click on the menu button (top left) takes 40s to take effect and open the side nav!) + await browser.sleep(200); + // the displayed calculator is now the loaded one + + // check the calculator has been loaded + // expect(await navbar.getCalculatorEntriesCount()).toEqual(2); + expectNumber("num calcs", await navbar.getCalculatorEntriesCount(), 2); + + // check the select in the loaded session points to the same option + const sel2 = calcPage.getSelectById(selId); + + // check the same option is in the select + const optTxt2 = await calcPage.getMatselectCurrentOptionText(sel2); + const ind2 = options.indexOf(optTxt2); + //expect(ind2).toEqual(nextInd); + expectNumber("opt index", ind2, nextInd); + + // close last calculator (the loaded one) + await navbar.middleClickCalculatorTab(1); + await browser.sleep(200); + + // check last calculator has been closed + // expect(await navbar.getCalculatorEntriesCount()).toEqual(1); + expectNumber("num calcs(2)", await navbar.getCalculatorEntriesCount(), 1); + } + } + } + } + }); }); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 65d5cc7cf..a49590bac 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -1,4 +1,12 @@ -import { browser } from "protractor"; +import { ElementFinder, browser } from "protractor"; + +/** + * scroll page to make element visible + */ +export async function scrollToElement(elem: ElementFinder) { + await browser.executeScript("arguments[0].scrollIntoView({ block: 'center' });", elem.getWebElement()); + await browser.sleep(50); +} /** * scroll page to top -- GitLab From fb9fed1a1265940280c0217297d557cc0d6c4e72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 17 Jan 2023 17:32:09 +0100 Subject: [PATCH 114/285] refactor: modify code to fit encapsulation of properties Nub field (cherry-picked from #585) refs #592 --- .../fieldset-container.component.ts | 4 +- .../macrorugo-compound-results.component.ts | 2 +- .../modules-diagram.component.ts | 4 +- .../pab-profile-chart.component.ts | 6 +- .../pab-table/pab-table.component.ts | 4 +- .../definition/form-courbe-remous.ts | 2 +- .../formulaire/definition/form-definition.ts | 14 ++- src/app/formulaire/definition/form-espece.ts | 2 +- .../formulaire/definition/form-fixedvar.ts | 2 +- .../definition/form-macrorugo-compound.ts | 2 +- .../definition/form-parallel-structures.ts | 18 ++-- .../formulaire/definition/form-pb-cloison.ts | 8 +- .../formulaire/definition/form-prebarrage.ts | 2 +- src/app/formulaire/definition/form-solveur.ts | 4 +- .../definition/form-verificateur.ts | 2 +- src/app/formulaire/elements/fieldset.ts | 97 ++++++++++--------- .../select/select-field-device-loi-debit.ts | 2 +- .../elements/select/select-field-nub-prop.ts | 5 +- 18 files changed, 93 insertions(+), 87 deletions(-) diff --git a/src/app/components/fieldset-container/fieldset-container.component.ts b/src/app/components/fieldset-container/fieldset-container.component.ts index f612f362a..042df7517 100644 --- a/src/app/components/fieldset-container/fieldset-container.component.ts +++ b/src/app/components/fieldset-container/fieldset-container.component.ts @@ -89,8 +89,8 @@ export class FieldsetContainerComponent implements DoCheck, AfterViewInit { const prms = after.backupParameters(); // replace in-place to change properties (overkill) // @WTF why only those two ? - newFs.setNubPropValue("structureType", after.properties.getPropValue("structureType")); - newFs.setNubPropValue("loiDebit", after.properties.getPropValue("loiDebit")); + newFs.setPropValue("structureType", after.getPropValue("structureType")); + newFs.setPropValue("loiDebit", after.getPropValue("loiDebit")); // au cas où un des paramètres du fieldset source est en mode calcul, // on met le paramètre copié en mode fixé (nghyd#567) diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts index 86eba4301..f388647da 100644 --- a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts @@ -92,7 +92,7 @@ export class MacrorugoCompoundResultsComponent extends ResultsComponentDirective this.mrcResults && this.mrcResults.result && this.mrcResults.result.sourceNub - && this.mrcResults.result.sourceNub.properties.getPropValue("inclinedApron") === MRCInclination.INCLINED + && this.mrcResults.result.sourceNub.getPropValue("inclinedApron") === MRCInclination.INCLINED ); } diff --git a/src/app/components/modules-diagram/modules-diagram.component.ts b/src/app/components/modules-diagram/modules-diagram.component.ts index 6f227edcb..0b607e51e 100644 --- a/src/app/components/modules-diagram/modules-diagram.component.ts +++ b/src/app/components/modules-diagram/modules-diagram.component.ts @@ -265,11 +265,11 @@ export class ModulesDiagramComponent implements AfterContentInit, AfterViewCheck */ private describe(n: Nub) { let type = CalculatorType[n.calcType]; - const nt = n.properties.getPropValue("nodeType"); + const nt = n.getPropValue("nodeType"); if (nt) { type = SectionType[nt]; } else { - const ld = n.properties.getPropValue("loiDebit"); + const ld = n.getPropValue("loiDebit"); if (ld !== undefined) { type = LoiDebit[ld]; } diff --git a/src/app/components/pab-profile-chart/pab-profile-chart.component.ts b/src/app/components/pab-profile-chart/pab-profile-chart.component.ts index c8eff7ec5..ee664e43a 100644 --- a/src/app/components/pab-profile-chart/pab-profile-chart.component.ts +++ b/src/app/components/pab-profile-chart/pab-profile-chart.component.ts @@ -268,7 +268,7 @@ export class PabProfileChartComponent extends ResultsComponentDirective implemen ddSeries[sti] = []; } // orifices have no relevant ZDV - if (st.properties.getPropValue("loiDebit") !== LoiDebit.OrificeSubmerged) { + if (st.getPropValue("loiDebit") !== LoiDebit.OrificeSubmerged) { // 2 points, to draw a segment ddSeries[sti].push({ x: xs[i], @@ -305,7 +305,7 @@ export class PabProfileChartComponent extends ResultsComponentDirective implemen } // orifices have no relevant ZDV; lift gate will be drawn later for each series if (! [ LoiDebit.OrificeSubmerged, LoiDebit.VanLevLarinier, LoiDebit.VanLevVillemonte ] - .includes(st.properties.getPropValue("loiDebit")) + .includes(st.getPropValue("loiDebit")) ) { // 2 points, to draw a segment ddSeries[sti].push({ @@ -403,7 +403,7 @@ export class PabProfileChartComponent extends ResultsComponentDirective implemen // draw lift gate if any if (isLastAbscissa) { for (const st of dw.structures) { - if ([ LoiDebit.VanLevLarinier, LoiDebit.VanLevVillemonte ].includes(st.properties.getPropValue("loiDebit"))) { + if ([LoiDebit.VanLevLarinier, LoiDebit.VanLevVillemonte].includes(st.getPropValue("loiDebit"))) { // skip a point to disjoin line dataN.push({ x: x, diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index 8ef4e14c1..ead6072f1 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -594,7 +594,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni if (i === 0) { // 1st row deviceParamRow.cells.push({ model: ouvrage, - modelValue: ouvrage.properties.getPropValue("loiDebit"), + modelValue: ouvrage.getPropValue("loiDebit"), options: loisCloisons, selectable: ouvrage }); @@ -719,7 +719,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni if (i === 0) { // 1st row deviceParamRowDW.cells.push({ model: ouvrage, - modelValue: ouvrage.properties.getPropValue("loiDebit"), + modelValue: ouvrage.getPropValue("loiDebit"), options: loisAval }); } diff --git a/src/app/formulaire/definition/form-courbe-remous.ts b/src/app/formulaire/definition/form-courbe-remous.ts index 3762c846c..62c8d3b3b 100644 --- a/src/app/formulaire/definition/form-courbe-remous.ts +++ b/src/app/formulaire/definition/form-courbe-remous.ts @@ -31,7 +31,7 @@ export class FormulaireCourbeRemous extends FormulaireSection { this._remousResults.parameters = prmCR; // variable supplémentaire à calculer - this._remousResults.extraParamSymbol = this.currentNub.properties.getPropValue("varCalc"); + this._remousResults.extraParamSymbol = this.currentNub.getPropValue("varCalc"); // calcul this._remousResults.result = cr.CalcSerie(); diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index f2141323a..b4a34d345 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -81,14 +81,18 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs return this._calculateDisabled; } + private getPropValue(key: string): any { + if (this._currentNub === undefined) + return this.defaultProperties[key]; + return this._currentNub.getPropValue(key); + } + public get calculatorType(): CalculatorType { - const props = this._currentNub === undefined ? this.defaultProperties : (this._currentNub.properties as Props).props; - return props["calcType"]; + return this.getPropValue("calcType") } public get nodeType(): SectionType { - const props = this._currentNub === undefined ? this.defaultProperties : (this._currentNub.properties as Props).props; - return props["nodeType"]; + return this.getPropValue("nodeType") } public get calculatorName() { @@ -127,7 +131,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } public set currentNub(n: Nub) { - const nubCalcType = (n.properties as Props).getPropValue("calcType"); + const nubCalcType = n.getPropValue("calcType"); if (this._props["calcType"] !== nubCalcType) { throw new Error( `Nub ${n.properties["calcType"]} incompatible avec le formulaire ${this._calculatorName} (${this._props["calcType"]})` diff --git a/src/app/formulaire/definition/form-espece.ts b/src/app/formulaire/definition/form-espece.ts index 10ded3b83..f0a36b93e 100644 --- a/src/app/formulaire/definition/form-espece.ts +++ b/src/app/formulaire/definition/form-espece.ts @@ -10,7 +10,7 @@ export class FormulaireEspece extends FormulaireFixedVar { protected completeParse(firstNotif: boolean = true) { super.completeParse(firstNotif); - this.updateDivingJetCriteriaInputs(this.currentNub.properties.getPropValue("divingJetSupported")); + this.updateDivingJetCriteriaInputs(this.currentNub.getPropValue("divingJetSupported")); } /** diff --git a/src/app/formulaire/definition/form-fixedvar.ts b/src/app/formulaire/definition/form-fixedvar.ts index 0a329f489..8eb6917e7 100644 --- a/src/app/formulaire/definition/form-fixedvar.ts +++ b/src/app/formulaire/definition/form-fixedvar.ts @@ -63,7 +63,7 @@ export class FormulaireFixedVar extends FormulaireDefinition { public afterParseFieldset(fs: FieldSet) { // observe all Select fields @see this.update() - fs.properties.addObserver(this); + fs.addPropertiesObserver(this); } protected completeParse(firstNotif: boolean = true) { diff --git a/src/app/formulaire/definition/form-macrorugo-compound.ts b/src/app/formulaire/definition/form-macrorugo-compound.ts index ec470e645..306332cb5 100644 --- a/src/app/formulaire/definition/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/form-macrorugo-compound.ts @@ -56,7 +56,7 @@ export class FormulaireMacrorugoCompound extends FormulaireRepeatableFieldset { super.completeParse(firstNotif); this.fieldsetContainer.addObserver(this); if (firstNotif) { - this.updateApronState(this.currentNub.properties.getPropValue("inclinedApron")); + this.updateApronState(this.currentNub.getPropValue("inclinedApron")); } } diff --git a/src/app/formulaire/definition/form-parallel-structures.ts b/src/app/formulaire/definition/form-parallel-structures.ts index b47c4808b..a5de99edd 100644 --- a/src/app/formulaire/definition/form-parallel-structures.ts +++ b/src/app/formulaire/definition/form-parallel-structures.ts @@ -1,4 +1,4 @@ -import { Structure, Nub, ParallelStructure, StructureProperties, Props, Session, ParamDefinition, Prop_NullParameters } from "jalhyd"; +import { Structure, Nub, ParallelStructure, StructureProperties, Props, Session, ParamDefinition, Prop_NullParameters, IProperties } from "jalhyd"; import { FieldsetContainer } from "../elements/fieldset-container"; import { FieldSet } from "../elements/fieldset"; @@ -71,7 +71,7 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { * and return it; does not store it in the Session (for Structures, not for Calculator Modules) * @param p properties for the new Nub */ - protected createStructure(p: Props): Structure { + protected createStructure(p: IProperties): Structure { return Session.getInstance().createNub(p, this.currentNub as ParallelStructure) as Structure; } @@ -81,9 +81,9 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { * @param sn Structure to replace * @param params properties to build the new Nub (calcType, loiDebit...) */ - protected replaceNub(sn: Structure, params: Props): Nub { + protected replaceNub(sn: Structure): Nub { const parent = (this.currentNub as ParallelStructure); - const newStructure = this.createStructure(params); + const newStructure = this.createStructure(sn); parent.replaceChildInplace(sn, newStructure); return newStructure; } @@ -108,7 +108,7 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { * @param name nom de la propriété qui vient de changer * @param val nouvelle valeur de la propriété */ - protected adjustProperties(props: Props, name: string, val: any) { + protected adjustProperties(props: IProperties, name: string, val: any) { if (name === "structureType") { if (! StructureProperties.isCompatibleValues( val, props.getPropValue("loiDebit"), this.currentNub as ParallelStructure @@ -159,12 +159,12 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { } else if (sender instanceof FieldSet && data.action === "propertyChange") { switch (sender.id) { case "fs_ouvrage": - const props = sender.properties; // ensure loiDebit is set - props.setPropValue("loiDebit", data.value); - this.adjustProperties(props, data["name"], data["value"]); + //props.setPropValue("loiDebit", data.value); // ?? et si la propriété modifiée n'est pas la loi de débit ? + + this.adjustProperties(sender, data["name"], data["value"]); // replace Structure Nub - const newNub = this.replaceNub((sender.nub as Structure), props); + const newNub = this.replaceNub(sender.nub as Structure); sender.setNub(newNub); // treat the fieldset as new to re-subscribe to Nub properties change events this.afterParseFieldset(sender); diff --git a/src/app/formulaire/definition/form-pb-cloison.ts b/src/app/formulaire/definition/form-pb-cloison.ts index 25910c87d..145c03fe4 100644 --- a/src/app/formulaire/definition/form-pb-cloison.ts +++ b/src/app/formulaire/definition/form-pb-cloison.ts @@ -27,12 +27,12 @@ export class FormulairePbCloison extends FormulaireParallelStructure { } else if (sender instanceof FieldSet && data.action === "propertyChange") { switch (sender.id) { case "fs_ouvrage": - const props = sender.properties; // ensure loiDebit is set - props.setPropValue("loiDebit", data.value); - this.adjustProperties(props, data["name"], data["value"]); + //props.setPropValue("loiDebit", data.value); // ?? et si la propriété modifiée n'est pas la loi de débit ? + + this.adjustProperties(sender, data["name"], data["value"]); // replace Structure Nub - const newNub = this.replaceNub((sender.nub as Structure), props); + const newNub = this.replaceNub(sender.nub as Structure); sender.setNub(newNub); // treat the fieldset as new to re-subscribe to Nub properties change events this.afterParseFieldset(sender); diff --git a/src/app/formulaire/definition/form-prebarrage.ts b/src/app/formulaire/definition/form-prebarrage.ts index 95e5f6549..c9a0d9e0d 100644 --- a/src/app/formulaire/definition/form-prebarrage.ts +++ b/src/app/formulaire/definition/form-prebarrage.ts @@ -367,7 +367,7 @@ export class FormulairePrebarrage extends FormulaireFixedVar { } catch (e) { let res; if (p.parentNub.calcType === CalculatorType.Structure) { - res = p.parentNub.getParent().uid; + res = p.parentNub.parent.uid; } else { res = p.parentNub.uid; } diff --git a/src/app/formulaire/definition/form-solveur.ts b/src/app/formulaire/definition/form-solveur.ts index f658c98ee..0a3d446ef 100644 --- a/src/app/formulaire/definition/form-solveur.ts +++ b/src/app/formulaire/definition/form-solveur.ts @@ -58,7 +58,7 @@ export class FormulaireSolveur extends FormulaireFixedVar { // if searchedParam is set to a value that won't be available anymore // once nubToCalculate is updated, setPropValue throws an error, but // nubToCalculate is updated anyway; here, just inhibit the error - this._currentNub.properties.setPropValue("nubToCalculate", data.value.value); + this._currentNub.setPropValue("nubToCalculate", data.value.value); } catch (e) { } // refresh targetted result selector const trSel = this.getFormulaireNodeById(this._targettedResultSelectId) as SelectField; @@ -73,7 +73,7 @@ export class FormulaireSolveur extends FormulaireFixedVar { // update Solveur property: searched Parameter try { const p: ParamDefinition = data.value.value; - this._currentNub.properties.setPropValue( + this._currentNub.setPropValue( "searchedParameter", p.nubUid + "/" + p.symbol ); diff --git a/src/app/formulaire/definition/form-verificateur.ts b/src/app/formulaire/definition/form-verificateur.ts index 893754665..337bc789a 100644 --- a/src/app/formulaire/definition/form-verificateur.ts +++ b/src/app/formulaire/definition/form-verificateur.ts @@ -97,7 +97,7 @@ export class FormulaireVerificateur extends FormulaireFixedVar { this.reset(); // reset results if (sender.id === "select_target_pass" && data.action === "select") { // update Verificateur property: Pass to check - this._currentNub.properties.setPropValue("nubToVerify", data.value ? data.value.value : undefined); + this._currentNub.setPropValue("nubToVerify", data.value ? data.value.value : undefined); } else if (sender.id === "select_species_list" && data.action === "select") { // update Verificateur property: Species list (string[]) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index d0229afe7..2c130b65f 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -1,7 +1,7 @@ import { CalculatorType, ParamDefinition, - Props, + IProperties, Observer, Nub, enumValueFromString @@ -16,7 +16,7 @@ import { SelectFieldFactory } from "./select/select-field-factory"; import { FormulaireFixedVar } from "../definition/form-fixedvar"; import { SelectEntry } from "./select/select-entry"; -export class FieldSet extends FormulaireElement implements Observer { +export class FieldSet extends FormulaireElement implements IProperties { /** Nub associé */ private _nub: Nub; @@ -45,7 +45,7 @@ export class FieldSet extends FormulaireElement implements Observer { } private addField(f: Field) { - if (! f) { + if (!f) { throw new Error("FieldSet.addField() : argument incorrect (undefined)"); } this.kids.push(f); @@ -114,40 +114,8 @@ export class FieldSet extends FormulaireElement implements Observer { return res; } - public get properties(): Props { - return this.nub.properties; - } - - private get sectionProperties(): Props { - const section = this.nub.getChildren()[0]; - if (section) { - return section.properties; - } else { - return new Props(); - } - } - - /** - * get associated nub property value - * @param key property name - * @param inSection if true, will look for the required property in the Nub's section (children[0]) - */ - private getNubPropValue(key: string, inSection: boolean = false): any { - if (inSection) { - return this.sectionProperties.getPropValue(key); - } else { - return this.properties.getPropValue(key); - } - } - - /** - * assign associated nub property - * @param key nub property name - * @param val value to assign with - * @returns true if property value has changed - */ - public setNubPropValue(key: string, val: any): boolean { - return this.properties.setPropValue(key, val, this); + public addPropertiesObserver(o: Observer) { + this.nub.addPropertiesObserver(o); } private getNubParamFromSymbol(symbol: string): ParamDefinition { @@ -250,7 +218,7 @@ export class FieldSet extends FormulaireElement implements Observer { private setSelectValueFromProperty(selectId: string, inSection: boolean = false) { const selectField: SelectField = this.getFormulaireNodeById(selectId) as SelectField; if (selectField) { - let propVal: any = this.getNubPropValue(selectField.associatedProperty, inSection); + let propVal: any = this.getPropValue(selectField.associatedProperty, inSection); if (propVal === undefined) { propVal = ""; // clodo bullet-proof loading } @@ -277,9 +245,9 @@ export class FieldSet extends FormulaireElement implements Observer { this._helpLink = json["help"]; const ct: string = json["calcType"]; - const currentCt = this.properties.getPropValue("calcType"); + const currentCt = this.getPropValue("calcType"); const calc_type: CalculatorType = currentCt ? currentCt : (ct ? CalculatorType[ct] : this.parentForm.calculatorType); - this.setNubPropValue("calcType", calc_type); + this.setPropValue("calcType", calc_type); // parse fields once, so that SelectField elements are present // when setting default properties below @@ -293,9 +261,9 @@ export class FieldSet extends FormulaireElement implements Observer { const prop = sel.associatedProperty; const defaultValue = sel.configDefaultValue; // Sets Nub default property, unless this property is already set - const currentValue = this.properties.getPropValue(prop); + const currentValue = this.getPropValue(prop); if (defaultValue !== undefined && currentValue === undefined) { - this.setNubPropValue(prop, enumValueFromString(prop, defaultValue)); + this.setPropValue(prop, enumValueFromString(prop, defaultValue)); } } } @@ -314,7 +282,7 @@ export class FieldSet extends FormulaireElement implements Observer { public getNodeParameterValue(symbol: string): number { const p = this.getNodeParameter(symbol); - if (! p) { + if (!p) { throw new Error(`FieldSet.getNodeParameterValue() : pas de paramètre ${symbol} trouvé`); } @@ -336,7 +304,7 @@ export class FieldSet extends FormulaireElement implements Observer { public getSelectedValue(selectFieldId: string): string | string[] { for (const p of this.kids) { if (p instanceof SelectField && p.isDisplayed && p.id === selectFieldId) { - if (! p.multiple) { + if (!p.multiple) { const value: string = (p.getValue() as SelectEntry).value; return FormulaireElement.removePrefix(value, selectFieldId + "_"); } else { @@ -359,7 +327,7 @@ export class FieldSet extends FormulaireElement implements Observer { if (senderId === "select_section") { // sections paramétrées, courbes de remous, régimes uniformes // "nodeType" is a property of the section child, not of the parent - const oldNodeType = this.nub.getChildren()[0].properties.getPropValue("nodeType"); + const oldNodeType = this.nub.getChildren()[0].getPropValue("nodeType"); if (oldNodeType !== data.value.value) { // avoid infinite loops // manually notify parent so that it replaces the child Nub @WARNING clodo trick this.parentForm.update(this, { @@ -380,9 +348,9 @@ export class FieldSet extends FormulaireElement implements Observer { const prop = sel.associatedProperty; // for multiple select if (Array.isArray(data.value)) { - this.setNubPropValue(prop, data.value.map((v: any) => v.value)); + this.setPropValue(prop, data.value.map((v: any) => v.value)); } else { - this.setNubPropValue(prop, data.value.value); + this.setPropValue(prop, data.value.value); } } } @@ -394,4 +362,39 @@ export class FieldSet extends FormulaireElement implements Observer { } } } + + // interface IProperties + + /** + * list of properties keys + */ + public get keys(): string[] { + return this._nub.keys; + } + + /** + * get associated nub property value + * @param key property name + * @param inSection if true, will look for the required property in the Nub's section (children[0]) + */ + public getPropValue(key: string, inSection: boolean = false): any { + if (inSection) { + const section = this.nub.getChildren()[0]; + if (section) { + return section.getPropValue(key); + } + return undefined; + } + return this.nub.getPropValue(key); + } + + /** + * assign associated nub property + * @param key nub property name + * @param val value to assign with + * @returns true if property value has changed + */ + public setPropValue(key: string, val: any): boolean { + return this.nub.setPropValue(key, val, this); + } } diff --git a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts index 07c1f555a..683adebae 100644 --- a/src/app/formulaire/elements/select/select-field-device-loi-debit.ts +++ b/src/app/formulaire/elements/select/select-field-device-loi-debit.ts @@ -34,7 +34,7 @@ export class SelectFieldDeviceLoiDebit extends SelectField { */ private get loiDebit(): LoiDebit { const child = this.nub.getChildren()[this.parent.indexAsKid()]; - return child.properties.getPropValue("loiDebit"); + return child.getPropValue("loiDebit"); } protected populate() { diff --git a/src/app/formulaire/elements/select/select-field-nub-prop.ts b/src/app/formulaire/elements/select/select-field-nub-prop.ts index 4fa8c4e86..233502db0 100644 --- a/src/app/formulaire/elements/select/select-field-nub-prop.ts +++ b/src/app/formulaire/elements/select/select-field-nub-prop.ts @@ -1,6 +1,5 @@ -import { Session } from "jalhyd"; +import { Props } from "jalhyd"; import { FormulaireNode } from "../formulaire-node"; -import { SelectEntry } from "./select-entry"; import { SelectField } from "./select-field"; /* @@ -27,7 +26,7 @@ export class SelectFieldNubProperty extends SelectField { protected populate() { // find enum associated to property - const enumClass = Session.enumFromProperty[this._associatedProperty]; + const enumClass = Props.enumFromProperty[this._associatedProperty]; if (enumClass !== undefined) { // add one select entry per enum entry, in the enum order for (let j = 0; j < Object.keys(enumClass).length / 2; j++) { -- GitLab From 562d00ef6d4478533695ecbdb69d12d711dec748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 27 Jan 2023 14:29:33 +0100 Subject: [PATCH 115/285] fix: compilation failure (missing FieldSet.hasProperty()) refs #592 --- src/app/formulaire/elements/fieldset.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 2c130b65f..3637d892d 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -365,6 +365,10 @@ export class FieldSet extends FormulaireElement implements IProperties { // interface IProperties + public hasProperty(key: string): boolean { + return this._nub.hasProperty(key); + } + /** * list of properties keys */ -- GitLab From 7bcc71bc0373fc1bc68fd00753fa4f43806ee670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 27 Jan 2023 14:28:24 +0100 Subject: [PATCH 116/285] fix(e2e): clickSaveCalcButton() fails because of button not visible refs #592 --- e2e/calculator.po.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 3e5af1c82..82d81213a 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -307,6 +307,7 @@ export class CalculatorPage { } async clickSaveCalcButton() { + await scrollPageToTop(); return await element(by.css("#save-calc")).click(); } -- GitLab From 3b748aecd2e838c3df34a792cbe3583da6c684c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 27 Jan 2023 14:35:23 +0100 Subject: [PATCH 117/285] refactor: remove FormulaireSection._defaultSectionType member, use defaultProperties instead refs #592 --- src/app/formulaire/definition/form-section.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/app/formulaire/definition/form-section.ts b/src/app/formulaire/definition/form-section.ts index 8f8be0af9..bf06c16b2 100644 --- a/src/app/formulaire/definition/form-section.ts +++ b/src/app/formulaire/definition/form-section.ts @@ -7,16 +7,14 @@ import { SectionType } from "jalhyd"; export class FormulaireSection extends FormulaireFixedVar { - /** for SectionNubs only */ - protected _defaultSectionType; - /** * determine default section type from select configuration */ private parseDefaultSectionType() { - if (this._defaultSectionType === undefined) { + if (this.defaultProperties["nodeType"] === undefined) // still use "nodeType" for consistency, should be named "sectionType" + { const def = this.parseSelectDefaultValue(this._jsonConfig, "select_section"); - this._defaultSectionType = SectionType[def]; + this.defaultProperties["nodeType"] = SectionType[def]; } } @@ -31,7 +29,7 @@ export class FormulaireSection extends FormulaireFixedVar { // add new Section as first child, from given nodeType const propsSection = new Props(); propsSection.setPropValue("calcType", CalculatorType.Section); - propsSection.setPropValue("nodeType", this._defaultSectionType); + propsSection.setPropValue("nodeType", this.defaultProperties["nodeType"]); propsSection.setPropValue(Prop_NullParameters, ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit); const section = Session.getInstance().createNub(propsSection); this.currentNub.setSection(section as acSection); -- GitLab From 5894ee9148489517861e942660265e02f3bf54b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 27 Jan 2023 15:45:02 +0100 Subject: [PATCH 118/285] fix: crash in SelectField.nub getter refs #592 --- src/app/formulaire/elements/formulaire-element.ts | 4 ++++ src/app/formulaire/elements/select/select-field.ts | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/app/formulaire/elements/formulaire-element.ts b/src/app/formulaire/elements/formulaire-element.ts index 579b62648..25b5943fa 100644 --- a/src/app/formulaire/elements/formulaire-element.ts +++ b/src/app/formulaire/elements/formulaire-element.ts @@ -56,6 +56,10 @@ export abstract class FormulaireElement extends FormulaireNode { */ public get parentForm(): FormulaireDefinition { let res = this.parent; + if (res === undefined) { + return undefined; + } + // while (!(res instanceof FormulaireDefinition)) while (!("calculatorName" in res)) { // pour éviter de faire référence au type FormulaireDefinition, supprimer l'import correspondant et diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index 86a988004..4de4cfcaa 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -50,6 +50,10 @@ export abstract class SelectField extends Field { * associated nub */ protected get nub(): Nub { + const parent = this.parentForm; + if (parent === undefined) { + return undefined; + } return (this.parentForm as FormulaireDefinition).currentNub; } -- GitLab From 1df98b3b42ef8ca733d0f89047f8c9843bd99c1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 27 Jan 2023 15:51:26 +0100 Subject: [PATCH 119/285] fix: modify SelectField.findAndSetDefaultValue() to use nub value for associated property refs #592 --- .../elements/select/select-field.ts | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index 4de4cfcaa..4e1c92b50 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -132,22 +132,37 @@ export abstract class SelectField extends Field { } /** - * try to find a default value to select + * Try to find a default value to select. + * Priority order : + * - passed parameter + * - nub value for associated property + * - default value from configuration file + * - first select entry */ protected findAndSetDefaultValue(value?: string) { // default to first available entry if any if (this._entries.length > 0) { let val: SelectEntry; + if (value !== undefined) { val = this.getEntryFromValue(enumValueFromString(this._associatedProperty, value)); - } else if (this._configDefaultValue === undefined) { - val = this._entries[0]; - } else { + if (val === undefined) { + throw Error("invalid select default value " + value + " for " + this._associatedProperty + " property"); + } + } else if (this.nub !== undefined) { + val = this.getEntryFromValue(this.nub.getPropValue(this._associatedProperty)); + if (val === undefined) { + throw Error("invalid select default value for " + this._associatedProperty + " property"); + } + } else if (this._configDefaultValue !== undefined) { val = this.getEntryFromValue(enumValueFromString(this._associatedProperty, this._configDefaultValue)); if (val === undefined) { throw Error("invalid select default value " + this._configDefaultValue + " for " + this._associatedProperty + " property"); } + } else { + val = this._entries[0]; } + if (this._multiple) { this.setValue([val]); } else { -- GitLab From 835386cec974e67e40b8d905ad66792f53ff6ada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 27 Jan 2023 15:52:29 +0100 Subject: [PATCH 120/285] fix: SelectFieldDeviceStructureType defaut value refs #592 --- .../select/select-field-device-structure-type.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/app/formulaire/elements/select/select-field-device-structure-type.ts b/src/app/formulaire/elements/select/select-field-device-structure-type.ts index 7b188d114..0d1ce351d 100644 --- a/src/app/formulaire/elements/select/select-field-device-structure-type.ts +++ b/src/app/formulaire/elements/select/select-field-device-structure-type.ts @@ -21,6 +21,14 @@ export class SelectFieldDeviceStructureType extends SelectField { this._configDefaultValue = json["default"]; } + /** + * get discharge law linked to this select's nub + */ + private get structureType(): StructureType { + const child = this.nub.getChildren()[this.parent.indexAsKid()]; + return child.getPropValue("structureType"); + } + protected populate() { // possible values depend on CalcType for (const st in (this.nub as ParallelStructure).getLoisAdmissibles()) { @@ -30,6 +38,6 @@ export class SelectFieldDeviceStructureType extends SelectField { } protected initSelectedValue() { - this.findAndSetDefaultValue(); + this.findAndSetDefaultValue(StructureType[this.structureType]); } } -- GitLab From 21235898a3610cedece2711ef63f1a811cbc0dcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Feb 2023 09:46:01 +0100 Subject: [PATCH 121/285] update jalhyd_branch to 334-restructurer-lechapt-et-calmon-pour-de-nouvelles-lois-de-pertes-de-charge refs #592 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index 9e2dece83..0bd0de843 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -338-optimiser-l-affichage-des-unites +334-restructurer-lechapt-et-calmon-pour-de-nouvelles-lois-de-pertes-de-charge -- GitLab From f7e44f4db40e66664f8b6c1dd05f740b529b598e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Feb 2023 09:48:31 +0100 Subject: [PATCH 122/285] update package-lock.json (lodash added to jalhyd) refs #592 --- package-lock.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/package-lock.json b/package-lock.json index 9661a8c87..87ddd2409 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,6 +84,7 @@ "license": "LGPL-3.0-or-later", "dependencies": { "@types/base-64": "^1.0.0", + "@types/lodash": "^4.14.191", "base-64": "^1.0.0" }, "devDependencies": { @@ -4138,6 +4139,11 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" + }, "node_modules/@types/marked": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.7.tgz", @@ -23282,6 +23288,11 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" + }, "@types/marked": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.7.tgz", @@ -29813,6 +29824,7 @@ "requires": { "@types/base-64": "^1.0.0", "@types/jasmine": "^4.0.3", + "@types/lodash": "^4.14.191", "@types/node": "^18.0.3", "@typescript-eslint/eslint-plugin": "^5.30.6", "@typescript-eslint/parser": "^5.30.6", -- GitLab From 440a6b1cdc112032c59ad49e4b8c0b95942bd281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Feb 2023 09:51:03 +0100 Subject: [PATCH 123/285] test(e2e): reactivate Lechapt-Calmon test on results change refs #592 --- e2e/lechapt-calmon.e2e-spec.ts | 2 +- e2e/load-save-session.e2e-spec.ts | 13 ++----------- e2e/util.po.ts | 13 +++++++++++++ 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/e2e/lechapt-calmon.e2e-spec.ts b/e2e/lechapt-calmon.e2e-spec.ts index 4dd2d834c..75732b7dd 100644 --- a/e2e/lechapt-calmon.e2e-spec.ts +++ b/e2e/lechapt-calmon.e2e-spec.ts @@ -40,7 +40,7 @@ describe("Lechapt&Calmon - ", () => { await browser.sleep(200); } - xit("when material is modified, results should change", async () => { // temporairement débranché, cf. jalhyd#334 / nghyd#585 + it("when material is modified, results should change", async () => { await setup(); // select last material type diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 1ba2b23f7..31780b9fe 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -5,6 +5,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; +import { expectNumber } from "./util.po"; const fs = require("fs"); const path = require("path"); @@ -75,13 +76,6 @@ async function loadSession(path: string) { await sidenav.loadSessionFile(path); } -function expectNumber(msg: string, val: number, expected: number) { - if (val !== expected) { - console.log(msg, "got", val, "expected", expected); - } - expect(val).toEqual(expected); -} - /** * Save and load (serialise and unserialise) calculators to/from JSON files */ @@ -174,7 +168,6 @@ describe("ngHyd − save and load sessions", () => { await sidenav.clickNewSessionButton(); await browser.sleep(200); } - console.log("calc", ct); // open calculator await listPage.clickMenuEntryForCalcType(ct); @@ -210,7 +203,6 @@ describe("ngHyd − save and load sessions", () => { // the displayed calculator is now the loaded one // check the calculator has been loaded - // expect(await navbar.getCalculatorEntriesCount()).toEqual(2); expectNumber("num calcs", await navbar.getCalculatorEntriesCount(), 2); // check the select in the loaded session points to the same option @@ -218,8 +210,8 @@ describe("ngHyd − save and load sessions", () => { // check the same option is in the select const optTxt2 = await calcPage.getMatselectCurrentOptionText(sel2); + await browser.sleep(100); const ind2 = options.indexOf(optTxt2); - //expect(ind2).toEqual(nextInd); expectNumber("opt index", ind2, nextInd); // close last calculator (the loaded one) @@ -227,7 +219,6 @@ describe("ngHyd − save and load sessions", () => { await browser.sleep(200); // check last calculator has been closed - // expect(await navbar.getCalculatorEntriesCount()).toEqual(1); expectNumber("num calcs(2)", await navbar.getCalculatorEntriesCount(), 1); } } diff --git a/e2e/util.po.ts b/e2e/util.po.ts index a49590bac..e772a28ce 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -14,3 +14,16 @@ export async function scrollToElement(elem: ElementFinder) { export async function scrollPageToTop() { await browser.executeScript("window.scrollTo(0, 0);"); } + +/** + * execute expect() on numbers and displays a failure message + * @param msg message in caase of failure + * @param val value to check + * @param expected expected value + */ +export function expectNumber(msg: string, val: number, expected: number) { + if (val !== expected) { + console.log(msg, "got", val, "expected", expected); + } + expect(val).toEqual(expected); +} -- GitLab From 047ce4c06d16985e316a54dd003537a9471c4f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Feb 2023 09:52:37 +0100 Subject: [PATCH 124/285] fix: select default value not properly set refs #592 --- .../elements/select/select-field.ts | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index 4e1c92b50..2b9b65aa9 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -149,18 +149,20 @@ export abstract class SelectField extends Field { if (val === undefined) { throw Error("invalid select default value " + value + " for " + this._associatedProperty + " property"); } - } else if (this.nub !== undefined) { - val = this.getEntryFromValue(this.nub.getPropValue(this._associatedProperty)); - if (val === undefined) { - throw Error("invalid select default value for " + this._associatedProperty + " property"); + } else { + if (this.nub !== undefined) { + val = this.getEntryFromValue(this.nub.getPropValue(this._associatedProperty)); + // nub may not have "this._associatedProperty" as a property + } + if (val === undefined && this._configDefaultValue !== undefined) { + val = this.getEntryFromValue(enumValueFromString(this._associatedProperty, this._configDefaultValue)); + if (val === undefined) { + throw Error("invalid select default value " + this._configDefaultValue + " for " + this._associatedProperty + " property"); + } } - } else if (this._configDefaultValue !== undefined) { - val = this.getEntryFromValue(enumValueFromString(this._associatedProperty, this._configDefaultValue)); if (val === undefined) { - throw Error("invalid select default value " + this._configDefaultValue + " for " + this._associatedProperty + " property"); + val = this._entries[0]; } - } else { - val = this._entries[0]; } if (this._multiple) { -- GitLab From 63d385cab896365899347153dab3a36f16ef3626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Feb 2023 09:53:18 +0100 Subject: [PATCH 125/285] fix: pressure loss form: create child law nub when opening calculator refs #592 --- .../formulaire/definition/form-pressureloss.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/app/formulaire/definition/form-pressureloss.ts b/src/app/formulaire/definition/form-pressureloss.ts index 60c98da99..4b1e7ceb4 100644 --- a/src/app/formulaire/definition/form-pressureloss.ts +++ b/src/app/formulaire/definition/form-pressureloss.ts @@ -1,4 +1,4 @@ -import { PressureLoss, Props, PressureLossType } from "jalhyd"; +import { PressureLoss, Props, PressureLossType, Session, PressureLossLaw, CalculatorType } from "jalhyd"; import { FormulaireFixedVar } from "./form-fixedvar"; /** @@ -17,8 +17,19 @@ export class FormulairePressureLoss extends FormulaireFixedVar { if (props === undefined) { props = new Props(); } + + // create pressure loss parent nub + const pll = this.defaultProperties["pressureLossType"]; props.setPropValue("calcType", this.calculatorType); - props.setPropValue("pressureLossType", this.defaultProperties["pressureLossType"]); + props.setPropValue("pressureLossType", pll); super.initNub(props); + + // create pressure loss law child nub + const propsLaw: Props = new Props(); + const pressureLossCalc: CalculatorType = PressureLossLaw.calcTypeFromPressureLossLaw[pll]; + propsLaw.setPropValue("calcType", pressureLossCalc); + const law = Session.getInstance().createNub(propsLaw) as PressureLossLaw; + const pl: PressureLoss = this.currentNub as PressureLoss; + pl.setLaw(law); } } -- GitLab From 7014185c2c989481164e1e1030d6d4f95119e0a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Feb 2023 09:54:12 +0100 Subject: [PATCH 126/285] fix: default values for selects not read from configuration file refs #592 --- .../formulaire/definition/form-definition.ts | 21 +++++++++++++++++++ src/app/services/formulaire.service.ts | 4 +++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index b4a34d345..146d1746a 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -117,6 +117,27 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs return this._props; } + public parseConfigToProps(): Props { + const res: Props = new Props(); + + const jp = new ConfigParser(this._jsonConfig); + for (const fs of jp.forAll("fieldset")) { + const fsp = new ConfigParser(fs["fields"]); + for (const sel of fsp.forAll("select")) { + const p = sel["property"]; + if (p !== undefined) { // if select has associated property + const v = sel["default"]; + if (v !== undefined) { // if select has a default value for associated property + const enumClass = Props.enumFromProperty[p]; + res.setPropValue(p, enumClass[v]); + } + } + } + } + + return res; + } + /** * Creates a Nub from the given properties, and associates it to the current form */ diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 880741539..a32a1aec4 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -371,7 +371,9 @@ export class FormulaireService extends Observable { if (nub) { f.currentNub = nub; } else { - f.initNub(); + const confProps = f.parseConfigToProps(); + confProps.setPropValue("calcType", ct); + f.initNub(confProps); } // Restaure le nom du module, sinon affecte le nom par défaut -- GitLab From 2c7aeb390dda6c555f9b4b47f882f44fff3fe5ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Feb 2023 16:13:25 +0100 Subject: [PATCH 127/285] update jalhyd_branch to 215-conduites-en-charge-ajouter-loi-de-strickler-exercice-dans-livre-de-bennis refs #596 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index 0bd0de843..cf4a15c27 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -334-restructurer-lechapt-et-calmon-pour-de-nouvelles-lois-de-pertes-de-charge +215-conduites-en-charge-ajouter-loi-de-strickler-exercice-dans-livre-de-bennis -- GitLab From b0e26ac5d78da69644f812232384de481142d6b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 2 Feb 2023 08:10:06 +0100 Subject: [PATCH 128/285] test(e2e): session reload to check select value: improve report in case of failure refs #596 --- e2e/load-save-session.e2e-spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 31780b9fe..eca2c5435 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -203,7 +203,7 @@ describe("ngHyd − save and load sessions", () => { // the displayed calculator is now the loaded one // check the calculator has been loaded - expectNumber("num calcs", await navbar.getCalculatorEntriesCount(), 2); + expectNumber(`calc ${ct} select ${selId} : num calcs`, await navbar.getCalculatorEntriesCount(), 2); // check the select in the loaded session points to the same option const sel2 = calcPage.getSelectById(selId); @@ -212,14 +212,14 @@ describe("ngHyd − save and load sessions", () => { const optTxt2 = await calcPage.getMatselectCurrentOptionText(sel2); await browser.sleep(100); const ind2 = options.indexOf(optTxt2); - expectNumber("opt index", ind2, nextInd); + expectNumber(`calc ${ct} select ${selId} : opt index`, ind2, nextInd); // close last calculator (the loaded one) await navbar.middleClickCalculatorTab(1); await browser.sleep(200); // check last calculator has been closed - expectNumber("num calcs(2)", await navbar.getCalculatorEntriesCount(), 1); + expectNumber(`calc ${ct} select ${selId} : num calcs(2)`, await navbar.getCalculatorEntriesCount(), 1); } } } -- GitLab From a7d8b1cffb614637f01fe3ad44c110ba982b62c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 2 Feb 2023 08:12:09 +0100 Subject: [PATCH 129/285] feat: add Strickler pressure loss law in pressure loss form configuration refs #596 --- src/app/calculators/pressureloss/config.json | 3 ++- src/app/calculators/pressureloss/en.json | 1 + src/app/calculators/pressureloss/fr.json | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/calculators/pressureloss/config.json b/src/app/calculators/pressureloss/config.json index e74c60cd9..c02581572 100644 --- a/src/app/calculators/pressureloss/config.json +++ b/src/app/calculators/pressureloss/config.json @@ -20,7 +20,8 @@ }, "L", "M", - "N" + "N", + "Ks" ] }, { diff --git a/src/app/calculators/pressureloss/en.json b/src/app/calculators/pressureloss/en.json index de3a81a4e..614765523 100644 --- a/src/app/calculators/pressureloss/en.json +++ b/src/app/calculators/pressureloss/en.json @@ -2,6 +2,7 @@ "fs_pressureloss_law": "Pressure loss", "select_pressurelosstype": "Pressure loss law", "PRESSURELOSSTYPE_0": "Lechapt-Calmon", + "PRESSURELOSSTYPE_1": "Strickler", "fs_materiau": "Type of material", "select_material": "Choice of material", diff --git a/src/app/calculators/pressureloss/fr.json b/src/app/calculators/pressureloss/fr.json index cbf2dd2d8..1d92a6153 100644 --- a/src/app/calculators/pressureloss/fr.json +++ b/src/app/calculators/pressureloss/fr.json @@ -2,6 +2,7 @@ "fs_pressureloss_law": "Perte de charge", "select_pressurelosstype": "Loi de perte de charge", "PRESSURELOSSTYPE_0": "Lechapt-Calmon", + "PRESSURELOSSTYPE_1": "Strickler", "fs_materiau": "Type du matériau", "select_material": "Choix du matériau", -- GitLab From 7742a202e9a99565778187c68c6eb29dc9ea58bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 2 Feb 2023 10:25:31 +0100 Subject: [PATCH 130/285] fix: pressure loss results: do not display child rank for results from child law nub refs #585 --- .../fixed-results.component.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/app/components/fixedvar-results/fixed-results.component.ts b/src/app/components/fixedvar-results/fixed-results.component.ts index ae76c3e19..5905c6bce 100644 --- a/src/app/components/fixedvar-results/fixed-results.component.ts +++ b/src/app/components/fixedvar-results/fixed-results.component.ts @@ -10,6 +10,7 @@ import { NgParameter } from "../../formulaire/elements/ngparam"; import { capitalize, Result, ResultElement } from "jalhyd"; import { sprintf } from "sprintf-js"; +import { PressureLoss } from "jalhyd"; @Component({ selector: "fixed-results", @@ -256,10 +257,20 @@ export class FixedResultsComponent extends ResultsComponentDirective { if (sn.parent) { ct = sn.parent.calcType; } - const cn = capitalize(this.intlService.childName(c)); - let label = sprintf(this.intlService.localizeText("INFO_STUFF_N"), cn) - + (c.findPositionInParent() + 1) + " : " - + this.formService.expandVariableNameAndUnit(ct, k); + + // do not display child rank in case of pressure loss law + const displayChildRank = !(sn instanceof PressureLoss); + let label: string; + if (displayChildRank) { + const cn = capitalize(this.intlService.childName(c)); + label = sprintf(this.intlService.localizeText("INFO_STUFF_N"), cn) + (c.findPositionInParent() + 1); + } + else { + label = capitalize(this.intlService.childName(c)); + } + + label += " : "; + label += this.formService.expandVariableNameAndUnit(ct, k); label += this._fixedResults.getHelpLink(k); data.push({ label: label, -- GitLab From e81484c37d164866474073f48a637c1016b9cb84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Feb 2023 14:20:17 +0100 Subject: [PATCH 131/285] refactor(e2e): disable test on select value after session reload refs #585 --- e2e/load-save-session.e2e-spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 31780b9fe..ddb95adfe 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -137,7 +137,7 @@ describe("ngHyd − save and load sessions", () => { expect(fileContent).toContain(`{"symbol":"Ks","mode":"SINGLE","value":42}`); }); - it("select value must be recovered when loading a session file", async () => { + xit("select value must be recovered when loading a session file", async () => { // start page await startPage.navigateTo(); await browser.sleep(200); -- GitLab From 3b3353065d11b3c2691ca79e3b4643d6973dc3f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Feb 2023 14:51:57 +0100 Subject: [PATCH 132/285] fix(e2e): setParamMode() function cancels opening dialog rather than validate refs #585 --- e2e/calculator.po.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 82d81213a..ed78fc4e2 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -354,7 +354,8 @@ export class CalculatorPage { // for "var" mode, close the modal if (mode === "var") { await browser.sleep(500); // wait for the modal to appear - await element(by.css("dialog-edit-param-values .mat-dialog-actions button")).click(); + //await element(by.css("dialog-edit-param-values .mat-dialog-actions button")).click(); // clique "annuler" et non "valider" : + await element(by.css("dialog-edit-param-values .mat-dialog-actions button.mat-warn")).click(); await browser.sleep(500); // wait for the navbar to reappear after modal dismissal } } -- GitLab From 07a3610666b40845b94e827c47d275ed3f3378fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Feb 2023 16:48:25 +0100 Subject: [PATCH 133/285] refactor: FieldSet: remove inSection parameter from setSelectValueFromProperty(), getPropValue() refs #596 --- src/app/formulaire/elements/fieldset.ts | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 3637d892d..fb871cb36 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -205,7 +205,7 @@ export class FieldSet extends FormulaireElement implements IProperties { if (this.parentForm instanceof FormulaireFixedVar) { for (const sel of this.parentForm.allSelectFields) { if (sel.hasAssociatedNubProperty) { // ie. if select is a standard select - this.setSelectValueFromProperty(sel.id, (this._confId === "fs_section")); + this.setSelectValueFromProperty(sel.id); } } } @@ -213,12 +213,11 @@ export class FieldSet extends FormulaireElement implements IProperties { /** * Reflects a property value in the interface, through the value of a <select> field, if this select exists - * @param inSection if true, will look for the required property in the Nub's section (children[0]) */ - private setSelectValueFromProperty(selectId: string, inSection: boolean = false) { + private setSelectValueFromProperty(selectId: string) { const selectField: SelectField = this.getFormulaireNodeById(selectId) as SelectField; if (selectField) { - let propVal: any = this.getPropValue(selectField.associatedProperty, inSection); + let propVal: any = this.getPropValue(selectField.associatedProperty); if (propVal === undefined) { propVal = ""; // clodo bullet-proof loading } @@ -327,7 +326,7 @@ export class FieldSet extends FormulaireElement implements IProperties { if (senderId === "select_section") { // sections paramétrées, courbes de remous, régimes uniformes // "nodeType" is a property of the section child, not of the parent - const oldNodeType = this.nub.getChildren()[0].getPropValue("nodeType"); + const oldNodeType = this.getPropValue("nodeType"); if (oldNodeType !== data.value.value) { // avoid infinite loops // manually notify parent so that it replaces the child Nub @WARNING clodo trick this.parentForm.update(this, { @@ -379,16 +378,8 @@ export class FieldSet extends FormulaireElement implements IProperties { /** * get associated nub property value * @param key property name - * @param inSection if true, will look for the required property in the Nub's section (children[0]) */ - public getPropValue(key: string, inSection: boolean = false): any { - if (inSection) { - const section = this.nub.getChildren()[0]; - if (section) { - return section.getPropValue(key); - } - return undefined; - } + public getPropValue(key: string): any { return this.nub.getPropValue(key); } -- GitLab From d47b59c1e7371bd2914b87062c521484c4c1308a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 7 Feb 2023 16:51:47 +0100 Subject: [PATCH 134/285] feat: Stricker calculator: modify form when changing pressure loss law to Strickler refs #596 --- .../formulaire/definition/form-definition.ts | 2 +- .../definition/form-pressureloss.ts | 17 ++++++++- src/app/formulaire/elements/fieldset.ts | 36 +++++++++++++++---- 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index 146d1746a..9acb17e78 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -81,7 +81,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs return this._calculateDisabled; } - private getPropValue(key: string): any { + public getPropValue(key: string): any { if (this._currentNub === undefined) return this.defaultProperties[key]; return this._currentNub.getPropValue(key); diff --git a/src/app/formulaire/definition/form-pressureloss.ts b/src/app/formulaire/definition/form-pressureloss.ts index 4b1e7ceb4..6bf3e7b89 100644 --- a/src/app/formulaire/definition/form-pressureloss.ts +++ b/src/app/formulaire/definition/form-pressureloss.ts @@ -1,5 +1,6 @@ -import { PressureLoss, Props, PressureLossType, Session, PressureLossLaw, CalculatorType } from "jalhyd"; +import { PressureLoss, Props, PressureLossType, Session, PressureLossLaw, CalculatorType, IObservable } from "jalhyd"; import { FormulaireFixedVar } from "./form-fixedvar"; +import { FieldSet } from "../elements/fieldset"; /** * Formulaire pour la perte de charge @@ -32,4 +33,18 @@ export class FormulairePressureLoss extends FormulaireFixedVar { const pl: PressureLoss = this.currentNub as PressureLoss; pl.setLaw(law); } + + public update(sender: IObservable, data: any) { + // changement de propriété du FieldSet contenant le select de choix du type de perte de charge + if (sender instanceof FieldSet && sender.id === "fs_pressureloss_law" && data.action === "propertyChange") { + // replace underlying pressure loss law without replacing whole Nub + const newPLL = Session.getInstance().createPressureLossLaw(data.value); + (this._currentNub as PressureLoss).setLaw(newPLL); + // show / hide dependent fields + this.refreshFieldsets(); + this.reset(); + } + else + super.update(sender, data); + } } diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index fb871cb36..22cd5751f 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -107,11 +107,20 @@ export class FieldSet extends FormulaireElement implements IProperties { } private parse_select(json: {}): SelectField { - const res: SelectField = SelectFieldFactory.newSelectField(json, this); - res.parseConfig(json); - res.afterParseConfig(); - res.addObserver(this); - return res; + let ok: boolean = true; + // in case select is associated to a property, check nub has the property + const p: string = json["property"]; + if (p !== undefined) { + ok = this.parentForm.getPropValue(p) !== undefined; + } + if (ok) { + const res: SelectField = SelectFieldFactory.newSelectField(json, this); + res.parseConfig(json); + res.afterParseConfig(); + res.addObserver(this); + return res; + } + return undefined; } public addPropertiesObserver(o: Observer) { @@ -179,7 +188,9 @@ export class FieldSet extends FormulaireElement implements IProperties { case "select": param = this.parse_select(field); - this.addField(param); + if (param !== undefined) { + this.addField(param); + } break; } } @@ -335,6 +346,19 @@ export class FieldSet extends FormulaireElement implements IProperties { value: data.value.value }); } + } + else if (senderId === "select_pressurelosstype") { + // lois de perte de charge + // "pressureLossType" is a property of the child law, not of the parent + const oldLaw = this.nub.getPropValue("pressureLossType"); + if (oldLaw !== data.value.value) { // avoid infinite loops + // manually notify parent so that it replaces the child Nub @WARNING clodo trick + this.parentForm.update(this, { + action: "propertyChange", + name: "pressureLossType", + value: data.value.value + }); + } } else { if (data.value !== undefined) { if (this.parentForm instanceof FormulaireFixedVar) { -- GitLab From c2524ad357ff740ec8913d631e23b723fa65833f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 7 Feb 2023 16:52:57 +0100 Subject: [PATCH 135/285] feat: add Strickler locale refs #596 --- src/app/calculators/pressureloss/en.json | 1 + src/app/calculators/pressureloss/fr.json | 1 + src/locale/messages.en.json | 1 + src/locale/messages.fr.json | 3 ++- 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/calculators/pressureloss/en.json b/src/app/calculators/pressureloss/en.json index 614765523..238ce4911 100644 --- a/src/app/calculators/pressureloss/en.json +++ b/src/app/calculators/pressureloss/en.json @@ -27,6 +27,7 @@ "Jlin": "Linear head loss", "Klin": "Linear head loss coefficient", "fD": "Darcy friction factor", + "Ks": "Strickler coefficient", "UNIT_JLIN": "m", "UNIT_V": "m/s" diff --git a/src/app/calculators/pressureloss/fr.json b/src/app/calculators/pressureloss/fr.json index 1d92a6153..fd1bd9c2f 100644 --- a/src/app/calculators/pressureloss/fr.json +++ b/src/app/calculators/pressureloss/fr.json @@ -27,6 +27,7 @@ "Jlin": "Perte de charge linéaire", "Klin": "Coefficient de perte de charge linéaire", "fD": "Coefficient de perte de charge de Darcy", + "Ks": "Coefficient de Strickler", "UNIT_JLIN": "m", "UNIT_V": "m/s" diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 5130406b1..b7b836bd0 100755 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -234,6 +234,7 @@ "INFO_CHILD_TYPE_SECTION_PLUR": "sections", "INFO_CHILD_TYPE_SECTION_SHORT": "S", "INFO_CHILD_TYPE_LECHAPTCALMON": "Lechapt-Calmon", + "INFO_CHILD_TYPE_STRICKLER": "Strickler", "INFO_DIALOG_PARSIM_DESC": "Choose a combination of values to generate the simulation", "INFO_FIELDSET_ADD": "Add", "INFO_FIELDSET_COPY": "Copy", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index f487a29c0..1b2892173 100755 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -234,6 +234,7 @@ "INFO_CHILD_TYPE_SECTION_PLUR": "sections", "INFO_CHILD_TYPE_SECTION_SHORT": "S", "INFO_CHILD_TYPE_LECHAPTCALMON": "Lechapt-Calmon", + "INFO_CHILD_TYPE_STRICKLER": "Strickler", "INFO_DIALOG_PARSIM_DESC": "Choisir une combinaison de valeurs pour générer la simulation", "INFO_FIELDSET_ADD": "Ajouter", "INFO_FIELDSET_COPY": "Copier", @@ -773,4 +774,4 @@ "ERROR_VERIF_PAB_WALL_NOT_CROSSABLE": "La cloison n°%N% n'est pas franchissable", "ERROR_VERIF_PAB_DW_NOT_CROSSABLE": "La cloison aval n'est pas franchissable", "WARNING_VERIF_PAR_SPECIES_GROUP": "Les groupes d'espèces 3a, 3b et 7b sont déconseillés pour ce type de passe" -} \ No newline at end of file +} -- GitLab From d3fdbdff291afc339c6424a699a866edc48889dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 7 Feb 2023 19:06:46 +0100 Subject: [PATCH 136/285] refactor: remove PressureLossLaw.calcTypeFromPressureLossLaw refs #596 --- src/app/formulaire/definition/form-pressureloss.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/formulaire/definition/form-pressureloss.ts b/src/app/formulaire/definition/form-pressureloss.ts index 6bf3e7b89..f574114b1 100644 --- a/src/app/formulaire/definition/form-pressureloss.ts +++ b/src/app/formulaire/definition/form-pressureloss.ts @@ -27,8 +27,7 @@ export class FormulairePressureLoss extends FormulaireFixedVar { // create pressure loss law child nub const propsLaw: Props = new Props(); - const pressureLossCalc: CalculatorType = PressureLossLaw.calcTypeFromPressureLossLaw[pll]; - propsLaw.setPropValue("calcType", pressureLossCalc); + propsLaw.setPropValue("calcType", CalculatorType.PressureLossLaw); const law = Session.getInstance().createNub(propsLaw) as PressureLossLaw; const pl: PressureLoss = this.currentNub as PressureLoss; pl.setLaw(law); -- GitLab From f59c44e915915f852b503f69144015a4d0308a16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 7 Feb 2023 19:07:08 +0100 Subject: [PATCH 137/285] refactor(e2e): disable test on select value after session load refs #596 --- e2e/load-save-session.e2e-spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index eca2c5435..436058e6f 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -137,7 +137,7 @@ describe("ngHyd − save and load sessions", () => { expect(fileContent).toContain(`{"symbol":"Ks","mode":"SINGLE","value":42}`); }); - it("select value must be recovered when loading a session file", async () => { + xit("select value must be recovered when loading a session file", async () => { // start page await startPage.navigateTo(); await browser.sleep(200); -- GitLab From f109a6bb2a45b92da88702367b49518200617026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 8 Feb 2023 08:11:40 +0100 Subject: [PATCH 138/285] fix: Lechapt-Calmon: results not reset when changing material select value refs #596 --- src/app/formulaire/elements/fieldset.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 22cd5751f..c1678a93b 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -379,6 +379,7 @@ export class FieldSet extends FormulaireElement implements IProperties { } } } + this.parentForm.resetResults(); } } break; // switch (data.action) -- GitLab From 142576c48f34d0fbc059095abbdf40707ac8adb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 8 Feb 2023 08:48:07 +0100 Subject: [PATCH 139/285] fix: PressureLossLaw calculator displayed in "other calculation modules" refs #596 --- .../components/calculator-list/calculator-list.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/components/calculator-list/calculator-list.component.ts b/src/app/components/calculator-list/calculator-list.component.ts index b62c4f2e4..d69f071f8 100644 --- a/src/app/components/calculator-list/calculator-list.component.ts +++ b/src/app/components/calculator-list/calculator-list.component.ts @@ -121,7 +121,8 @@ export class CalculatorListComponent implements OnInit { CalculatorType.YAXN, CalculatorType.PbBassin, CalculatorType.PbCloison, - CalculatorType.LechaptCalmon + CalculatorType.LechaptCalmon, + CalculatorType.PressureLossLaw ].includes(t) ) { unusedTheme.calculators.push({ -- GitLab From 0d576f508e38b7725107c1e176f0b4854ebc793e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 8 Feb 2023 09:25:08 +0100 Subject: [PATCH 140/285] fix: pressure loss: Strickler coefficient not empty when empty fields flag is true refs #596 --- src/app/formulaire/definition/form-pressureloss.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/formulaire/definition/form-pressureloss.ts b/src/app/formulaire/definition/form-pressureloss.ts index f574114b1..26c862355 100644 --- a/src/app/formulaire/definition/form-pressureloss.ts +++ b/src/app/formulaire/definition/form-pressureloss.ts @@ -1,6 +1,7 @@ import { PressureLoss, Props, PressureLossType, Session, PressureLossLaw, CalculatorType, IObservable } from "jalhyd"; import { FormulaireFixedVar } from "./form-fixedvar"; import { FieldSet } from "../elements/fieldset"; +import { Prop_NullParameters } from "jalhyd"; /** * Formulaire pour la perte de charge @@ -27,6 +28,7 @@ export class FormulairePressureLoss extends FormulaireFixedVar { // create pressure loss law child nub const propsLaw: Props = new Props(); + propsLaw.setPropValue(Prop_NullParameters, props.getPropValue(Prop_NullParameters)); propsLaw.setPropValue("calcType", CalculatorType.PressureLossLaw); const law = Session.getInstance().createNub(propsLaw) as PressureLossLaw; const pl: PressureLoss = this.currentNub as PressureLoss; @@ -37,7 +39,7 @@ export class FormulairePressureLoss extends FormulaireFixedVar { // changement de propriété du FieldSet contenant le select de choix du type de perte de charge if (sender instanceof FieldSet && sender.id === "fs_pressureloss_law" && data.action === "propertyChange") { // replace underlying pressure loss law without replacing whole Nub - const newPLL = Session.getInstance().createPressureLossLaw(data.value); + const newPLL = Session.getInstance().createPressureLossLaw(data.value, undefined, this.currentNub.getPropValue(Prop_NullParameters)); (this._currentNub as PressureLoss).setLaw(newPLL); // show / hide dependent fields this.refreshFieldsets(); -- GitLab From 64cb819d0c4747c5818884f202192a3c1b76ea46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 11 Jan 2023 16:22:58 +0100 Subject: [PATCH 141/285] fix: (too) early modification of application version in Angular service worker configuration file refs #588 --- scripts/deploy-new-stable-version.sh | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/scripts/deploy-new-stable-version.sh b/scripts/deploy-new-stable-version.sh index 92733055e..14ae97da1 100755 --- a/scripts/deploy-new-stable-version.sh +++ b/scripts/deploy-new-stable-version.sh @@ -19,6 +19,9 @@ then exit 1 fi +# Angular service worker configuration file +NGSW_CONF=ngsw-config.json + # 0. changelog read -p "Avez-vous rempli jalhyd_branch, et les CHANGELOG de JaLHyd et NgHyd pour la version $VERSION ? (o/N) " -n 1 -r echo @@ -28,8 +31,8 @@ then exit 2 fi -if [[ ! -f ngsw-config.json ]]; then - echo "Fichier de configuration du service worker ngsw-config.json non trouvé" >&2 +if [[ ! -f $NGSW_CONF ]]; then + echo "Fichier de configuration du service worker $NGSW_CONF non trouvé" >&2 exit 1 fi @@ -73,11 +76,7 @@ git push --tags --force echo "BUILDING NGHYD" cd .. -# 2.1 service worker configuration (application version) - -sed -i "/\"version\": \"/s/\": \".*/\": \"$VERSION\"/" ngsw-config.json - -# 2.2 update Git repository +# 2.1 update Git repository git checkout master git pull --rebase npm install @@ -87,7 +86,7 @@ then git commit -a -m "verify dependencies (npm install) before deploying version $VERSION" fi -# 2.3 version in package.* +# 2.2 version in package.* npm version "$VERSION" --allow-same-version --git-tag-version=false if [ ! -z "$(git status --untracked-files=no --porcelain)" ] then @@ -95,6 +94,15 @@ then git commit -a -m "update package.* to version $VERSION" fi +# 2.3 service worker configuration (application version) +echo "updating version in Angular service worker configuration" >&2 +sed -i "/\"version\": \"/s/\": \".*/\": \"$VERSION\"/" $NGSW_CONF +# check +if [[ -z $(grep version $NGSW_CONF | grep $VERSION) ]]; then + echo "error updating version in service worker configuration file $NGSW_CONF" >&2 + exit 1 +fi + # 2.4 tags echo "setting tags to $VERSION version" git tag -fa stable -m "stable version" -- GitLab From 6123780ae968fd61a91d4f8f304c3252824950d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 8 Feb 2023 13:36:10 +0100 Subject: [PATCH 142/285] feat: generate ngsw-config.json from template and git describe output refs #588 --- .gitignore | 1 + ngsw-config.json => ngsw-config-template.json | 0 package.json | 7 ++--- scripts/deploy-new-stable-version.sh | 13 ++------- scripts/update-service-worker-config.sh | 27 +++++++++++++++++++ 5 files changed, 34 insertions(+), 14 deletions(-) rename ngsw-config.json => ngsw-config-template.json (100%) create mode 100755 scripts/update-service-worker-config.sh diff --git a/.gitignore b/.gitignore index 78a09cc0f..5bd2d8af3 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ # dependencies /node_modules /src/date_revision.ts +/ngsw-config.json # IDEs and editors /.idea diff --git a/ngsw-config.json b/ngsw-config-template.json similarity index 100% rename from ngsw-config.json rename to ngsw-config-template.json diff --git a/package.json b/package.json index 1a21cb21d..4624a5f6f 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "mkdocs": "bash scripts/prepare_mkdocs.sh; cd build; python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && cd .. && node scripts/mkdocs-postprocess.js", "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 scripts/mkdocs2pdf.py && node scripts/mkdocs2pdf-postprocess.js", "clean": "rm -rf build dist release src/date_revision.ts src/assets/docs", - "preprocess": "mkdir -p build; node scripts/preprocessors.js", + "preprocess": "mkdir -p build; node scripts/preprocessors.js; npm run service-worker-version", "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 0.0.0.0 --poll 5000", "build-no-pdf": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production", "build": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production && npm run mkdocs2pdf", @@ -32,8 +32,9 @@ "release-all": "node scripts/clean_release.js && npm run build-no-pdf && npm run update-dist-index-mimetypes && \"node_modules/.bin/electron-builder\" && \"node_modules/.bin/electron-builder\" --mac && \"node_modules/.bin/electron-builder\" --win", "compodoc": "node \"node_modules/@compodoc/compodoc/bin/index-cli.js\" -p src/tsconfig.app.json -s --language fr-FR -d compodoc-fr", "viz": "tsviz -recursive src/ nghyd_class_diagram.png", - "webapp-nocompile" : "\"node_modules/.bin/http-server\" dist", - "webapp" : "npm run build-no-pdf && npm run webapp-nocompile" + "webapp-nocompile": "\"node_modules/.bin/http-server\" dist", + "webapp": "npm run build-no-pdf && npm run webapp-nocompile", + "service-worker-version": "./scripts/update-service-worker-config.sh" }, "private": true, "dependencies": { diff --git a/scripts/deploy-new-stable-version.sh b/scripts/deploy-new-stable-version.sh index 14ae97da1..18a5f53fa 100755 --- a/scripts/deploy-new-stable-version.sh +++ b/scripts/deploy-new-stable-version.sh @@ -94,22 +94,13 @@ then git commit -a -m "update package.* to version $VERSION" fi -# 2.3 service worker configuration (application version) -echo "updating version in Angular service worker configuration" >&2 -sed -i "/\"version\": \"/s/\": \".*/\": \"$VERSION\"/" $NGSW_CONF -# check -if [[ -z $(grep version $NGSW_CONF | grep $VERSION) ]]; then - echo "error updating version in service worker configuration file $NGSW_CONF" >&2 - exit 1 -fi - -# 2.4 tags +# 2.3 tags echo "setting tags to $VERSION version" git tag -fa stable -m "stable version" sleep 1 git tag -fa "$VERSION" -m "release version $VERSION" -# 2.5 push code, push tags +# 2.4 push code, push tags git push git push --tags --force diff --git a/scripts/update-service-worker-config.sh b/scripts/update-service-worker-config.sh new file mode 100755 index 000000000..aebfee183 --- /dev/null +++ b/scripts/update-service-worker-config.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# update ngsw-config.json from template and "git describe" output + +# error on unset variables +set -o nounset + +# exit on error +set -o errexit + +# Angular service worker configuration file +NGSW_CONF=ngsw-config.json + +# Angular service worker configuration template +NGSW_CONF_TMPL=ngsw-config-template.json + +echo "updating version in Angular service worker configuration" >&2 + +VERSION=$(git describe) + +cp $NGSW_CONF_TMPL $NGSW_CONF + +sed -i "/\"version\": \"/s/\": \".*/\": \"$VERSION\"/" $NGSW_CONF +# check +if [[ -z $(grep version $NGSW_CONF | grep $VERSION) ]]; then + echo "error updating version in service worker configuration file $NGSW_CONF" >&2 + exit 1 +fi -- GitLab From 57308da5a042a8b4bb62e66a8007c633f52b269d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 12 Jan 2023 11:24:13 +0100 Subject: [PATCH 143/285] fix: manifest.webmanifest: set purpose to any to avoid Chrome warnings (DevTools/Application/Application/Manifest) refs #588 --- src/manifest.webmanifest | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/manifest.webmanifest b/src/manifest.webmanifest index 4d0eb5675..996eabf17 100644 --- a/src/manifest.webmanifest +++ b/src/manifest.webmanifest @@ -11,49 +11,49 @@ "src": "assets/icons/favicon-72x72.png", "sizes": "72x72", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { "src": "assets/icons/favicon-96x96.png", "sizes": "96x96", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { "src": "assets/icons/favicon-128x128.png", "sizes": "128x128", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { "src": "assets/icons/favicon-144x144.png", "sizes": "144x144", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { "src": "assets/icons/favicon-152x152.png", "sizes": "152x152", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { "src": "assets/icons/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { "src": "assets/icons/favicon-384x384.png", "sizes": "384x384", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" }, { "src": "assets/icons/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png", - "purpose": "maskable any" + "purpose": "any" } ] } -- GitLab From be480b6f474eef8c70e574ee8446637ff208418b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 8 Feb 2023 17:25:41 +0100 Subject: [PATCH 144/285] chore: deploy-version.sh: display remote base href refs #588 --- scripts/deploy-version.sh | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/scripts/deploy-version.sh b/scripts/deploy-version.sh index 4f05359f9..712c0ac12 100755 --- a/scripts/deploy-version.sh +++ b/scripts/deploy-version.sh @@ -15,11 +15,29 @@ LOGIN="$2" HOST="$3" DIR="$4" +LOCAL_DIR=dist + +function display_local_href() +{ + echo "base href in local index.html :" + grep "\<base" $LOCAL_DIR/index.html +} + +function display_remote_href() +{ + local dir=$1 + echo "base href in deployed index.html (host=$HOST) :" + ssh $LOGIN@$HOST "grep \<base $dir/index.html" +} + echo "$(basename $0): deploying version $VERSION in $LOGIN@$HOST:$DIR" if [[ $VERSION == "prod" || $VERSION == "prod-devel" ]]; then + display_local_href + # Copie de la branche production rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" dist/ ${LOGIN}@${HOST}:${DIR}/ + # Modification du dossier base href echo "updating index.html" if [[ $VERSION == "prod" ]]; then @@ -27,7 +45,14 @@ if [[ $VERSION == "prod" || $VERSION == "prod-devel" ]]; then else ssh $LOGIN@$HOST "sed -i 's:/cassiopee/devel/:/:g' $DIR/index.html" fi + + display_remote_href $DIR else + echo "NOT updating index.html" + display_local_href + # Copie de la branche / du tag - rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" "dist/" "$LOGIN@$HOST:$DIR/$VERSION" + rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" "$LOCAL_DIR/" "$LOGIN@$HOST:$DIR/$VERSION" + + display_remote_href $DIR/$VERSION fi -- GitLab From 20b3a1c354a5cb7001ab7022bdb2521839202d08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 9 Feb 2023 08:45:42 +0100 Subject: [PATCH 145/285] fix(chore): wrong base href in deployed dev versions refs #588 --- .gitlab-ci.yml | 2 +- scripts/deploy-version.sh | 21 ++++++++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0ff5191b9..ed146e000 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -91,7 +91,7 @@ build: paths: - dist/ script: - - npm run build -- --base-href=/cassiopee/$CI_COMMIT_REF_NAME/ + - npm run build clean-stale-branches: stage: clean-stale-branches diff --git a/scripts/deploy-version.sh b/scripts/deploy-version.sh index 712c0ac12..4221e281b 100755 --- a/scripts/deploy-version.sh +++ b/scripts/deploy-version.sh @@ -35,24 +35,23 @@ echo "$(basename $0): deploying version $VERSION in $LOGIN@$HOST:$DIR" if [[ $VERSION == "prod" || $VERSION == "prod-devel" ]]; then display_local_href - # Copie de la branche production - rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" dist/ ${LOGIN}@${HOST}:${DIR}/ + # Modification du dossier base href -> / + echo "updating index.html base href to /" + sed -i '/<base/s/href="[^"]*"/href="\/"/' $LOCAL_DIR/index.html - # Modification du dossier base href - echo "updating index.html" - if [[ $VERSION == "prod" ]]; then - ssh $LOGIN@$HOST "sed -i 's:/cassiopee/stable/:/:g' $DIR/index.html" - else - ssh $LOGIN@$HOST "sed -i 's:/cassiopee/devel/:/:g' $DIR/index.html" - fi + # Copie de la branche production + rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" $LOCAL_DIR/ ${LOGIN}@${HOST}:${DIR}/ display_remote_href $DIR else - echo "NOT updating index.html" display_local_href + # Modification du dossier base href -> /cassiopee/version/ + echo "updating index.html base href to /cassiopee/$VERSION/" + sed -i "/<base/s/href=\"[^\"]*\"/href=\"\/cassiopee\/$VERSION\/\"/" $LOCAL_DIR/index.html + # Copie de la branche / du tag - rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" "$LOCAL_DIR/" "$LOGIN@$HOST:$DIR/$VERSION" + rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" $LOCAL_DIR/ "$LOGIN@$HOST:$DIR/$VERSION" display_remote_href $DIR/$VERSION fi -- GitLab From a499550b219a7bea266045023c5f8822302546c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 9 Feb 2023 15:43:37 +0100 Subject: [PATCH 146/285] fix: HTTP not redirected to HTTPS refs #587 --- src/.htaccess | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/.htaccess b/src/.htaccess index 34b87a8bc..6a66c8cec 100644 --- a/src/.htaccess +++ b/src/.htaccess @@ -1,3 +1,14 @@ +<IfModule mod_rewrite.c> + # SSL Redirect + + # enable Rewrite capabilities + RewriteEngine On + # check the connection is not already HTTPS + RewriteCond %{HTTPS} off + # rewrite URL with https + RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +</IfModule> + <filesMatch "\.json$"> FileETag None <ifModule mod_headers.c> -- GitLab From 8311a05c9c6736aec7eaf109516a8c8179a5b550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 9 Feb 2023 16:29:53 +0100 Subject: [PATCH 147/285] fix: error message in browser console about pressure loss law config file refs #596 --- src/app/services/internationalisation.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/services/internationalisation.service.ts b/src/app/services/internationalisation.service.ts index ba7e4cf84..ea1bec8c3 100644 --- a/src/app/services/internationalisation.service.ts +++ b/src/app/services/internationalisation.service.ts @@ -63,7 +63,7 @@ export class I18nService extends Observable implements Observer { /** excluded calculators */ const childCalculatorType: CalculatorType[] = [ CalculatorType.Section, CalculatorType.Structure, CalculatorType.CloisonAval, CalculatorType.YAXN, - CalculatorType.LechaptCalmon + CalculatorType.LechaptCalmon, CalculatorType.PressureLossLaw ]; // ensure 2-letter language code -- GitLab From 338f1c6faf5737c84e3e75fd3ee90e98eee9d2da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 10 Feb 2023 13:40:00 +0100 Subject: [PATCH 148/285] fix: add pressure loss calculator documentation refs #597 --- .../hyd_en_charge/lechapt-calmon.md | 39 ++----------------- .../hyd_en_charge/perte_de_charge.md | 33 ++++++++++++++++ .../fr/calculators/hyd_en_charge/strickler.md | 11 ++++++ src/app/calculators/pressureloss/config.json | 7 +++- 4 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 docs/fr/calculators/hyd_en_charge/perte_de_charge.md create mode 100644 docs/fr/calculators/hyd_en_charge/strickler.md diff --git a/docs/fr/calculators/hyd_en_charge/lechapt-calmon.md b/docs/fr/calculators/hyd_en_charge/lechapt-calmon.md index 6001e5572..2cfcad148 100644 --- a/docs/fr/calculators/hyd_en_charge/lechapt-calmon.md +++ b/docs/fr/calculators/hyd_en_charge/lechapt-calmon.md @@ -1,26 +1,12 @@ -# Lechapt et Calmon - -Ce module permet de calculer les pertes de charge dans une conduite circulaire à partir des abaques de Lechapt et Calmon. - -Il permet le calcul de la valeur d'une des grandeurs suivantes : - -- Débit (m<sup>3</sup>/s) -- Diamètre du tuyau (m) -- Perte de charge totale (m) -- Longueur du tuyau (m) -- Coefficient de perte de charge singulière (m) - -La perte de charge totale est la somme des pertes de charges linéaires \(J_L\) obtenue à partir des abaques de Lechapt et Calmon et singulières \(J_S\) dépendantes du coefficient ci-dessus. - -## Formule de Lechapt et Calmon +# Formule de Lechapt et Calmon La formule de Lechapt et Calmon est basée sur des ajustements de la formule de [Cyril Frank Colebrook](http://fr.wikipedia.org/wiki/Cyril_Frank_Colebrook) : -$$J_L=\frac{l_T}{1000}L.Q^M.D^{-N}$$ +$$J_{lin}=\frac{l_T}{1000}L.Q^M.D^{-N}$$ Avec : -- \(J_L\) : la perte de charge linéaire en m ; +- \(J_{lin}\) : la perte de charge linéaire en m ; - \(l_T\) : la longueur du tuyau en m ; - \(Q\) : le débit en L/s ; - \(D\) : le diamètre de la conduite en m ; @@ -43,21 +29,4 @@ Le tableau de correspondance des coefficients est le suivant : | Tuyau hydrauliquement lisse - 0.05 ≤ D ≤ 0.2 | 0.00 | 0.916 | 1.78 | 4.78 | | Tuyau hydrauliquement lisse - 0.25 ≤ D ≤ 1 | 0.00 | 0.971 | 1.81 | 4.81 | -Table: Matériaux et coefficients utilisés dans la formule de Lechapt et Calmon - -## Perte de charge singulière - -$$ J_S = K_S \frac{V^2}{2g}$$ - -Avec : - -- \(K_S\) : le coefficient de perte de charge singulière -- \(V\) : la vitesse de l'eau dans la conduite (\(V = 4 Q / \pi / D^2\)) - -## Coefficient de perte de charge linéaire - -$$ K_L = \frac{2g J_L}{V^2} $$ - -## Coefficient de perte de charge de Darcy - -$$ f_D = \frac{2g J D}{l_T V^2} $$ +Table : Matériaux et coefficients utilisés dans la formule de Lechapt et Calmon diff --git a/docs/fr/calculators/hyd_en_charge/perte_de_charge.md b/docs/fr/calculators/hyd_en_charge/perte_de_charge.md new file mode 100644 index 000000000..955d4a1b2 --- /dev/null +++ b/docs/fr/calculators/hyd_en_charge/perte_de_charge.md @@ -0,0 +1,33 @@ +# Perte de charge + +Ce module permet de calculer les pertes de charge dans une conduite circulaire à partir des lois suivantes donnant les pertes de charge linéaires : + +- Lechapt et Calmon +- Strickler + +Il permet le calcul de la valeur d'une des grandeurs suivantes : + +- Débit (m<sup>3</sup>/s) +- Diamètre du tuyau (m) +- Perte de charge totale (m) +- Longueur du tuyau (m) +- Coefficient de perte de charge locale (singulière) (m) + +La perte de charge totale est la somme des pertes de charges linéaires \(J_{lin}\) (données par la loi utilisée) et locales \(J_{loc}\) dépendantes du coefficient ci-dessus. + +## Perte de charge locale + +$$ J_{loc} = K_{loc} \frac{V^2}{2g}$$ + +Avec : + +- \(K_{loc}\) : le coefficient de perte de charge locale +- \(V\) : la vitesse de l'eau dans la conduite (\(V = 4 Q / \pi / D^2\)) + +## Coefficient de perte de charge linéaire + +$$ K_{lin} = \frac{2g J_{lin}}{V^2} $$ + +## Coefficient de perte de charge de Darcy + +$$ f_D = \frac{2g J D}{l_T V^2} $$ diff --git a/docs/fr/calculators/hyd_en_charge/strickler.md b/docs/fr/calculators/hyd_en_charge/strickler.md new file mode 100644 index 000000000..7f3931296 --- /dev/null +++ b/docs/fr/calculators/hyd_en_charge/strickler.md @@ -0,0 +1,11 @@ +# Formule de Strickler + +Cette loi de perte de charge linéaire est paramétrée par le coefficient de Stricker \(K_S\). + +Les autres paramètres sont ceux communs à tous les calculs de perte de charge : + +- \(Q\) : débit (m<sup>3</sup>/s) +- \(D\) : diamètre du tuyau (m) +- \(l_T\) : Longueur du tuyau (m) + +$$J_L=\frac{l_T.Q^2}{(K_S.\pi.D^2/4)^2.(D/4)^{4/3}}$$ diff --git a/src/app/calculators/pressureloss/config.json b/src/app/calculators/pressureloss/config.json index c02581572..c4bbbd561 100644 --- a/src/app/calculators/pressureloss/config.json +++ b/src/app/calculators/pressureloss/config.json @@ -9,7 +9,8 @@ "property": "pressureLossType", "default": "LechaptCalmon", "help": { - "0": "hyd_en_charge/lechapt-calmon.html" + "0": "hyd_en_charge/lechapt-calmon.html", + "1": "hyd_en_charge/strickler.html" } }, { @@ -34,5 +35,9 @@ "Lg", "Kloc" ] + }, + { + "type": "options", + "help": "hyd_en_charge/perte_de_charge.html" } ] -- GitLab From d0da2a57e9ab21623f2feb06506e0ac8c7f29ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 10 Feb 2023 16:26:11 +0100 Subject: [PATCH 149/285] test(e2e): check that a parameter targeted by a link cannot link to another parameter refs #605 --- e2e/calculate-linked-params.e2e-spec.ts | 40 +++++++++++++++++++++++++ e2e/calculator.po.ts | 8 +++++ 2 files changed, 48 insertions(+) diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index 56f8dd05f..12e68d423 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -304,4 +304,44 @@ describe("ngHyd − calculate with linked parameters", () => { expect(Number(volume)).toBeCloseTo(44.565, 3); }); + it(" − a link target parameter should not be able to link to another parameter", async () => { + debugger + // create 1st PAB-Chute + await navBar.clickNewCalculatorButton(); + await browser.sleep(200); + await listPage.clickMenuEntryForCalcType(12); + await browser.sleep(200); + + // upstream water level should not have link mode (only one calculator) + const Z1_1 = calcPage.getInputById("Z1"); + expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(false); + + // create 2nd PAB-Chute + await navBar.clickNewCalculatorButton(); + await browser.sleep(200); + await listPage.clickMenuEntryForCalcType(12); + await browser.sleep(200); + + // back to 1st calculator + await navBar.clickCalculatorTab(0); + await browser.sleep(200); + + // upstream water level should have link mode (now there are 2 calculators) + expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(true); + + // back to 2nd calculator + await navBar.clickCalculatorTab(1); + await browser.sleep(200); + + // link upstream water level in 2nd calculator to upstream water level in 1st one + const Z1_2 = calcPage.getInputById("Z1"); + await calcPage.setParamMode(Z1_2, "link"); + + // back to 1st calculator + await navBar.clickCalculatorTab(0); + await browser.sleep(200); + + // upstream water level should not have link mode (already a link target) + expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(false); + }); }); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index ed78fc4e2..af1e1803c 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -184,6 +184,14 @@ export class CalculatorPage { return await button.isPresent(); } + async inputHasLinkModeButton(input: ElementFinder) { + // get parent (div.container) + const container = await this.findParentContainer(input); + // find radio buttons + const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_link > button")); + return await button.isPresent(); + } + /** * @returns true if "fixed mode" button linked to an input is selected */ -- GitLab From b2ca09078a680b5cfcb0158854c30405311bd1b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 10 Feb 2023 17:19:52 +0100 Subject: [PATCH 150/285] update jalhyd_branch to 341-un-parametre-cible-d-un-lien-ne-doit-pas-se-lier-a-un-autre-parametre refs #605 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index 0bd0de843..af02f54ce 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -334-restructurer-lechapt-et-calmon-pour-de-nouvelles-lois-de-pertes-de-charge +341-un-parametre-cible-d-un-lien-ne-doit-pas-se-lier-a-un-autre-parametre -- GitLab From 1a57009870ba194bf69e6873942da098a3d968de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 10 Feb 2023 17:20:10 +0100 Subject: [PATCH 151/285] fix: disable link radio button for a parameter which is a link target refs #605 --- .../param-field-line.component.html | 1 + .../param-field-line.component.ts | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/app/components/param-field-line/param-field-line.component.html b/src/app/components/param-field-line/param-field-line.component.html index 641d9c4b0..6cc879f86 100644 --- a/src/app/components/param-field-line/param-field-line.component.html +++ b/src/app/components/param-field-line/param-field-line.component.html @@ -41,6 +41,7 @@ <span fxHide.gt-xxs>C</span> </mat-button-toggle> + <!-- (click)="onRadioClick('link')" [checked]="isRadioLinkChecked" [disabled]="isRadioLinkDisabled"> --> <mat-button-toggle class="radio_link" value="radio_link" *ngIf="hasRadioLink()" (click)="onRadioClick('link')" [checked]="isRadioLinkChecked" [disabled]="! canExitCalcMode()"> <span fxHide.xxs>{{ uitextParamLie }}</span> diff --git a/src/app/components/param-field-line/param-field-line.component.ts b/src/app/components/param-field-line/param-field-line.component.ts index a64528e1f..2dbe5a333 100644 --- a/src/app/components/param-field-line/param-field-line.component.ts +++ b/src/app/components/param-field-line/param-field-line.component.ts @@ -4,7 +4,7 @@ import { I18nService } from "../../services/internationalisation.service"; import { NgParameter, ParamRadioConfig } from "../../formulaire/elements/ngparam"; import { NgParamInputComponent } from "../ngparam-input/ngparam-input.component"; import { ServiceFactory } from "../../services/service-factory"; -import { ParamValueMode, ParallelStructure, ParamCalculability, Pab } from "jalhyd"; +import { ParamValueMode, ParallelStructure, ParamCalculability, Pab, Session } from "jalhyd"; import { FormulaireService } from "../../services/formulaire.service"; import { ParamLinkComponent } from "../param-link/param-link.component"; import { ParamValuesComponent } from "../param-values/param-values.component"; @@ -192,7 +192,7 @@ export class ParamFieldLineComponent implements OnChanges { * calcule la présence du radio "paramètre lié" (importé d'un autre module de calcul) */ public hasRadioLink(): boolean { - if (this._formService.formulaires.length > 0) { + if (this._formService.formulaires.length > 0 && !this.isParameterLinkTarget()) { // au moins 2 modules de calcul ouverts if (this._formService.formulaires.length > 1) { return this._formService.getLinkableValues(this.param).length > 0; @@ -254,6 +254,20 @@ export class ParamFieldLineComponent implements OnChanges { return false; } + /** + * @returns true if parameter is a link target + */ + private isParameterLinkTarget(): boolean { + return Session.getInstance().isParameterLinkTarget(this.param.paramDefinition); + } + + /** + * compute link radio button "disabled" status + */ + public get isRadioLinkDisabled(): boolean { + return !this.canExitCalcMode() || this.isParameterLinkTarget(); + } + public get radioCalTitle(): string { if (this.isRadioCalDisabled) { return this.intlService.localizeText("INFO_PARAMFIELD_CANNOT_CALC_LINKS_LOOP"); -- GitLab From 9e25a9484687638cc7fdd1622e0db496023fcf5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 13 Feb 2023 17:07:37 +0100 Subject: [PATCH 152/285] test(e2e): check solver empty fields in various cases refs #601 --- e2e/calculator.po.ts | 10 +- e2e/preferences.po.ts | 17 ++++ e2e/solveur.e2e-spec.ts | 200 ++++++++++++++++++++++++++++++++++++++-- 3 files changed, 219 insertions(+), 8 deletions(-) diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index af1e1803c..45b3aa06a 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -421,11 +421,17 @@ export class CalculatorPage { /** * check that an input is empty * @param id input id (parameter name) + * @param empty true to check input is empty, false to check it is NOT empty */ - async checkEmptyInput(id: string) { + async checkEmptyInput(id: string, empty: boolean = true) { const inp = this.getInputById(id); const val = await inp.getAttribute("value"); - expect(val).toEqual(""); + if (empty) { + expect(val).toEqual(""); + } + else { + expect(val).not.toEqual(""); + } } /** diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 264ebb84f..678f07954 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -65,6 +65,23 @@ export class PreferencesPage { } } + /** + * enable/disable option "empty fields on module creation" + * @param b true to enable "empty fields on module creation" option, false to disable it (fill fields with default values) + */ + async setEmptyFields(b: boolean) { + await this.navigateTo(); + await browser.sleep(200); + + if (b) { + await this.enableEvilEmptyFields(); + } + else { + await this.disableEvilEmptyFields(); + } + await browser.sleep(200); + } + async setIterationCount(n: number) { const input = this.getInputFromName("nmi"); input.clear(); diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 89ca70d6e..281aeec5a 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -11,7 +11,6 @@ import { scrollPageToTop } from "./util.po"; * Clone calculators */ describe("Solveur - ", () => { - let startPage: AppPage; let listPage: ListPage; let calcPage: CalculatorPage; let navbar: Navbar; @@ -19,7 +18,6 @@ describe("Solveur - ", () => { let prefPage: PreferencesPage; beforeAll(async () => { - startPage = new AppPage(); prefPage = new PreferencesPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); @@ -28,10 +26,8 @@ describe("Solveur - ", () => { }); beforeEach(async () => { - await prefPage.navigateTo(); // disable evil option "empty fields on module creation" - await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await prefPage.setEmptyFields(false); // force language to prevent issues due to default browser language await prefPage.changeLanguage(1); // fr await browser.sleep(200); @@ -171,7 +167,7 @@ describe("Solveur - ", () => { // check "search parameter" value has not changed expect(await calcPage.getSelectValueText(sel)).toEqual(selText); }); - + it("check solver searched parameter is set to 'bottom slope'", async () => { // open "canal critical slope" example const examples = await element.all(by.css("#examples-list .load-example")); @@ -188,3 +184,195 @@ describe("Solveur - ", () => { expect(selText).toEqual("If - Pente du fond (Sec. param.)"); }); }); + +/** + * solver with empty fields option + */ +describe("Solveur - nghyd#601 with empty fields option", () => { + let prefPage: PreferencesPage; + let navBar: Navbar; + let listPage: ListPage; + let calcPage: CalculatorPage; + + beforeAll(async () => { + prefPage = new PreferencesPage(); + navBar = new Navbar(); + listPage = new ListPage(); + calcPage = new CalculatorPage(); + }); + + async function openCalculator(id: number) { + await navBar.clickNewCalculatorButton(); + await browser.sleep(200); + + await listPage.clickMenuEntryForCalcType(id); + await browser.sleep(200); + } + + async function openSolver() { + await openCalculator(22); + } + + beforeEach(async () => { + // enable evil option "empty fields on module creation" + await prefPage.setEmptyFields(true); + }); + + it("check solver with empty fields option does not fill inputs - solver alone", async () => { + // open new solver calculator + await openSolver(); + + // check inputs are empty + await calcPage.checkEmptyInput("Ytarget"); + await browser.sleep(200); + + await calcPage.checkEmptyInput("Xinit"); + await browser.sleep(200); + }); + + it("check solver with empty fields option does not fill target parameter input", async () => { + // open "parallel structures" calculator + await openCalculator(8); + + // open second "parallel structures" calculator + await openCalculator(8); + + // link Q to first calculator's + const inpQ = calcPage.getInputById("Q"); + await calcPage.setParamMode(inpQ, "link"); + await browser.sleep(200); + + // open new solver calculator + await openSolver(); + + // check target parameter input is empty + await calcPage.checkEmptyInput("Ytarget"); + await browser.sleep(200); + + // check initial value input is not empty + await calcPage.checkEmptyInput("Xinit"); + await browser.sleep(200); + }); + + it("check removing and recreating solver with empty fields option does not fill target parameter input", async () => { + await navBar.clickNewCalculatorButton(); + await browser.sleep(200); + + // open "channel flow with hydraulic structures" example + const examples = await element.all(by.css("#examples-list .load-example")); + await examples[1].click(); + await browser.sleep(500); + + // close existing "solver" calculator + await navBar.middleClickCalculatorTab(3); + await browser.sleep(500); + + // open new solver calculator + await openSolver(); + + // check target parameter input is empty + await calcPage.checkEmptyInput("Ytarget"); + await browser.sleep(200); + + // check initial value input is not empty + await calcPage.checkEmptyInput("Xinit", false); + await browser.sleep(200); + }); +}); + +/** + * solver without empty fields option + */ +describe("Solveur - nghyd#601 without empty fields option", () => { + let prefPage: PreferencesPage; + let navBar: Navbar; + let listPage: ListPage; + let calcPage: CalculatorPage; + + beforeAll(async () => { + prefPage = new PreferencesPage(); + navBar = new Navbar(); + listPage = new ListPage(); + calcPage = new CalculatorPage(); + }); + + async function openCalculator(id: number) { + await navBar.clickNewCalculatorButton(); + await browser.sleep(200); + + await listPage.clickMenuEntryForCalcType(id); + await browser.sleep(200); + } + + async function openSolver() { + await openCalculator(22); + } + + beforeEach(async () => { + await browser.manage().window().setPosition(2000, 30); + + // disable evil option "empty fields on module creation" + await prefPage.setEmptyFields(false); + }); + + it("check solver without empty fields option does not fill inputs - solver alone", async () => { + // open new solver calculator + await openSolver(); + + // check inputs are empty + await calcPage.checkEmptyInput("Ytarget"); + await browser.sleep(200); + + await calcPage.checkEmptyInput("Xinit"); + await browser.sleep(200); + }); + + it("check solver without empty fields option fills inputs", async () => { + // open "parallel structures" calculator + await openCalculator(8); + + // open second "parallel structures" calculator + await openCalculator(8); + + // link Q to first calculator's + const inpQ = calcPage.getInputById("Q"); + await calcPage.setParamMode(inpQ, "link"); + await browser.sleep(200); + + // open new solver calculator + await openSolver(); + + // check target parameter input is not empty + await calcPage.checkEmptyInput("Ytarget", false); + await browser.sleep(200); + + // check initial value input is not empty + await calcPage.checkEmptyInput("Xinit", false); + await browser.sleep(200); + }); + + it("check removing and recreating solver without empty fields option fills inputs", async () => { + await navBar.clickNewCalculatorButton(); + await browser.sleep(200); + + // open "channel flow with hydraulic structures" example + const examples = await element.all(by.css("#examples-list .load-example")); + await examples[1].click(); + await browser.sleep(500); + + // close existing "solver" calculator + await navBar.middleClickCalculatorTab(3); + await browser.sleep(500); + + // open new solver calculator + await openSolver(); + + // check target parameter input is not empty + await calcPage.checkEmptyInput("Ytarget", false); + await browser.sleep(200); + + // check initial value input is not empty + await calcPage.checkEmptyInput("Xinit", false); + await browser.sleep(200); + }); +}); -- GitLab From 884d8d3c9a816f7eadab445c13621ef82053ffc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 14 Feb 2023 10:11:46 +0100 Subject: [PATCH 153/285] refactor: unused code in FormulaireSolveur.update() refs #601 --- src/app/formulaire/definition/form-solveur.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/app/formulaire/definition/form-solveur.ts b/src/app/formulaire/definition/form-solveur.ts index 0a3d446ef..0e3e8db93 100644 --- a/src/app/formulaire/definition/form-solveur.ts +++ b/src/app/formulaire/definition/form-solveur.ts @@ -47,11 +47,10 @@ export class FormulaireSolveur extends FormulaireFixedVar { } } // copied from FormFixedVar, to avoid calling super.update() - if (data.action === "propertyChange") { + else if (data.action === "propertyChange") { this.reset(); } - - if (sender instanceof SelectField) { + else if (sender instanceof SelectField) { if (sender.id === "select_target_nub" && data.action === "select") { // update Solveur property: Nub to calculate try { @@ -81,9 +80,7 @@ export class FormulaireSolveur extends FormulaireFixedVar { // reflect changes in GUI const inputXinit = this.getFormulaireNodeById("Xinit") as NgParameter; inputXinit.notifyValueModified(this); - } - } else if (sender instanceof SelectField) { - if (sender.id === this._targettedResultSelectId) { + } else if (sender.id === this._targettedResultSelectId) { // refresh parameters selector this.refreshParameterEntries(); } -- GitLab From fa7fd1b614e3f429f4c13abebb06cfd22727d1f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 14 Feb 2023 12:45:40 +0100 Subject: [PATCH 154/285] feat: solver: set Ytarget to undefined if "empty fields" option is set refs #601 --- .../calculator.component.ts | 1 + .../formulaire/definition/form-definition.ts | 13 +++++++++++++ src/app/formulaire/definition/form-solveur.ts | 19 ++++++++++++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 49e81d946..48997ffc9 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -412,6 +412,7 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe */ protected afterFirstViewChecked() { this.updateUIValidity(); + this.formulaire.setFirstDisplayCompleted(); } public onCloseForm() { diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index 9acb17e78..740e50d8f 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -62,6 +62,11 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs */ protected _calcResults: CalculatorResults[]; + /** + * Flag indiquant que le composant calculette est proche de la fin du 1er affichage (1er appel à AfterViewChecked) + */ + private _firstDisplay: boolean = true; + constructor(parent?: FormulaireNode) { super(parent); SessionSettings.instance.addObserver(this); @@ -81,6 +86,14 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs return this._calculateDisabled; } + public get isFirstDisplay(): boolean { + return this._firstDisplay; + } + + public setFirstDisplayCompleted() { + this._firstDisplay = false; + } + public getPropValue(key: string): any { if (this._currentNub === undefined) return this.defaultProperties[key]; diff --git a/src/app/formulaire/definition/form-solveur.ts b/src/app/formulaire/definition/form-solveur.ts index 0e3e8db93..cf2807a7f 100644 --- a/src/app/formulaire/definition/form-solveur.ts +++ b/src/app/formulaire/definition/form-solveur.ts @@ -1,9 +1,10 @@ -import { IObservable, ParamDefinition, Nub } from "jalhyd"; +import { IObservable, ParamDefinition, Nub, Props, Solveur } from "jalhyd"; import { NgParameter } from "../elements/ngparam"; import { FormulaireFixedVar } from "./form-fixedvar"; import { SelectField } from "../elements/select/select-field"; import { FieldSet } from "../elements/fieldset"; +import { ServiceFactory } from "app/services/service-factory"; /** * Formulaire pour les Solveurs @@ -34,6 +35,16 @@ export class FormulaireSolveur extends FormulaireFixedVar { } } + public initNub(props?: Props) { + super.initNub(props); + + // subscribe to Ytarget to be able to reset it during form construction (with empty fields option set) + // cf. nghyd#601 + + const n: Solveur = this._currentNub as Solveur; + n.prms.Ytarget.addObserver(this); + } + // interface Observer public update(sender: IObservable, data: any) { @@ -84,6 +95,12 @@ export class FormulaireSolveur extends FormulaireFixedVar { // refresh parameters selector this.refreshParameterEntries(); } + } else if (sender instanceof ParamDefinition) { + if (data.action === "paramdefinitionAfterValue" && sender.symbol === "Ytarget") { + if (this.isFirstDisplay && ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit) { + sender.setValue(undefined); + } + } } } -- GitLab From 089260924ee35678e05519ee60a12b7099c76a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 15 Feb 2023 09:12:24 +0100 Subject: [PATCH 155/285] refactor(e2e): add changeSelectValue() as a util function refs #586 --- e2e/calculate-linked-params.e2e-spec.ts | 13 +++++++------ e2e/calculator.po.ts | 7 ------- e2e/cloisons.e2e-spec.ts | 3 ++- e2e/clone-calc.e2e-spec.ts | 6 +++--- e2e/examples-empty-fields.e2e-spec.ts | 3 ++- e2e/lechapt-calmon.e2e-spec.ts | 5 +++-- e2e/linked-parameter-section-type.e2e-spec.ts | 3 ++- e2e/load-save-session.e2e-spec.ts | 6 +++--- e2e/ouvrages-empty-fields.e2e-spec.ts | 11 ++++++----- e2e/pab.e2e-spec.ts | 4 ++-- e2e/preferences.po.ts | 6 ++---- e2e/pressure-loss-empty-fields.e2e-spec.ts | 3 ++- e2e/remous.e2e-spec.ts | 3 ++- e2e/solveur.e2e-spec.ts | 10 +++++----- e2e/util.po.ts | 10 +++++++++- 15 files changed, 50 insertions(+), 43 deletions(-) diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index 12e68d423..7c54f5af4 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -5,6 +5,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { browser, by } from "protractor"; import { PreferencesPage } from "./preferences.po"; +import { changeSelectValue } from "./util.po"; /** * Uses an example configuration to calculate : @@ -62,7 +63,7 @@ describe("ngHyd − calculate with linked parameters", () => { const Y = calcPage.getInputById("Y"); await calcPage.setParamMode(Y, "link"); const sel = await calcPage.getLinkedValueSelect(Y); - await calcPage.changeSelectValue(sel, 0); + await changeSelectValue(sel, 0); await computeAndCheckPresenceOfResults(); }); @@ -79,7 +80,7 @@ describe("ngHyd − calculate with linked parameters", () => { const Y = calcPage.getInputById("Y"); await calcPage.setParamMode(Y, "link"); const sel = await calcPage.getLinkedValueSelect(Y); - await calcPage.changeSelectValue(sel, 0); + await changeSelectValue(sel, 0); // vary W const W = calcPage.getInputById("W"); await calcPage.setParamMode(W, "var"); @@ -102,7 +103,7 @@ describe("ngHyd − calculate with linked parameters", () => { const Y2 = calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); - await calcPage.changeSelectValue(sel, 0); + await changeSelectValue(sel, 0); await computeAndCheckPresenceOfResults(); }); @@ -122,7 +123,7 @@ describe("ngHyd − calculate with linked parameters", () => { const Y2 = calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); - await calcPage.changeSelectValue(sel, 0); + await changeSelectValue(sel, 0); await computeAndCheckPresenceOfResults(); }); @@ -142,7 +143,7 @@ describe("ngHyd − calculate with linked parameters", () => { const Y2 = calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); - await calcPage.changeSelectValue(sel, 0); + await changeSelectValue(sel, 0); // vary W const W = calcPage.getInputById("W"); await calcPage.setParamMode(W, "var"); @@ -168,7 +169,7 @@ describe("ngHyd − calculate with linked parameters", () => { const Y2 = calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); - await calcPage.changeSelectValue(sel, 0); + await changeSelectValue(sel, 0); await computeAndCheckPresenceOfResults(); }); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index af1e1803c..12c5a8de4 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -331,13 +331,6 @@ export class CalculatorPage { return calcButton; } - async changeSelectValue(elt: ElementFinder, index: number) { - await elt.click(); - const optionId = ".cdk-overlay-container mat-option:nth-of-type(" + (index + 1) + ")"; - const option = element(by.css(optionId)); - await option.click(); - } - // find parent element of elt having class "container" async findParentContainer(elt: ElementFinder): Promise<ElementFinder> { let i = 8; // garde fous diff --git a/e2e/cloisons.e2e-spec.ts b/e2e/cloisons.e2e-spec.ts index 2febdc57e..f251afabc 100644 --- a/e2e/cloisons.e2e-spec.ts +++ b/e2e/cloisons.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { browser } from "protractor"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { changeSelectValue } from "./util.po"; /** * Cloisons - différents tests qui n'ont pas tant de rapport que ça avec les cloisons :) @@ -44,7 +45,7 @@ describe("ngHyd − cloisons", () => { await browser.sleep(300); // 4. change LoiDebit - await calcPage.changeSelectValue(calcPage.getSelectById("select_loidebit"), 1); + await changeSelectValue(calcPage.getSelectById("select_loidebit"), 1); await browser.sleep(300); // 5. check number of inputs in CALC mode diff --git a/e2e/clone-calc.e2e-spec.ts b/e2e/clone-calc.e2e-spec.ts index 038a90e66..a63f565b0 100644 --- a/e2e/clone-calc.e2e-spec.ts +++ b/e2e/clone-calc.e2e-spec.ts @@ -4,7 +4,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; -import { scrollPageToTop } from "./util.po"; +import { changeSelectValue, scrollPageToTop } from "./util.po"; /** * Clone calculators @@ -54,7 +54,7 @@ describe("ngHyd − clone a calculator", () => { k: 0.6, Ks: 42 }; - await calcPage.changeSelectValue(calcPage.getSelectById("select_section"), 3); // mode "parabolique" + await changeSelectValue(calcPage.getSelectById("select_section"), 3); // mode "parabolique" await calcPage.getInputById("k").clear(); await calcPage.getInputById("k").sendKeys(sourceValues["k"]); await calcPage.getInputById("Ks").clear(); @@ -63,7 +63,7 @@ describe("ngHyd − clone a calculator", () => { const debitSP = calcPage.getInputById("Q"); await calcPage.setParamMode(debitSP, "link"); await browser.sleep(500); - await calcPage.changeSelectValue(calcPage.getSelectById("linked_Q"), 1); // "Courbe de remous" + await changeSelectValue(calcPage.getSelectById("linked_Q"), 1); // "Courbe de remous" await browser.sleep(500); // otherwise clickCloneCalcButton() fails with "Element is not clickable at point" diff --git a/e2e/examples-empty-fields.e2e-spec.ts b/e2e/examples-empty-fields.e2e-spec.ts index 08f40c467..3a8d3942c 100644 --- a/e2e/examples-empty-fields.e2e-spec.ts +++ b/e2e/examples-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" +import { changeSelectValue } from "./util.po"; /** * check that fields are empty on creation @@ -60,7 +61,7 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on // modify 1st structure discharge law const dischargeSelect = calcPage.getSelectById("select_loidebit"); - await calcPage.changeSelectValue(dischargeSelect, 1); + await changeSelectValue(dischargeSelect, 1); await browser.sleep(200); // open initial dialog diff --git a/e2e/lechapt-calmon.e2e-spec.ts b/e2e/lechapt-calmon.e2e-spec.ts index 91dea3194..f3be14a59 100644 --- a/e2e/lechapt-calmon.e2e-spec.ts +++ b/e2e/lechapt-calmon.e2e-spec.ts @@ -3,6 +3,7 @@ import { browser, by } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; +import { changeSelectValue } from "./util.po"; /** * Check that created/cloned structures have empty fields when @@ -45,7 +46,7 @@ describe("Lechapt&Calmon - ", () => { // select last material type const materialSelect = calcPage.getSelectById("select_material"); - await calcPage.changeSelectValue(materialSelect, 8); + await changeSelectValue(materialSelect, 8); await browser.sleep(200); // run calculation @@ -58,7 +59,7 @@ describe("Lechapt&Calmon - ", () => { const pl1 = await res1.all(by.css("td")).get(1).getText(); // select first material type - await calcPage.changeSelectValue(materialSelect, 0); + await changeSelectValue(materialSelect, 0); await browser.sleep(200); // run calculation diff --git a/e2e/linked-parameter-section-type.e2e-spec.ts b/e2e/linked-parameter-section-type.e2e-spec.ts index b42c13d0f..a863f273e 100644 --- a/e2e/linked-parameter-section-type.e2e-spec.ts +++ b/e2e/linked-parameter-section-type.e2e-spec.ts @@ -3,6 +3,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { CalculatorPage } from "./calculator.po"; +import { changeSelectValue } from "./util.po"; describe("linked parameter in calculator with section - ", () => { let listPage: ListPage; @@ -42,7 +43,7 @@ describe("linked parameter in calculator with section - ", () => { await calcPage.setParamMode(inputQ, "link"); // change section type - await calcPage.changeSelectValue(calcPage.getSelectById("select_section"), 3); // mode "parabolique" + await changeSelectValue(calcPage.getSelectById("select_section"), 3); // mode "parabolique" // check Q is still in linked mode expect(await calcPage.inputIsInLinkedMode(inputQ)).toBe(true); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 436058e6f..8689c6f13 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -5,7 +5,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; -import { expectNumber } from "./util.po"; +import { changeSelectValue, expectNumber } from "./util.po"; const fs = require("fs"); const path = require("path"); @@ -122,7 +122,7 @@ describe("ngHyd − save and load sessions", () => { await listPage.clickMenuEntryForCalcType(2); // Section paramétrée await browser.sleep(500); - await calcPage.changeSelectValue(calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" + await changeSelectValue(calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" await calcPage.getInputById("Ks").clear(); // coefficient de Strickler await browser.sleep(1000); @@ -190,7 +190,7 @@ describe("ngHyd − save and load sessions", () => { // select next select option (optionally looping) const nextInd = (ind + 1) % optionCount; - await calcPage.changeSelectValue(sel, nextInd); + await changeSelectValue(sel, nextInd); await browser.sleep(200); // save session diff --git a/e2e/ouvrages-empty-fields.e2e-spec.ts b/e2e/ouvrages-empty-fields.e2e-spec.ts index 4a28316f8..918107e2c 100644 --- a/e2e/ouvrages-empty-fields.e2e-spec.ts +++ b/e2e/ouvrages-empty-fields.e2e-spec.ts @@ -4,6 +4,7 @@ import { CalculatorPage } from "./calculator.po"; import { AppPage } from "./app.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; +import { changeSelectValue } from "./util.po"; /** * Check that created/cloned structures have empty fields when @@ -51,7 +52,7 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // change 1st structure type to rectangular weir const structSelect = calcPage.getSelectById("select_structure"); - await calcPage.changeSelectValue(structSelect, 1); + await changeSelectValue(structSelect, 1); await browser.sleep(200); // check 1st structure empty fields @@ -91,7 +92,7 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // change 1st structure type to rectangular weir const structSelect = calcPage.getSelectById("select_structure"); - await calcPage.changeSelectValue(structSelect, 1); + await changeSelectValue(structSelect, 1); await browser.sleep(200); // copy structure @@ -102,7 +103,7 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // change 2nd structure type to rectangular gate const selects = await element.all(by.css("mat-select#select_structure")); const structSelect2 = selects[1]; - await calcPage.changeSelectValue(structSelect2, 5); + await changeSelectValue(structSelect2, 5); await browser.sleep(200); // check empty fields @@ -135,12 +136,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // change 1st structure type to rectangular weir const structSelect = calcPage.getSelectById("select_structure"); - await calcPage.changeSelectValue(structSelect, 1); + await changeSelectValue(structSelect, 1); await browser.sleep(200); // change discharge law to Larinier const dischargeSelect = calcPage.getSelectById("select_loidebit"); - await calcPage.changeSelectValue(dischargeSelect, 3); + await changeSelectValue(dischargeSelect, 3); await browser.sleep(200); // check empty fields diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 866f67fb5..edcdd9750 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -5,7 +5,7 @@ import { browser, by, element } from "protractor"; import { AppPage } from "./app.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { scrollPageToTop } from "./util.po"; +import { changeSelectValue, scrollPageToTop } from "./util.po"; /** * Clone calculators @@ -297,7 +297,7 @@ describe("ngHyd − Passe à Bassins", () => { // change iteration const pve = calcPage.getSelectById("pab-variating-element"); - calcPage.changeSelectValue(pve, 3); + await changeSelectValue(pve, 3); await browser.sleep(300); // check absence of logs expect(await calcPage.nbLogEntries()).toBe(2); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 264ebb84f..51c1fc8de 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -1,4 +1,5 @@ import { browser, by, element, ElementFinder } from "protractor"; +import { changeSelectValue } from "./util.po"; export class PreferencesPage { navigateTo() { @@ -43,10 +44,7 @@ export class PreferencesPage { async changeLanguage(index: number) { const select = this.getLanguageSelect(); - await select.click(); - const optionId = ".cdk-overlay-container mat-option#mat-option-" + index; - const option = element(by.css(optionId)); - await option.click(); + await changeSelectValue(select, index); } async enableEvilEmptyFields() { diff --git a/e2e/pressure-loss-empty-fields.e2e-spec.ts b/e2e/pressure-loss-empty-fields.e2e-spec.ts index c4516a88b..59eb87c64 100644 --- a/e2e/pressure-loss-empty-fields.e2e-spec.ts +++ b/e2e/pressure-loss-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { changeSelectValue } from "./util.po"; describe("Check fields are empty in 'pressure loss' calculator when created with 'empty fields' option -", () => { let listPage: ListPage; @@ -32,7 +33,7 @@ describe("Check fields are empty in 'pressure loss' calculator when created with // select Lechapt-Calmon pressure loss law const materialSelect = calcPage.getSelectById("select_pressurelosstype"); - await calcPage.changeSelectValue(materialSelect, 0); + await changeSelectValue(materialSelect, 0); await browser.sleep(200); expect(calcPage.checkEmptyOrFilledFields(["Q", "D", "Lg", "Kloc"], [true, true, true, true])); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index d13ccd48b..342d35edb 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -4,6 +4,7 @@ import { browser } from "protractor"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; +import { changeSelectValue } from "./util.po"; /** * Remous @@ -59,7 +60,7 @@ describe("ngHyd − remous", () => { await browser.sleep(300); // 2. Set to trapezoidal section with bank slope of 2m/m and 20 meter width bed - await calcPage.changeSelectValue(calcPage.getSelectById("select_section"), 2); + await changeSelectValue(calcPage.getSelectById("select_section"), 2); await browser.sleep(300); await calcPage.getInputById("LargeurFond").clear(); await browser.sleep(300); diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 89ca70d6e..afe88721e 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -5,7 +5,7 @@ import { Navbar } from "./navbar.po"; import { browser, by, element } from "protractor"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { scrollPageToTop } from "./util.po"; +import { changeSelectValue, scrollPageToTop } from "./util.po"; /** * Clone calculators @@ -76,7 +76,7 @@ describe("Solveur - ", () => { expect(hasResults).toBe(true); // change targetted Nub, check that targetted result changes too - await calcPage.changeSelectValue(ntc, 0); + await changeSelectValue(ntc, 0); const nttV2 = await calcPage.getSelectValueText(ntt); expect(nttV2).not.toContain("Puissance dissipée (PV)"); }); @@ -111,9 +111,9 @@ describe("Solveur - ", () => { // Go back to Solveur await navbar.clickCalculatorTab(0); - await calcPage.changeSelectValue(calcPage.getSelectById("select_target_nub"), 1); // "Puissance / PV" + await changeSelectValue(calcPage.getSelectById("select_target_nub"), 1); // "Puissance / PV" await browser.sleep(500); - await calcPage.changeSelectValue(calcPage.getSelectById("select_searched_param"), 2); // "Chute / Z2" + await changeSelectValue(calcPage.getSelectById("select_searched_param"), 2); // "Chute / Z2" await browser.sleep(500); await calcPage.getInputById("Ytarget").sendKeys("318"); @@ -159,7 +159,7 @@ describe("Solveur - ", () => { // modify searched parameter const sel = calcPage.getSelectById("select_searched_param"); - await calcPage.changeSelectValue(sel, 11); + await changeSelectValue(sel, 11); await browser.sleep(300); const selText = await calcPage.getSelectValueText(sel); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index e772a28ce..aded71c16 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -1,4 +1,4 @@ -import { ElementFinder, browser } from "protractor"; +import { ElementFinder, browser, by, element } from "protractor"; /** * scroll page to make element visible @@ -27,3 +27,11 @@ export function expectNumber(msg: string, val: number, expected: number) { } expect(val).toEqual(expected); } + +export async function changeSelectValue(elt: ElementFinder, index: number) { + await elt.click(); + const optionId = ".cdk-overlay-container mat-option:nth-of-type(" + (index + 1) + ")"; + const option = element(by.css(optionId)); + await option.click(); + await browser.sleep(200); +} -- GitLab From e7bec0d51002da010c36047bfdd0ac919cd6ba9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 15 Feb 2023 09:39:11 +0100 Subject: [PATCH 156/285] test(e2e): check that changing language setting changes labels in results refs #586 --- e2e/preferences.po.ts | 17 +++++++ e2e/translation.e2e-spec.ts | 97 +++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 e2e/translation.e2e-spec.ts diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 51c1fc8de..39604b8cb 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -63,6 +63,23 @@ export class PreferencesPage { } } + /** + * enable/disable option "empty fields on module creation" + * @param b true to enable "empty fields on module creation" option, false to disable it (fill fields with default values) + */ + async setEmptyFields(b: boolean) { + await this.navigateTo(); + await browser.sleep(200); + + if (b) { + await this.enableEvilEmptyFields(); + } + else { + await this.disableEvilEmptyFields(); + } + await browser.sleep(200); + } + async setIterationCount(n: number) { const input = this.getInputFromName("nmi"); input.clear(); diff --git a/e2e/translation.e2e-spec.ts b/e2e/translation.e2e-spec.ts new file mode 100644 index 000000000..b0118eac9 --- /dev/null +++ b/e2e/translation.e2e-spec.ts @@ -0,0 +1,97 @@ +import { ListPage } from "./list.po"; +import { Navbar } from "./navbar.po"; +import { browser, by } from "protractor"; +import { CalculatorPage } from "./calculator.po"; +import { PreferencesPage } from "./preferences.po"; +import { SideNav } from "./sidenav.po"; + +describe("Check translation", () => { + let listPage: ListPage; + let navBar: Navbar; + let calcPage: CalculatorPage; + let prefPage: PreferencesPage; + let sideNav: SideNav; + + beforeAll(async () => { + listPage = new ListPage(); + navBar = new Navbar(); + calcPage = new CalculatorPage(); + prefPage = new PreferencesPage(); + sideNav = new SideNav(); + }); + + beforeEach(async () => { + prefPage.setEmptyFields(false); + }); + + it("variables in results", async () => { + // *** results in french *** + + prefPage.changeLanguage(1); // fr + await browser.sleep(200); + + // open "fish ladder: fall" calculator + await navBar.clickNewCalculatorButton(); + await listPage.clickMenuEntryForCalcType(12); + await browser.sleep(200); + + // set Z2 to variated mode + const inpZ2 = calcPage.getInputById("Z2"); + await calcPage.setParamMode(inpZ2, "var"); + + // run calculation + await calcPage.getCalculateButton().click(); + await browser.sleep(500); + + // "variable for X axis" select label + const selXaxis = calcPage.getSelectById("selectX"); + expect(await calcPage.getMatselectCurrentOptionText(selXaxis)).toEqual("Cote aval"); + + // "variable for Y axis" select label + const selYaxis = calcPage.getSelectById("selectY"); + expect(await calcPage.getMatselectCurrentOptionText(selYaxis)).toEqual("DH : Chute (m)"); + + // fixed results variables + const frr = calcPage.getAllFixedResultsRows(); + let lbl1 = await frr.all(by.css("td")).get(0).getText(); + expect(lbl1).toEqual("Cote amont (m)"); + + // variated results headers + const vrh = calcPage.getAllVariatedResultsTableHeaders(); + let lbl2 = await vrh.get(0).getText(); + expect(lbl2).toEqual("Cote aval"); + let lbl3 = await vrh.get(1).getText(); + expect(lbl3).toEqual("Chute (m)"); + + // *** results in english *** + + // setup -> english + await navBar.clickMenuButton(); + await browser.sleep(200); + const setupBtn = await sideNav.getSetupButton(); + await setupBtn.click(); + await browser.sleep(200); + await prefPage.changeLanguage(0); // en + await browser.sleep(200); + + // back to calculator + await navBar.clickCalculatorTab(0); + await browser.sleep(200); + + // "variable for X axis" select label + expect(await calcPage.getMatselectCurrentOptionText(selXaxis)).toEqual("Downstream elevation"); + + // "variable for Y axis" select label + expect(await calcPage.getMatselectCurrentOptionText(selYaxis)).toEqual("DH : Fall (m)"); + + // fixed results variables + lbl1 = await frr.all(by.css("td")).get(0).getText(); + expect(lbl1).toEqual("Upstream elevation (m)"); + + // variated results headers + lbl2 = await vrh.get(0).getText(); + expect(lbl2).toEqual("Downstream elevation"); + lbl3 = await vrh.get(1).getText(); + expect(lbl3).toEqual("Fall (m)"); + }); +}); -- GitLab From 3d5312616777b5333d9f8eb8908c086ea999c418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 15 Feb 2023 16:40:45 +0100 Subject: [PATCH 157/285] refactor: remove useless code refs #586 --- .../definition/form-section-parametree.ts | 4 --- src/app/formulaire/definition/form-section.ts | 5 ---- src/app/formulaire/elements/fieldset.ts | 30 ------------------- 3 files changed, 39 deletions(-) diff --git a/src/app/formulaire/definition/form-section-parametree.ts b/src/app/formulaire/definition/form-section-parametree.ts index 7f91f2fca..7ddfdefaf 100644 --- a/src/app/formulaire/definition/form-section-parametree.ts +++ b/src/app/formulaire/definition/form-section-parametree.ts @@ -23,10 +23,6 @@ export class FormulaireSectionParametree extends FormulaireSection { this.reaffectResultComponents(); } - protected runNubCalc(nub: Nub, computedParam?: ParamDefinition): Result { - return nub.CalcSerie(); - } - protected reaffectResultComponents() { this.resetFormResults(); // to avoid adding fixed parameters more than once (see below) const sectNub: SectionParametree = this.currentNub as SectionParametree; diff --git a/src/app/formulaire/definition/form-section.ts b/src/app/formulaire/definition/form-section.ts index bf06c16b2..3a6906d1a 100644 --- a/src/app/formulaire/definition/form-section.ts +++ b/src/app/formulaire/definition/form-section.ts @@ -47,11 +47,6 @@ export class FormulaireSection extends FormulaireFixedVar { const newSect = Session.getInstance().createSection(data.value); (this._currentNub as SectionNub).setSection(newSect); // reflect changes in GUI - for (const fs of this.allFieldsets) { - // show / hide dependent fields - fs.updateFields(); - } - // show / hide dependent fields this.refreshFieldsets(); this.reset(); } diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index c1678a93b..a705ab392 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -38,7 +38,6 @@ export class FieldSet extends FormulaireElement implements IProperties { public setNub(sn: Nub, update: boolean = true) { this._nub = sn; - this.setParentNubForAllFields(); if (update) { this.updateFields(); } @@ -135,9 +134,6 @@ export class FieldSet extends FormulaireElement implements IProperties { return this._jsonConfig; } - private setParentNubForAllFields() { - } - /** * crée un input * @param json definition de l'input, extrait du fichier de conf du module de calcul @@ -280,32 +276,6 @@ export class FieldSet extends FormulaireElement implements IProperties { } } - public getNodeParameter(symbol: string): NgParameter { - for (const p of this.kids) { - if (p instanceof NgParameter) { - if (p.isDisplayed && p.symbol === symbol) { - return p; - } - } - } - } - - public getNodeParameterValue(symbol: string): number { - const p = this.getNodeParameter(symbol); - if (!p) { - throw new Error(`FieldSet.getNodeParameterValue() : pas de paramètre ${symbol} trouvé`); - } - - switch (p.radioState) { - case ParamRadioConfig.FIX: - return p.getValue(); - - case ParamRadioConfig.VAR: - case ParamRadioConfig.CAL: - return undefined; - } - } - /** * retourne la valeur actuellement sélectionnée d'un SelectField (qui doit être affiché) * @param selectFieldId id du SelectField -- GitLab From 90ff0a177a315b514d447eb27ca0384c71cc896a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 15 Feb 2023 16:44:56 +0100 Subject: [PATCH 158/285] refactor: rename FormulaireDefinition.getParamFromSymbol() to getNgparamFromNubParam() refs #586 --- src/app/formulaire/definition/form-definition.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index 9acb17e78..eec033312 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -346,11 +346,10 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } /** - * Trouve le Ngparameter correspondant au symbole "symbol", parmi tous les - * éléments du formulaire - * @param symbol string + * Trouve le NgParameter correspondant au paramètre Nub parmi tous les éléments du formulaire + * @param param paramètre critère de recherche */ - public getParamFromSymbol(param: ParamDefinition): NgParameter { + private getNgparamFromNubParam(param: ParamDefinition): NgParameter { for (const p of this.allFormElements) { if (p instanceof NgParameter) { if (p.symbol === param.symbol && p.paramDefinition.parentNub.uid === param.parentNub.uid) { @@ -552,7 +551,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs const fixedParams: ParamDefinition[] = this._currentNub.findFixedParams(); let fnp: NgParameter[] = []; for (const fp of fixedParams) { - fnp.push(this.getParamFromSymbol(fp)); + fnp.push(this.getNgparamFromNubParam(fp)); } fnp = fnp.filter((e) => e !== undefined); return fnp; -- GitLab From 32ae1dfce014403b9fff84935c58905c9e646d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 15 Feb 2023 16:48:29 +0100 Subject: [PATCH 159/285] refactor: avoid NgParameter duplication refs #586 --- .../calculator.component.ts | 2 +- .../formulaire/definition/form-definition.ts | 16 ++++++---- .../formulaire/definition/form-fixedvar.ts | 9 +++--- .../definition/form-macrorugo-compound.ts | 2 +- .../formulaire/definition/form-prebarrage.ts | 2 +- .../definition/form-pressureloss.ts | 27 ++++++++++------- src/app/formulaire/definition/form-section.ts | 2 +- src/app/formulaire/definition/form-solveur.ts | 2 +- src/app/formulaire/elements/fieldset.ts | 29 ++++++++++++++----- 9 files changed, 57 insertions(+), 34 deletions(-) diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 49e81d946..46a03da75 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -1259,7 +1259,7 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe const form = this._formulaire as FormulaireFixedVar; const nub = (form.currentNub as Espece); nub.loadPredefinedSpecies(result.selected); - form.refreshFieldsets(); + form.refreshFieldsets(false); } }); } diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index eec033312..c6b05ea1b 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -359,6 +359,14 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } } + public getOrCreateParam(nubParam: ParamDefinition, parent: FormulaireNode): NgParameter { + const res = this.getNgparamFromNubParam(nubParam); + if (res === undefined) { + return new NgParameter(nubParam, parent); + } + return res; + } + public getFieldById(id: string): Field { const res = this.getFormulaireNodeById(id); if (res instanceof Field) { @@ -531,14 +539,10 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs protected getComputedParameter(): NgParameter { const cpd = this.currentNub.calculatedParam; - let ngparam: NgParameter; if (cpd !== undefined) { - ngparam = this.getParamFromSymbol(cpd); - if (ngparam === undefined) { // calculated parameter is not displayed on screen - ngparam = new NgParameter(cpd, this); - } + return this.getOrCreateParam(cpd, this); } - return ngparam; + return undefined; } /** find variated (possibly linked) parameters from model, and get their values at the same time */ diff --git a/src/app/formulaire/definition/form-fixedvar.ts b/src/app/formulaire/definition/form-fixedvar.ts index 8eb6917e7..f20ce41fe 100644 --- a/src/app/formulaire/definition/form-fixedvar.ts +++ b/src/app/formulaire/definition/form-fixedvar.ts @@ -82,8 +82,7 @@ export class FormulaireFixedVar extends FormulaireDefinition { protected compute() { this.runNubCalc(this.currentNub); - this.refreshFieldsets(); // important: before reaffectResultComponents() or it will break results components localization - // this.reaffectResultComponents(); // seems useless since called from runNubCalc() + this.reaffectResultComponents(); } protected reaffectResultComponents() { @@ -115,9 +114,9 @@ export class FormulaireFixedVar extends FormulaireDefinition { /** * Forces all fieldsets to update all their fields */ - public refreshFieldsets() { + public refreshFieldsets(forceClear: boolean) { for (const fs of this.allFieldsets) { - fs.updateFields(); + fs.updateFields(forceClear); } this.completeParse(false); // re-add observers that were destroyed by updateFields() } @@ -130,7 +129,7 @@ export class FormulaireFixedVar extends FormulaireDefinition { if (data.action === "propertyChange") { this.reset(); // reflect changes in GUI (who knows ?), for ex. show / hide dependent fields - this.refreshFieldsets(); + this.refreshFieldsets(true); } } } diff --git a/src/app/formulaire/definition/form-macrorugo-compound.ts b/src/app/formulaire/definition/form-macrorugo-compound.ts index 306332cb5..5dd33e865 100644 --- a/src/app/formulaire/definition/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/form-macrorugo-compound.ts @@ -84,7 +84,7 @@ export class FormulaireMacrorugoCompound extends FormulaireRepeatableFieldset { */ public updateApronState(inclined: MRCInclination) { // show / hide dependent fields (read from model) - this.refreshFieldsets(); + this.refreshFieldsets(false); // show / hide children list (GUI only) for (const elt of this.allFormElements) { if (elt instanceof FieldsetContainer) { diff --git a/src/app/formulaire/definition/form-prebarrage.ts b/src/app/formulaire/definition/form-prebarrage.ts index c9a0d9e0d..09a2b1570 100644 --- a/src/app/formulaire/definition/form-prebarrage.ts +++ b/src/app/formulaire/definition/form-prebarrage.ts @@ -239,7 +239,7 @@ export class FormulairePrebarrage extends FormulaireFixedVar { protected compute() { this.runNubCalc(this.currentNub); - this.refreshFieldsets(); // important: before reaffectResultComponents() or it will break results components localization + this.refreshFieldsets(false); // important: before reaffectResultComponents() or it will break results components localization // reset variable index to avoid trying to access an index > 0 when nothing varies this._pbResults.variableIndex = 0; diff --git a/src/app/formulaire/definition/form-pressureloss.ts b/src/app/formulaire/definition/form-pressureloss.ts index 26c862355..9260bc79a 100644 --- a/src/app/formulaire/definition/form-pressureloss.ts +++ b/src/app/formulaire/definition/form-pressureloss.ts @@ -36,16 +36,23 @@ export class FormulairePressureLoss extends FormulaireFixedVar { } public update(sender: IObservable, data: any) { - // changement de propriété du FieldSet contenant le select de choix du type de perte de charge - if (sender instanceof FieldSet && sender.id === "fs_pressureloss_law" && data.action === "propertyChange") { - // replace underlying pressure loss law without replacing whole Nub - const newPLL = Session.getInstance().createPressureLossLaw(data.value, undefined, this.currentNub.getPropValue(Prop_NullParameters)); - (this._currentNub as PressureLoss).setLaw(newPLL); - // show / hide dependent fields - this.refreshFieldsets(); - this.reset(); + // if (sender instanceof FieldSet && sender.id === "fs_pressureloss_law" && data.action === "propertyChange") { + if (data.action === "propertyChange") { + if (data.name === "pressurelosstype") { + // changement de propriété du FieldSet contenant le select de choix du type de perte de charge + + // replace underlying pressure loss law without replacing whole Nub + const newPLL = Session.getInstance().createPressureLossLaw(data.value, undefined, this.currentNub.getPropValue(Prop_NullParameters)); + (this._currentNub as PressureLoss).setLaw(newPLL); + // show / hide dependent fields + this.refreshFieldsets(true); + this.reset(); + } + else if (data.name === "material") { + // changement de propriété du FieldSet contenant le select de choix du type de matériau + this.refreshFieldsets(false); + this.reset(); + } } - else - super.update(sender, data); } } diff --git a/src/app/formulaire/definition/form-section.ts b/src/app/formulaire/definition/form-section.ts index 3a6906d1a..d2aa08b33 100644 --- a/src/app/formulaire/definition/form-section.ts +++ b/src/app/formulaire/definition/form-section.ts @@ -47,7 +47,7 @@ export class FormulaireSection extends FormulaireFixedVar { const newSect = Session.getInstance().createSection(data.value); (this._currentNub as SectionNub).setSection(newSect); // reflect changes in GUI - this.refreshFieldsets(); + this.refreshFieldsets(true); this.reset(); } } diff --git a/src/app/formulaire/definition/form-solveur.ts b/src/app/formulaire/definition/form-solveur.ts index 0a3d446ef..ce7be1797 100644 --- a/src/app/formulaire/definition/form-solveur.ts +++ b/src/app/formulaire/definition/form-solveur.ts @@ -63,7 +63,7 @@ export class FormulaireSolveur extends FormulaireFixedVar { // refresh targetted result selector const trSel = this.getFormulaireNodeById(this._targettedResultSelectId) as SelectField; if (trSel) { - (trSel.parent as FieldSet).updateFields(); + (trSel.parent as FieldSet).updateFields(true); // trick to re-set observers this.completeParse(false); } diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index a705ab392..7b709eb76 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -10,7 +10,7 @@ import { import { FormulaireElement } from "./formulaire-element"; import { Field } from "./field"; import { SelectField } from "./select/select-field"; -import { NgParameter, ParamRadioConfig } from "./ngparam"; +import { NgParameter } from "./ngparam"; import { FieldsetContainer } from "./fieldset-container"; import { SelectFieldFactory } from "./select/select-field-factory"; import { FormulaireFixedVar } from "../definition/form-fixedvar"; @@ -39,7 +39,7 @@ export class FieldSet extends FormulaireElement implements IProperties { public setNub(sn: Nub, update: boolean = true) { this._nub = sn; if (update) { - this.updateFields(); + this.updateFields(true); } } @@ -47,7 +47,9 @@ export class FieldSet extends FormulaireElement implements IProperties { if (!f) { throw new Error("FieldSet.addField() : argument incorrect (undefined)"); } - this.kids.push(f); + if (this.kids.indexOf(f) === -1) { + this.kids.push(f); + } } /** @@ -105,6 +107,15 @@ export class FieldSet extends FormulaireElement implements IProperties { } } + private getOrCreateSelect(json: {}): SelectField { + const id: string = json["id"]; + const res = this.getFormulaireNodeById(id); + if (res === undefined || !(res instanceof SelectField)) { + return SelectFieldFactory.newSelectField(json, this); + } + return res; + } + private parse_select(json: {}): SelectField { let ok: boolean = true; // in case select is associated to a property, check nub has the property @@ -113,7 +124,7 @@ export class FieldSet extends FormulaireElement implements IProperties { ok = this.parentForm.getPropValue(p) !== undefined; } if (ok) { - const res: SelectField = SelectFieldFactory.newSelectField(json, this); + const res: SelectField = this.getOrCreateSelect(json); res.parseConfig(json); res.afterParseConfig(); res.addObserver(this); @@ -147,7 +158,7 @@ export class FieldSet extends FormulaireElement implements IProperties { try { nubParam = this.getNubParamFromSymbol(input_id); if (nubParam.visible) { - res = new NgParameter(nubParam, this); + res = this.parentForm.getOrCreateParam(nubParam, this); res.parseConfig(json); } } catch (e) { @@ -157,8 +168,6 @@ export class FieldSet extends FormulaireElement implements IProperties { } private parseFields() { - // clear everything so that parseFields() is idempotent - this.clearFields(); // parse children fields from config const fields = this._jsonConfig["fields"]; for (const field_index in fields) { @@ -203,7 +212,10 @@ export class FieldSet extends FormulaireElement implements IProperties { /** * Reloads the model values and properties, and reloads localisation strings */ - public updateFields() { + public updateFields(forceClear: boolean) { + if (forceClear) { + this.clearFields(); + } this.parseFields(); this.updateLocalisation(); @@ -257,6 +269,7 @@ export class FieldSet extends FormulaireElement implements IProperties { // parse fields once, so that SelectField elements are present // when setting default properties below + this.clearFields(); this.parseFields(); // for all select fields known by the form, apply default value -- GitLab From 73dedf3ef575ce008678aaa04be30f0acf4dbac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 15 Feb 2023 17:22:06 +0100 Subject: [PATCH 160/285] fix: variated results headers translation update after langage setting modification refs #586 --- .../fixedvar-results/var-results.component.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/app/components/fixedvar-results/var-results.component.ts b/src/app/components/fixedvar-results/var-results.component.ts index 7493401d2..3ba2053f5 100644 --- a/src/app/components/fixedvar-results/var-results.component.ts +++ b/src/app/components/fixedvar-results/var-results.component.ts @@ -3,7 +3,7 @@ import { Component, ViewChild, ElementRef, Input } from "@angular/core"; import { MatDialog } from "@angular/material/dialog"; import { VarResults } from "../../results/var-results"; -import { ResultElement, Message, MessageSeverity } from "jalhyd"; +import { ResultElement, Message, MessageSeverity, Observer } from "jalhyd"; import { I18nService } from "../../services/internationalisation.service"; import { ResultsComponentDirective } from "./results.component"; import { DialogLogEntriesDetailsComponent } from "../dialog-log-entries-details/dialog-log-entries-details.component"; @@ -17,7 +17,7 @@ import { longestVarParam } from "../../../app/util"; "./var-results.component.scss" ] }) -export class VarResultsComponent extends ResultsComponentDirective { +export class VarResultsComponent extends ResultsComponentDirective implements Observer { /** size of the longest variated parameter */ public size: number; @@ -42,12 +42,17 @@ export class VarResultsComponent extends ResultsComponentDirective { protected logEntriesDetailsDialog: MatDialog ) { super(); + this.intlService.addObserver(this); } /** Refreshes results and builds the dataset */ @Input() public set results(r: VarResults) { this._varResults = r; + this.updateResults(); + } + + private updateResults() { this._results = []; this._headers = []; this._messages = []; @@ -190,4 +195,12 @@ export class VarResultsComponent extends ResultsComponentDirective { } ); } + + // Observer interface + + update(sender: any, data: any): void { + if (sender instanceof I18nService) { + this._varResults.update(); + } + } } -- GitLab From 50b72f15f8fc9404455855fb3b8a218f77f3f405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 16 Feb 2023 09:48:32 +0100 Subject: [PATCH 161/285] fix: variable results graph: select entries not translated when modifying langage setting refs #586 --- .../fixedvar-results/var-results.component.ts | 8 ++++++-- src/app/results/param-calc-results.ts | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/app/components/fixedvar-results/var-results.component.ts b/src/app/components/fixedvar-results/var-results.component.ts index 3ba2053f5..f6204377d 100644 --- a/src/app/components/fixedvar-results/var-results.component.ts +++ b/src/app/components/fixedvar-results/var-results.component.ts @@ -1,4 +1,4 @@ -import { Component, ViewChild, ElementRef, Input } from "@angular/core"; +import { Component, ViewChild, ElementRef, Input, OnInit } from "@angular/core"; import { MatDialog } from "@angular/material/dialog"; @@ -17,7 +17,7 @@ import { longestVarParam } from "../../../app/util"; "./var-results.component.scss" ] }) -export class VarResultsComponent extends ResultsComponentDirective implements Observer { +export class VarResultsComponent extends ResultsComponentDirective implements Observer, OnInit { /** size of the longest variated parameter */ public size: number; @@ -196,6 +196,10 @@ export class VarResultsComponent extends ResultsComponentDirective implements Ob ); } + ngOnInit(): void { + this._varResults.updateCalculatedParameterHeader(); + } + // Observer interface update(sender: any, data: any): void { diff --git a/src/app/results/param-calc-results.ts b/src/app/results/param-calc-results.ts index eaca087d3..9e22d98b4 100644 --- a/src/app/results/param-calc-results.ts +++ b/src/app/results/param-calc-results.ts @@ -12,7 +12,7 @@ export abstract class CalculatedParamResults extends CalculatorResults { protected _calculatedParam: NgParameter; /** titre de la colonne du paramètre calculé */ - public calculatedParameterHeader: string; + private _calculatedParameterHeader: string; /** résultat du calcul sur le paramètre calculé */ public result: Result; @@ -22,7 +22,7 @@ export abstract class CalculatedParamResults extends CalculatorResults { public reset() { this._calculatedParam = undefined; - this.calculatedParameterHeader = undefined; + this._calculatedParameterHeader = undefined; this.result = undefined; } @@ -32,7 +32,17 @@ export abstract class CalculatedParamResults extends CalculatorResults { public set calculatedParameter(p: NgParameter) { this._calculatedParam = p; - this.calculatedParameterHeader = CalculatorResults.paramLabel(this._calculatedParam, true); + this.updateCalculatedParameterHeader(); + } + + public updateCalculatedParameterHeader() { + if (this._calculatedParam !== undefined) { + this._calculatedParameterHeader = CalculatorResults.paramLabel(this._calculatedParam, true); + } + } + + public get calculatedParameterHeader(): string { + return this._calculatedParameterHeader; } public get hasResults(): boolean { -- GitLab From 0ab34d388e87c56b9f3005877f4deea6275c6ea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 16 Feb 2023 10:29:00 +0100 Subject: [PATCH 162/285] fix: variated results graph: axis Y label not translated when changing langage setting refs #586 --- src/app/components/results-chart/results-chart.component.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app/components/results-chart/results-chart.component.ts b/src/app/components/results-chart/results-chart.component.ts index 0b33967f3..0bb985913 100644 --- a/src/app/components/results-chart/results-chart.component.ts +++ b/src/app/components/results-chart/results-chart.component.ts @@ -182,6 +182,10 @@ export class ResultsChartComponent extends ResultsComponentDirective implements } public ngOnChanges() { + if (this._results instanceof VarResults) { + this._results.updateCalculatedParameterHeader(); + } + // redessiner le graphique chaque fois qu'une entrée change this.drawChart(); } -- GitLab From 6610d19f553599cdff8f344b3bdd30b39ad26888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 16 Feb 2023 13:41:21 +0100 Subject: [PATCH 163/285] chore: update ng2-charts to 4.1.1, chartjs-plugin-zoom to 2.0.0 refs #238 --- package-lock.json | 32 ++++++++++++------------ package.json | 6 ++--- scripts/fix-chartjs-plugin-zoom-2.0.0.sh | 4 +++ 3 files changed, 23 insertions(+), 19 deletions(-) create mode 100755 scripts/fix-chartjs-plugin-zoom-2.0.0.sh diff --git a/package-lock.json b/package-lock.json index 87ddd2409..38115b303 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", "angular2-hotkeys": "^13.1.0", - "chartjs-plugin-zoom": "^1.2.1", + "chartjs-plugin-zoom": "^2.0.0", "core-js": "^3.23.3", "file-saver": "^2.0.5", "he": "^1.2.0", @@ -37,7 +37,7 @@ "material-design-icons": "^3.0.1", "mathjax": "^3.2.2", "mermaid": "^9.1.3", - "ng2-charts": "^4.0.0", + "ng2-charts": "^4.1.1", "ngx-markdown": "^14.0.1", "ngx-material-file-input": "^4.0.0", "ngx-webstorage-service": "^5.0.0", @@ -6269,14 +6269,14 @@ "peer": true }, "node_modules/chartjs-plugin-zoom": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-1.2.1.tgz", - "integrity": "sha512-2zbWvw2pljrtMLMXkKw1uxYzAne5PtjJiOZftcut4Lo3Ee8qUt95RpMKDWrZ+pBZxZKQKOD/etdU4pN2jxZUmg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.0.0.tgz", + "integrity": "sha512-bqpi7DGy9a5hX7ThKl/xQaLzXvneSwhS0w/lNimZ8AJaoRVMKz5JfUoqwciJYV5ixKXJbgyvwC9HcJnyVsYmjg==", "dependencies": { "hammerjs": "^2.0.8" }, "peerDependencies": { - "chart.js": "^3.2.0" + "chart.js": ">=3.2.0" } }, "node_modules/cheerio": { @@ -14130,9 +14130,9 @@ "dev": true }, "node_modules/ng2-charts": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.0.1.tgz", - "integrity": "sha512-QYXVZHP/RIRhAw36xeXPL6JZz73fXuHePTyGwBiOfIRGCG7EDYLApnSgEn+Mx+QFKYT1VN9Fsj5b04rrd2nrEw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.1.1.tgz", + "integrity": "sha512-iHwXDbmX86lfeH8VRcsaW2tJATsuAZo4kvvC/Yk2l35zOHjevja1qBvO6BAibiDazi9r9aS6ZRJOqWPsz1pP2w==", "dependencies": { "lodash-es": "^4.17.15", "tslib": "^2.3.0" @@ -14141,7 +14141,7 @@ "@angular/cdk": ">=14.0.0", "@angular/common": ">=14.0.0", "@angular/core": ">=14.0.0", - "chart.js": "^3.4.0", + "chart.js": "^3.4.0 || ^4.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -24962,9 +24962,9 @@ "peer": true }, "chartjs-plugin-zoom": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-1.2.1.tgz", - "integrity": "sha512-2zbWvw2pljrtMLMXkKw1uxYzAne5PtjJiOZftcut4Lo3Ee8qUt95RpMKDWrZ+pBZxZKQKOD/etdU4pN2jxZUmg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.0.0.tgz", + "integrity": "sha512-bqpi7DGy9a5hX7ThKl/xQaLzXvneSwhS0w/lNimZ8AJaoRVMKz5JfUoqwciJYV5ixKXJbgyvwC9HcJnyVsYmjg==", "requires": { "hammerjs": "^2.0.8" } @@ -30893,9 +30893,9 @@ "dev": true }, "ng2-charts": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.0.1.tgz", - "integrity": "sha512-QYXVZHP/RIRhAw36xeXPL6JZz73fXuHePTyGwBiOfIRGCG7EDYLApnSgEn+Mx+QFKYT1VN9Fsj5b04rrd2nrEw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.1.1.tgz", + "integrity": "sha512-iHwXDbmX86lfeH8VRcsaW2tJATsuAZo4kvvC/Yk2l35zOHjevja1qBvO6BAibiDazi9r9aS6ZRJOqWPsz1pP2w==", "requires": { "lodash-es": "^4.17.15", "tslib": "^2.3.0" diff --git a/package.json b/package.json index 4624a5f6f..47e5d0349 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "mkdocs": "bash scripts/prepare_mkdocs.sh; cd build; python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && cd .. && node scripts/mkdocs-postprocess.js", "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 scripts/mkdocs2pdf.py && node scripts/mkdocs2pdf-postprocess.js", "clean": "rm -rf build dist release src/date_revision.ts src/assets/docs", - "preprocess": "mkdir -p build; node scripts/preprocessors.js; npm run service-worker-version", + "preprocess": "mkdir -p build; node scripts/preprocessors.js; npm run service-worker-version; bash scripts/fix-chartjs-plugin-zoom-2.0.0.sh", "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 0.0.0.0 --poll 5000", "build-no-pdf": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production", "build": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production && npm run mkdocs2pdf", @@ -54,9 +54,9 @@ "@ngx-matomo/tracker": "^3.0.0", "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", - "ng2-charts": "^4.0.0", + "ng2-charts": "^4.1.1", "angular2-hotkeys": "^13.1.0", - "chartjs-plugin-zoom": "^1.2.1", + "chartjs-plugin-zoom": "^2.0.0", "core-js": "^3.23.3", "file-saver": "^2.0.5", "he": "^1.2.0", diff --git a/scripts/fix-chartjs-plugin-zoom-2.0.0.sh b/scripts/fix-chartjs-plugin-zoom-2.0.0.sh new file mode 100755 index 000000000..d066111f0 --- /dev/null +++ b/scripts/fix-chartjs-plugin-zoom-2.0.0.sh @@ -0,0 +1,4 @@ +# fix compilation error due to chartjs-plugin-zoom 2.0.0 +# cf. https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/238#note_76247 + +sed -i "s/const enum UpdateModeEnum {$/enum UpdateModeEnum {/g" node_modules/chartjs-plugin-zoom/types/index.d.ts -- GitLab From bc60cb121dcb762f50c94bf5f01493150a546655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 16 Feb 2023 17:11:49 +0100 Subject: [PATCH 164/285] feat: service worker updates: display unrecoverable state event refs #604 --- src/app/services/service-worker-update.service.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/app/services/service-worker-update.service.ts b/src/app/services/service-worker-update.service.ts index 96b84426a..4256e92f0 100644 --- a/src/app/services/service-worker-update.service.ts +++ b/src/app/services/service-worker-update.service.ts @@ -32,5 +32,8 @@ export class ServiceWorkerUpdateService { break; } }); + swUpdate.unrecoverable.subscribe(event => { + notificationService.notify("SwUpdate: unrecoverable state. Reason=" + event.reason + ", type=" + event.type, 10000); + }); } } -- GitLab From f7dbfb69021ce8486d8af5dc9b6ca5d40161e142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 20 Feb 2023 15:45:51 +0100 Subject: [PATCH 165/285] refactor: PAB: optimise table space by moving up values of the basin section (length, width, ZRMB) refs #607 --- .../pab-table/pab-table.component.ts | 131 +++++++----------- 1 file changed, 50 insertions(+), 81 deletions(-) diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index ead6072f1..8f1e259ff 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -540,58 +540,58 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni for (const cloison of this.model.children) { // as much rows as the greatest number of parameters among its devices const maxNbParams = this.findMaxNumberOfDeviceParameters(cloison); - for (let i = 0; i < maxNbParams; i++) { + for (let r = 0; r < maxNbParams; r++) { // build device params row const deviceParamRow = { selectable: cloison, cells: [] }; - // basin number and ZRAM - if (i === 0) { + // basin number, LB, BB, ZRMB and ZRAM + if (r === 0) { // basin number deviceParamRow.cells.push({ value: childIndex + 1, - rowspan: maxNbParams + 1, + rowspan: maxNbParams, class: "basin_number", selectable: cloison }); - // 3 empty cells - deviceParamRow.cells.push({ - colspan: 3, - rowspan: maxNbParams - 1, - selectable: cloison - }); - // ZRAM - deviceParamRow.cells.push({ - model: cloison.prms.ZRAM, - title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRAM") - }); - } - // basin cells on the last but 1 row - if (i === maxNbParams - 1) { + // Longueur bassin deviceParamRow.cells.push({ model: cloison.prms.LB, title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "LB") }); + // Largeur bassin deviceParamRow.cells.push({ model: cloison.prms.BB, title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "BB") }); + // Cote radier mi bassin deviceParamRow.cells.push({ model: cloison.prms.ZRMB, title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRMB") }); + // ZRAM + deviceParamRow.cells.push({ + model: cloison.prms.ZRAM, + title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRAM") + }); } - // 1 empty cell below ZRAM - if (i === 1) { + else if (r === 1) { + // 1 row for QA editor + const qaParam = new NgParameter(cloison.prms.QA, this.pabTable.form); + qaParam.radioConfig = ParamRadioConfig.VAR; deviceParamRow.cells.push({ - rowspan: maxNbParams, - selectable: cloison + model: qaParam, + colspan: 4, + rowspan: maxNbParams - 1, + qa: true, + title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "QA") }); } // device param cells : 3 cells for each device for (const ouvrage of cloison.structures) { - const nvParam = ouvrage.getNthVisibleParam(i); + const nvParam = ouvrage.getNthVisibleParam(r); const nvParamTitle = nvParam ? this.formService.expandVariableNameAndUnit(CalculatorType.Pab, nvParam.symbol) : ""; + const childStructParamCount = this.nubVisibleParameterCount(ouvrage); // cell 1 : device type - if (i === 0) { // 1st row + if (r === 0) { // 1st row deviceParamRow.cells.push({ model: ouvrage, modelValue: ouvrage.getPropValue("loiDebit"), @@ -600,75 +600,42 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni }); } // fill space below device type selector - if (i === 1) { + else if (r === 1) { deviceParamRow.cells.push({ rowspan: (maxNbParams - 1), selectable: ouvrage }); } - // cell 2 : param name if (nvParam) { + // cell 2 : param name deviceParamRow.cells.push({ value: nvParam.symbol, title: nvParamTitle, selectable: ouvrage }); - } else { - deviceParamRow.cells.push({ - selectable: ouvrage - }); - } - // cell 3 : param value - if (nvParam) { + // cell 3 : param value deviceParamRow.cells.push({ model: nvParam, title: nvParamTitle, selectable: ouvrage }); - } else { - deviceParamRow.cells.push({ - selectable: ouvrage - }); } - } - // fill horizontal space - const devDiff = (maxNbDevices - cloison.structures.length); - if (i === 0) { - for (let j = 0; j < devDiff; j++) { - deviceParamRow.cells.push({ - colspan: 3, - rowspan: maxNbParams, - selectable: cloison, - selectableColumn: cloison.structures.length + j - }); + else if (r === childStructParamCount) { + // fill remaining space + const remaining = maxNbParams - childStructParamCount; + if (remaining > 0) { + deviceParamRow.cells.push({ + colspan: 2, + rowspan: remaining, + selectable: cloison + }); + } } } // done ! this.rows.push(deviceParamRow); } - // 1 row for QA editor - const qaParam = new NgParameter(cloison.prms.QA, this.pabTable.form); - qaParam.radioConfig = ParamRadioConfig.VAR; - const qaRow: { selectable: any, cells: any[] } = { - selectable: undefined, - cells: [ - { - model: qaParam, - colspan: 3, - qa: true, - title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "QA") - } - ] - }; - // as many pairs of columns as the maximum number of devices - qaRow.cells.push({ - colspan: maxNbDevices * 3, - // selectable: cloison @TODO oui ou non ? - }); - // done ! - this.rows.push(qaRow); - - childIndex ++; + childIndex++; } // B.2 many rows for downwall @@ -790,18 +757,20 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni return maxNbDevices; } + private nubVisibleParameterCount(n: Nub) { + let res = 0; + for (const p of n.parameterIterator) { + if (p.visible) { + res++; + } + } + return res; + } + private findMaxNumberOfDeviceParameters(struct: ParallelStructure): number { let maxNbParams = 1; - for (const d of struct.getChildren()) { - let nbParams = 0; - for (const p of d.parameterIterator) { - if (p.visible) { - // console.log("(counting)", p.symbol); - nbParams ++; - } - } - // console.log(">>> child params: ", nbParams); - maxNbParams = Math.max(maxNbParams, nbParams); + for (const child of struct.getChildren()) { + maxNbParams = Math.max(maxNbParams, this.nubVisibleParameterCount(child)); } return maxNbParams; } -- GitLab From fc7d6b4c693a5e1208787b9f0e65563c0d828243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 21 Feb 2023 13:22:25 +0100 Subject: [PATCH 166/285] refactor: PAB: modify table: move type over parameters and values fields refs #607 --- .../pab-table/pab-table.component.html | 11 +++-- .../pab-table/pab-table.component.ts | 48 ++++++++++++------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/app/components/pab-table/pab-table.component.html b/src/app/components/pab-table/pab-table.component.html index b68a85d56..3f2722eb2 100644 --- a/src/app/components/pab-table/pab-table.component.html +++ b/src/app/components/pab-table/pab-table.component.html @@ -65,12 +65,13 @@ {{ h.title }} </th> </tr> - <tr> - <th *ngFor="let col of columns" (click)="toggleSelection(col, $event)" - (mousedown)="preventCtrlClickBorder($event)" [class.selectable-cell]="isSelectable(col)" - [class.selected-cell]="isSelected(col)"> + <tr *ngFor="let col of columns"> + <th *ngFor="let cell of col.cells" (click)="toggleSelection(col, $event)" + (mousedown)="preventCtrlClickBorder($event)" [class.selectable-cell]="isSelectable(cell)" + [class.selected-cell]="isSelected(cell)" [attr.rowspan]="rowSpan(cell)" + [attr.colspan]="colSpan(cell)" [title]="cellTitle(cell)"> - {{ col.title }} + {{ cell.title }} </th> </tr> </ng-template> diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index 8f1e259ff..db19cdb9d 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -477,7 +477,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni for (let i = 0; i < maxNbDevices; i++) { this.headers.push({ title: sprintf(this.i18nService.localizeText("INFO_PAB_CLOISON_OUVRAGE_N"), (i + 1)), - colspan: 3, + colspan: 2, selectable: this.model.children.map(c => c.getChildren()[i]).concat(this.model.downWall.getChildren()[i]), selectableColumn: i }); @@ -485,43 +485,55 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni // A. build columns set this.cols = []; + const headerRow1 = { cells: [] }; + const headerRow2 = { cells: [] }; + this.cols.push(headerRow1); + this.cols.push(headerRow2); + // 5 cols for basin - this.cols.push({ + headerRow1.cells.push({ title: this.i18nService.localizeText("INFO_PAB_NUM_BASSIN"), - selectable: bs + selectable: bs, + rowspan: 2 }); - this.cols.push({ + headerRow1.cells.push({ title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "LB"), - selectable: bs + selectable: bs, + rowspan: 2 }); - this.cols.push({ + headerRow1.cells.push({ title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "BB"), - selectable: bs + selectable: bs, + rowspan: 2 }); - this.cols.push({ + headerRow1.cells.push({ title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRMB"), - selectable: bs + selectable: bs, + rowspan: 2 }); - this.cols.push({ + headerRow1.cells.push({ title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRAM"), - selectable: bs + selectable: bs, + rowspan: 2 }); // no col for wall type (defined by rowspan-2 header above) // 3 cols for each device of the wall having the most devices (including downwall) for (let i = 0; i < maxNbDevices; i++) { - this.cols.push({ + const sel = this.model.children.map(c => c.getChildren()[i]).concat(this.model.downWall.getChildren()[i]); + headerRow1.cells.push({ title: this.i18nService.localizeText("INFO_PAB_HEADER_TYPE"), - selectable: this.model.children.map(c => c.getChildren()[i]).concat(this.model.downWall.getChildren()[i]), - selectableColumn: i + selectable: sel, + selectableColumn: i, + colspan: 2 }); - this.cols.push({ + headerRow2.cells.push({ title: this.i18nService.localizeText("INFO_PAB_HEADER_PARAMETERS"), - selectable: this.model.children.map(c => c.getChildren()[i]).concat(this.model.downWall.getChildren()[i]), + selectable: sel, selectableColumn: i }); - this.cols.push({ + headerRow2.cells.push({ title: this.i18nService.localizeText("INFO_PAB_HEADER_VALUES"), - selectable: this.model.children.map(c => c.getChildren()[i]).concat(this.model.downWall.getChildren()[i]), + selectable: sel, selectableColumn: i }); } -- GitLab From 925304e90c09d465643a3168c89148663ad45a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 21 Feb 2023 14:44:38 +0100 Subject: [PATCH 167/285] refactor: PAB: table data: move type over parameter name and value refs #607 --- .../pab-table/pab-table.component.ts | 169 ++++++------------ 1 file changed, 59 insertions(+), 110 deletions(-) diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index db19cdb9d..c07ae0282 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -84,7 +84,6 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni private i18nService: I18nService, private formService: FormulaireService, private editPabDialog: MatDialog, - private appSetupService: ApplicationSetupService, private notifService: NotificationsService ) { this.selectedItems = []; @@ -552,7 +551,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni for (const cloison of this.model.children) { // as much rows as the greatest number of parameters among its devices const maxNbParams = this.findMaxNumberOfDeviceParameters(cloison); - for (let r = 0; r < maxNbParams; r++) { + for (let r = 0; r <= maxNbParams; r++) { // build device params row const deviceParamRow = { selectable: cloison, cells: [] }; // basin number, LB, BB, ZRMB and ZRAM @@ -560,7 +559,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni // basin number deviceParamRow.cells.push({ value: childIndex + 1, - rowspan: maxNbParams, + rowspan: maxNbParams + 1, class: "basin_number", selectable: cloison }); @@ -592,60 +591,14 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni deviceParamRow.cells.push({ model: qaParam, colspan: 4, - rowspan: maxNbParams - 1, + rowspan: maxNbParams, qa: true, title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "QA") }); } - // device param cells : 3 cells for each device - for (const ouvrage of cloison.structures) { - const nvParam = ouvrage.getNthVisibleParam(r); - const nvParamTitle = nvParam ? this.formService.expandVariableNameAndUnit(CalculatorType.Pab, nvParam.symbol) : ""; - const childStructParamCount = this.nubVisibleParameterCount(ouvrage); - // cell 1 : device type - if (r === 0) { // 1st row - deviceParamRow.cells.push({ - model: ouvrage, - modelValue: ouvrage.getPropValue("loiDebit"), - options: loisCloisons, - selectable: ouvrage - }); - } - // fill space below device type selector - else if (r === 1) { - deviceParamRow.cells.push({ - rowspan: (maxNbParams - 1), - selectable: ouvrage - }); - } - if (nvParam) { - // cell 2 : param name - deviceParamRow.cells.push({ - value: nvParam.symbol, - title: nvParamTitle, - selectable: ouvrage - }); - // cell 3 : param value - deviceParamRow.cells.push({ - model: nvParam, - title: nvParamTitle, - selectable: ouvrage - }); - } - else if (r === childStructParamCount) { - // fill remaining space - const remaining = maxNbParams - childStructParamCount; - if (remaining > 0) { - deviceParamRow.cells.push({ - colspan: 2, - rowspan: remaining, - selectable: cloison - }); - } - } - } - // done ! - this.rows.push(deviceParamRow); + + // devices + this.fillParallelStructureCells(deviceParamRow, r, maxNbParams, loisCloisons); } childIndex++; } @@ -660,21 +613,21 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni }); // as much rows as the greatest number of parameters among its devices const maxNbParamsDW = this.findMaxNumberOfDeviceParameters(this.model.downWall); - for (let i = 0; i < maxNbParamsDW; i++) { + for (let r = 0; r <= maxNbParamsDW; r++) { // build device params row const deviceParamRowDW = { selectable: this.model.downWall, cells: [] }; - // basin number - if (i === 0) { + if (r === 0) { + // "downstream" deviceParamRowDW.cells.push({ value: "Aval", - rowspan: maxNbParamsDW, + rowspan: maxNbParamsDW + 1, class: "basin_number", selectable: this.model.downWall }); // 3 empty cells deviceParamRowDW.cells.push({ colspan: 3, - rowspan: maxNbParamsDW , + rowspan: maxNbParamsDW + 1, selectable: this.model.downWall }); // ZRAM @@ -683,74 +636,70 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRAM") }); } - if (i === 1) { - // 1 empty cell + if (r === 1) { + // 1 empty cell (in place of the QA editor) deviceParamRowDW.cells.push({ - rowspan: maxNbParamsDW - 1, + rowspan: maxNbParamsDW, selectable: this.model.downWall }); } - // downwall device param cells : 3 cells for each device - for (const ouvrage of this.model.downWall.structures) { - const nvParam = ouvrage.getNthVisibleParam(i); - const nvParamTitle = nvParam ? this.formService.expandVariableNameAndUnit(CalculatorType.Pab, nvParam.symbol) : ""; - // cell 1 : device type - if (i === 0) { // 1st row - deviceParamRowDW.cells.push({ - model: ouvrage, - modelValue: ouvrage.getPropValue("loiDebit"), - options: loisAval - }); - } - // fill space - if (i === 1) { - deviceParamRowDW.cells.push({ - rowspan: (maxNbParamsDW - 1), - selectable: ouvrage + + // devices + this.fillParallelStructureCells(deviceParamRowDW, r, maxNbParamsDW, loisAval); + } + + this.updateValidity(); + } + + private fillParallelStructureCells(tableRow: any, rowIndex: number, maxParamCount: number, loisAdmissibles: any[]) { + // device param cells : 3 cells for each device + + const ps: ParallelStructure = tableRow.selectable; + + for (const struct of ps.structures) { + const childStructParamCount = this.nubVisibleParameterCount(struct); + // cell 1 : device type + if (rowIndex === 0) { // 1st row + tableRow.cells.push({ + model: struct, + modelValue: struct.getPropValue("loiDebit"), + options: loisAdmissibles, + selectable: struct, + colspan: 2 + }); + } + else if (rowIndex === childStructParamCount + 1) { + // fill remaining space + const remaining = maxParamCount - childStructParamCount; + if (remaining > 0) { + tableRow.cells.push({ + colspan: 2, + rowspan: remaining, + selectable: ps }); } - // cell 2 : param name + } + else { + const nvParam = struct.getNthVisibleParam(rowIndex - 1); if (nvParam) { - deviceParamRowDW.cells.push({ + const nvParamTitle = this.formService.expandVariableNameAndUnit(CalculatorType.Pab, nvParam.symbol); + // cell 2 : param name + tableRow.cells.push({ value: nvParam.symbol, title: nvParamTitle, - selectable: ouvrage - }); - } else { - deviceParamRowDW.cells.push({ - selectable: ouvrage + selectable: struct }); - } - // cell 3 : param value - if (nvParam) { - deviceParamRowDW.cells.push({ + // cell 3 : param value + tableRow.cells.push({ model: nvParam, title: nvParamTitle, - selectable: ouvrage - }); - } else { - deviceParamRowDW.cells.push({ - selectable: ouvrage + selectable: struct }); } } - // fill horizontal space - const devDiff = (maxNbDevices - this.model.downWall.structures.length); - if (i === 0) { - for (let j = 0; j < devDiff; j++) { - deviceParamRowDW.cells.push({ - colspan: 3, - rowspan: maxNbParamsDW, - selectable: this.model.downWall, - selectableColumn: this.model.downWall.structures.length + j - }); - } - } - // done ! - this.rows.push(deviceParamRowDW); } - - this.updateValidity(); + // done ! + this.rows.push(tableRow); } /** -- GitLab From b2fddef47ef1fa314a19a730c3eb491bd28d5fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 22 Feb 2023 13:15:22 +0100 Subject: [PATCH 168/285] fix: update failure due to error in service worker update service (VERSION_READY case) refs #604 --- .../services/service-worker-update.service.ts | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/app/services/service-worker-update.service.ts b/src/app/services/service-worker-update.service.ts index 4256e92f0..47b47c9ed 100644 --- a/src/app/services/service-worker-update.service.ts +++ b/src/app/services/service-worker-update.service.ts @@ -1,5 +1,5 @@ import { Injectable } from "@angular/core"; -import { SwUpdate } from '@angular/service-worker'; +import { SwUpdate, VersionEvent } from '@angular/service-worker'; import { I18nService } from "./internationalisation.service"; import { NotificationsService } from "./notifications.service"; @@ -13,26 +13,33 @@ export class ServiceWorkerUpdateService { swUpdate.versionUpdates.subscribe(evt => { switch (evt.type) { case 'VERSION_DETECTED': - let ver = evt.version.appData["version"]; - let msg = i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_DETECTED", { "ver": ver }); - notificationService.notify(msg, 10000); + let ver = (evt as any).version?.appData?.version ?? "<NA>"; + console.log("SwUpdate VERSION_DETECTED", ver); + notificationService.notify(i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_DETECTED", { "ver": ver }), 10000); break; case 'VERSION_READY': - const newVer = evt.latestVersion.appData["version"]; - // const currVer = evt.currentVersion.appData["version"]; - msg = i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_READY", { "ver": newVer }); - notificationService.notify(msg, 10000); + const currVer = (evt as any).currentVersion?.appData?.version ?? "<NA>"; + const newVer = (evt as any).latestVersion?.appData?.version ?? "<NA>"; + console.log("SwUpdate VERSION_READY", currVer, newVer); + + notificationService.notify(i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_READY", { "ver": newVer }), 10000); + // PLANTE si on stocke le message dans une variable !!!! + // const msg = i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_READY", { "ver": newVer }); + // notificationService.notify(msg, 10000); + // -> ReferenceError: can't access lexical declaration 'xxx' before initialization + // avec xxx qui varie d'une fois à l'autre !!! break; case 'VERSION_INSTALLATION_FAILED': - ver = evt.version.appData["version"]; - msg = i18nService.localizeText("ERROR_SERVICE_WORKER_INSTALL_FAILED", { "ver": ver }); - notificationService.notify(msg, 10000); + ver = (evt as any).version?.appData?.version ?? "NA"; + console.log("SwUpdate VERSION_INSTALLATION_FAILED", ver); + notificationService.notify(i18nService.localizeText("ERROR_SERVICE_WORKER_INSTALL_FAILED", { "ver": ver }), 10000); break; } }); swUpdate.unrecoverable.subscribe(event => { + console.log("SwUpdate.unrecoverable", event.reason, event.type); notificationService.notify("SwUpdate: unrecoverable state. Reason=" + event.reason + ", type=" + event.type, 10000); }); } -- GitLab From dba4fd828157c0dbaa5358131925d678f95e8446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 23 Feb 2023 09:07:38 +0100 Subject: [PATCH 169/285] refactor : move util.ts to new util directory refs #604 --- src/app/app.component.ts | 2 +- .../dialog-edit-param-values.component.ts | 2 +- .../dialog-generate-par-simulation.component.ts | 2 +- src/app/components/fixedvar-results/results.component.ts | 2 +- src/app/components/fixedvar-results/var-results.component.ts | 2 +- src/app/components/generic-calculator/calculator.component.ts | 2 +- .../jet-trajectory-chart/jet-trajectory-chart.component.ts | 2 +- .../macrorugo-compound-results.component.ts | 2 +- .../components/modules-diagram/modules-diagram.component.ts | 2 +- .../pab-profile-chart/pab-profile-chart.component.ts | 2 +- src/app/components/pab-results/pab-results-table.component.ts | 2 +- src/app/components/pb-results/pb-cloison-results.component.ts | 2 +- src/app/components/pb-results/pb-results-table.component.ts | 2 +- src/app/components/pb-schema/pb-schema.component.ts | 2 +- src/app/components/remous-results/remous-results.component.ts | 2 +- src/app/components/results-chart/chart-type.component.ts | 2 +- src/app/components/results-chart/results-chart.component.ts | 2 +- .../select-field-line/select-field-line.component.ts | 2 +- .../select-section-details.component.ts | 2 +- .../variable-results-selector.component.ts | 2 +- src/app/formulaire/definition/form-pab.ts | 2 +- src/app/formulaire/definition/form-prebarrage.ts | 2 +- src/app/formulaire/elements/ngparam.ts | 2 +- .../formulaire/elements/select/select-field-searched-param.ts | 2 +- .../formulaire/elements/select/select-field-solveur-target.ts | 2 +- .../formulaire/elements/select/select-field-target-pass.ts | 2 +- src/app/formulaire/elements/select/select-field.ts | 2 +- src/app/results/var-results.ts | 2 +- src/app/services/internationalisation.service.ts | 2 +- src/app/{ => util}/util.ts | 4 ++-- 30 files changed, 31 insertions(+), 31 deletions(-) rename src/app/{ => util}/util.ts (98%) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index d11194eca..0df6289bd 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -22,7 +22,7 @@ import { DialogSaveSessionComponent } from "./components/dialog-save-session/dia import { QuicknavComponent } from "./components/quicknav/quicknav.component"; import { NotificationsService } from "./services/notifications.service"; -import { decodeHtml } from "./util"; +import { decodeHtml } from "./util/util"; import { HotkeysService, Hotkey } from "angular2-hotkeys"; diff --git a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts index 16768e9c0..47790963b 100644 --- a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts +++ b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts @@ -10,7 +10,7 @@ import { sprintf } from "sprintf-js"; import { ParamValueMode, ExtensionStrategy } from "jalhyd"; -import { fv } from "../../util"; +import { fv } from "../../util/util"; import { ServiceFactory } from "app/services/service-factory"; @Component({ diff --git a/src/app/components/dialog-generate-par-simulation/dialog-generate-par-simulation.component.ts b/src/app/components/dialog-generate-par-simulation/dialog-generate-par-simulation.component.ts index b7aaf61d7..554bc9943 100644 --- a/src/app/components/dialog-generate-par-simulation/dialog-generate-par-simulation.component.ts +++ b/src/app/components/dialog-generate-par-simulation/dialog-generate-par-simulation.component.ts @@ -3,7 +3,7 @@ import { Inject, Component } from "@angular/core"; import { I18nService } from "../../services/internationalisation.service"; import { MultiDimensionResults } from "../../results/multidimension-results"; -import { fv, longestVarParam } from "../../util"; +import { fv, longestVarParam } from "../../util/util"; @Component({ selector: "dialog-generate-par-simulation", diff --git a/src/app/components/fixedvar-results/results.component.ts b/src/app/components/fixedvar-results/results.component.ts index ae9747dbe..18b089750 100644 --- a/src/app/components/fixedvar-results/results.component.ts +++ b/src/app/components/fixedvar-results/results.component.ts @@ -2,7 +2,7 @@ import screenfull from "screenfull"; import { NgParameter } from "../../formulaire/elements/ngparam"; import { ServiceFactory } from "../../services/service-factory"; -import { fv } from "../../util"; +import { fv } from "../../util/util"; import { CalculatorResults } from "../../results/calculator-results"; import { Directive, HostListener } from "@angular/core"; diff --git a/src/app/components/fixedvar-results/var-results.component.ts b/src/app/components/fixedvar-results/var-results.component.ts index 7493401d2..3c9f310ce 100644 --- a/src/app/components/fixedvar-results/var-results.component.ts +++ b/src/app/components/fixedvar-results/var-results.component.ts @@ -8,7 +8,7 @@ import { I18nService } from "../../services/internationalisation.service"; import { ResultsComponentDirective } from "./results.component"; import { DialogLogEntriesDetailsComponent } from "../dialog-log-entries-details/dialog-log-entries-details.component"; import { AppComponent } from "../../app.component"; -import { longestVarParam } from "../../../app/util"; +import { longestVarParam } from "../../../app/util/util"; @Component({ selector: "var-results", diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 49e81d946..40832d354 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -28,7 +28,7 @@ import { ParallelStructure } from "jalhyd"; -import { generateValuesCombination, getUnformattedIthResult, getUnformattedIthValue } from "../../util"; +import { generateValuesCombination, getUnformattedIthResult, getUnformattedIthValue } from "../../util/util"; import { AppComponent } from "../../app.component"; import { FormulaireService } from "../../services/formulaire.service"; diff --git a/src/app/components/jet-trajectory-chart/jet-trajectory-chart.component.ts b/src/app/components/jet-trajectory-chart/jet-trajectory-chart.component.ts index 5bd87e2bb..bf4e084e1 100644 --- a/src/app/components/jet-trajectory-chart/jet-trajectory-chart.component.ts +++ b/src/app/components/jet-trajectory-chart/jet-trajectory-chart.component.ts @@ -5,7 +5,7 @@ import { BaseChartDirective } from "ng2-charts"; import { I18nService } from "../../services/internationalisation.service"; import { ResultsComponentDirective } from "../fixedvar-results/results.component"; import { IYSeries } from "../../results/y-series"; -import { fv } from "../../util"; +import { fv } from "../../util/util"; import { AppComponent } from "../../app.component"; import { Jet, Result } from "jalhyd"; diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts index f388647da..039681e3c 100644 --- a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts @@ -2,7 +2,7 @@ import { Component, Input } from "@angular/core"; import { Result, cLog, Message, MessageCode, MessageSeverity, MRCInclination } from "jalhyd"; -import { fv } from "../../../app/util"; +import { fv } from "../../../app/util/util"; import { CalculatorResults } from "../../results/calculator-results"; import { NgParameter } from "../../formulaire/elements/ngparam"; diff --git a/src/app/components/modules-diagram/modules-diagram.component.ts b/src/app/components/modules-diagram/modules-diagram.component.ts index 0b607e51e..0ec435a07 100644 --- a/src/app/components/modules-diagram/modules-diagram.component.ts +++ b/src/app/components/modules-diagram/modules-diagram.component.ts @@ -33,7 +33,7 @@ import * as SvgPanZoom from "svg-pan-zoom"; import { MatomoTracker } from "@ngx-matomo/tracker"; -import { fv } from "../../util"; +import { fv } from "../../util/util"; @Component({ selector: "modules-diagram", diff --git a/src/app/components/pab-profile-chart/pab-profile-chart.component.ts b/src/app/components/pab-profile-chart/pab-profile-chart.component.ts index ee664e43a..11aca1b40 100644 --- a/src/app/components/pab-profile-chart/pab-profile-chart.component.ts +++ b/src/app/components/pab-profile-chart/pab-profile-chart.component.ts @@ -6,7 +6,7 @@ import { I18nService } from "../../services/internationalisation.service"; import { ResultsComponentDirective } from "../fixedvar-results/results.component"; import { PabResults } from "../../results/pab-results"; import { IYSeries } from "../../results/y-series"; -import { fv, longestVarParam } from "../../util"; +import { fv, longestVarParam } from "../../util/util"; import { AppComponent } from "../../app.component"; import { CloisonAval, Cloisons, LoiDebit } from "jalhyd"; diff --git a/src/app/components/pab-results/pab-results-table.component.ts b/src/app/components/pab-results/pab-results-table.component.ts index b541cdc52..b2b36a836 100644 --- a/src/app/components/pab-results/pab-results-table.component.ts +++ b/src/app/components/pab-results/pab-results-table.component.ts @@ -6,7 +6,7 @@ import { PabResults } from "../../results/pab-results"; import { I18nService } from "../../services/internationalisation.service"; import { ResultsComponentDirective } from "../fixedvar-results/results.component"; import { AppComponent } from "../../app.component"; -import { fv } from "../../util"; +import { fv } from "../../util/util"; @Component({ selector: "pab-results-table", diff --git a/src/app/components/pb-results/pb-cloison-results.component.ts b/src/app/components/pb-results/pb-cloison-results.component.ts index 0a59b6a8b..da3aae4ba 100644 --- a/src/app/components/pb-results/pb-cloison-results.component.ts +++ b/src/app/components/pb-results/pb-cloison-results.component.ts @@ -2,7 +2,7 @@ import { Component, Input } from "@angular/core"; import { FixedResultsComponent } from "../fixedvar-results/fixed-results.component"; import { NgParameter } from "../../formulaire/elements/ngparam"; -import { getIthValue } from "../../util"; +import { getIthValue } from "../../util/util"; import { PbCloisonResults } from "../../results/pb-cloison-results"; import { Result, ResultElement } from "jalhyd"; diff --git a/src/app/components/pb-results/pb-results-table.component.ts b/src/app/components/pb-results/pb-results-table.component.ts index 79084192d..9e1315d86 100644 --- a/src/app/components/pb-results/pb-results-table.component.ts +++ b/src/app/components/pb-results/pb-results-table.component.ts @@ -5,7 +5,7 @@ import { PreBarrage, PbBassin } from "jalhyd"; import { I18nService } from "../../services/internationalisation.service"; import { ResultsComponentDirective } from "../fixedvar-results/results.component"; import { AppComponent } from "../../app.component"; -import { fv, getIthValue } from "../../util"; +import { fv, getIthValue } from "../../util/util"; import { PrebarrageResults } from "../../results/prebarrage-results"; @Component({ diff --git a/src/app/components/pb-schema/pb-schema.component.ts b/src/app/components/pb-schema/pb-schema.component.ts index 6de70eecd..3ba8bf93d 100644 --- a/src/app/components/pb-schema/pb-schema.component.ts +++ b/src/app/components/pb-schema/pb-schema.component.ts @@ -18,7 +18,7 @@ import { GenericCalculatorComponent } from "../generic-calculator/calculator.com import { FormulairePrebarrage } from "../../formulaire/definition/form-prebarrage"; import { AppComponent } from "../../app.component"; -import { fv } from "app/util"; +import { fv } from "app/util/util"; import { ServiceFactory } from "app/services/service-factory"; import { DefinedBoolean } from "app/definedvalue/definedboolean"; import { PrebarrageService, PrebarrageServiceEvents } from "app/services/prebarrage.service"; diff --git a/src/app/components/remous-results/remous-results.component.ts b/src/app/components/remous-results/remous-results.component.ts index 1f5ea4b72..2fd73ae1e 100644 --- a/src/app/components/remous-results/remous-results.component.ts +++ b/src/app/components/remous-results/remous-results.component.ts @@ -9,7 +9,7 @@ import { FormulaireService } from "../../services/formulaire.service"; import { ResultsComponentDirective } from "../fixedvar-results/results.component"; import { AppComponent } from "../../app.component"; import { LineData, ChartData } from "./line-and-chart-data"; -import { fv } from "../../util"; +import { fv } from "../../util/util"; import { VarResults } from "../../results/var-results"; import { BaseChartDirective } from "ng2-charts"; diff --git a/src/app/components/results-chart/chart-type.component.ts b/src/app/components/results-chart/chart-type.component.ts index 39839c3a9..123657c51 100644 --- a/src/app/components/results-chart/chart-type.component.ts +++ b/src/app/components/results-chart/chart-type.component.ts @@ -4,7 +4,7 @@ import { I18nService } from "../../services/internationalisation.service"; import { ChartType } from "../../results/chart-type"; import { SelectFieldChartType } from "app/formulaire/elements/select/select-field-charttype"; import { SelectEntry } from "app/formulaire/elements/select/select-entry"; -import { decodeHtml } from "../../util"; +import { decodeHtml } from "../../util/util"; @Component({ selector: "chart-type", diff --git a/src/app/components/results-chart/results-chart.component.ts b/src/app/components/results-chart/results-chart.component.ts index 0b33967f3..be7eb6678 100644 --- a/src/app/components/results-chart/results-chart.component.ts +++ b/src/app/components/results-chart/results-chart.component.ts @@ -11,7 +11,7 @@ import { ChartType } from "../../results/chart-type"; import { ResultsComponentDirective } from "../fixedvar-results/results.component"; import { IYSeries } from "../../results/y-series"; import { VarResults } from "../../results/var-results"; -import { fv } from "../../util"; +import { fv } from "../../util/util"; import { AppComponent } from "../../app.component"; import zoomPlugin from 'chartjs-plugin-zoom'; diff --git a/src/app/components/select-field-line/select-field-line.component.ts b/src/app/components/select-field-line/select-field-line.component.ts index c6b2474a0..7c4b067ef 100644 --- a/src/app/components/select-field-line/select-field-line.component.ts +++ b/src/app/components/select-field-line/select-field-line.component.ts @@ -4,7 +4,7 @@ import { SelectField } from "../../formulaire/elements/select/select-field"; import { SelectEntry } from "../../formulaire/elements/select/select-entry"; import { I18nService } from "../../services/internationalisation.service"; import { ApplicationSetupService } from "../../services/app-setup.service"; -import { decodeHtml } from "../../util"; +import { decodeHtml } from "../../util/util"; @Component({ selector: "select-field-line", diff --git a/src/app/components/select-section-details/select-section-details.component.ts b/src/app/components/select-section-details/select-section-details.component.ts index 55c21b523..278ce4bdc 100644 --- a/src/app/components/select-section-details/select-section-details.component.ts +++ b/src/app/components/select-section-details/select-section-details.component.ts @@ -3,7 +3,7 @@ import { Router } from '@angular/router'; import { FormulaireDefinition } from 'app/formulaire/definition/form-definition'; import { FormulaireService } from 'app/services/formulaire.service'; import { I18nService } from 'app/services/internationalisation.service'; -import { fv } from 'app/util'; +import { fv } from 'app/util/util'; import { formattedValue } from 'jalhyd'; /** diff --git a/src/app/components/variable-results-selector/variable-results-selector.component.ts b/src/app/components/variable-results-selector/variable-results-selector.component.ts index 0d68b4457..50c4a0d96 100644 --- a/src/app/components/variable-results-selector/variable-results-selector.component.ts +++ b/src/app/components/variable-results-selector/variable-results-selector.component.ts @@ -1,7 +1,7 @@ import { Component, Input, OnChanges } from "@angular/core"; import { I18nService } from "../../services/internationalisation.service"; -import { fv, longestVarParam } from "../../util"; +import { fv, longestVarParam } from "../../util/util"; import { MultiDimensionResults } from "../../results/multidimension-results"; import { VariatedDetails } from "jalhyd"; import { CalculatorResults } from "../../results/calculator-results"; diff --git a/src/app/formulaire/definition/form-pab.ts b/src/app/formulaire/definition/form-pab.ts index 85f423501..d27a62092 100644 --- a/src/app/formulaire/definition/form-pab.ts +++ b/src/app/formulaire/definition/form-pab.ts @@ -3,7 +3,7 @@ import { Pab, Result, VariatedDetails } from "jalhyd"; import { FormulaireDefinition } from "./form-definition"; import { PabResults } from "../../results/pab-results"; import { NgParameter } from "../elements/ngparam"; -import { longestVarParam } from "../../util"; +import { longestVarParam } from "../../util/util"; import { PabTable } from "../elements/pab-table"; /** diff --git a/src/app/formulaire/definition/form-prebarrage.ts b/src/app/formulaire/definition/form-prebarrage.ts index c9a0d9e0d..7aa507656 100644 --- a/src/app/formulaire/definition/form-prebarrage.ts +++ b/src/app/formulaire/definition/form-prebarrage.ts @@ -9,7 +9,7 @@ import { FieldsetContainer } from "../elements/fieldset-container"; import { CalculatorResults } from "../../results/calculator-results"; import { PrebarrageResults } from "../../results/prebarrage-results"; import { NgParameter } from "../elements/ngparam"; -import { longestVarParam } from "../../util"; +import { longestVarParam } from "../../util/util"; import { FormulaireNode } from "../elements/formulaire-node"; /** diff --git a/src/app/formulaire/elements/ngparam.ts b/src/app/formulaire/elements/ngparam.ts index e4dc902cd..a579f0141 100644 --- a/src/app/formulaire/elements/ngparam.ts +++ b/src/app/formulaire/elements/ngparam.ts @@ -8,7 +8,7 @@ import { sprintf } from "sprintf-js"; import { InputField } from "./input-field"; import { ServiceFactory } from "../../services/service-factory"; import { FormulaireNode } from "./formulaire-node"; -import { fv } from "../../util"; +import { fv } from "../../util/util"; export enum ParamRadioConfig { /** pas de radio, paramètre modifiable à la main uniquement */ diff --git a/src/app/formulaire/elements/select/select-field-searched-param.ts b/src/app/formulaire/elements/select/select-field-searched-param.ts index 339acbfe5..8811ef81f 100644 --- a/src/app/formulaire/elements/select/select-field-searched-param.ts +++ b/src/app/formulaire/elements/select/select-field-searched-param.ts @@ -1,5 +1,5 @@ import { ServiceFactory } from "app/services/service-factory"; -import { decodeHtml } from "app/util"; +import { decodeHtml } from "app/util/util"; import { acSection, Nub, Solveur } from "jalhyd"; import { SelectEntry } from "./select-entry"; import { SelectField } from "./select-field"; diff --git a/src/app/formulaire/elements/select/select-field-solveur-target.ts b/src/app/formulaire/elements/select/select-field-solveur-target.ts index b98546e22..3d752aa43 100644 --- a/src/app/formulaire/elements/select/select-field-solveur-target.ts +++ b/src/app/formulaire/elements/select/select-field-solveur-target.ts @@ -5,7 +5,7 @@ */ import { ServiceFactory } from "app/services/service-factory"; -import { decodeHtml } from "../../../util"; +import { decodeHtml } from "../../../util/util"; import { Session, Solveur } from "jalhyd"; import { SelectEntry } from "./select-entry"; import { SelectField } from "./select-field"; diff --git a/src/app/formulaire/elements/select/select-field-target-pass.ts b/src/app/formulaire/elements/select/select-field-target-pass.ts index 6383c02ff..8438e0a0f 100644 --- a/src/app/formulaire/elements/select/select-field-target-pass.ts +++ b/src/app/formulaire/elements/select/select-field-target-pass.ts @@ -1,5 +1,5 @@ import { ServiceFactory } from "app/services/service-factory"; -import { decodeHtml } from "app/util"; +import { decodeHtml } from "app/util/util"; import { CalculatorType, FishPass, Session, Verificateur } from "jalhyd"; import { FormulaireElement } from "../formulaire-element"; import { FormulaireNode } from "../formulaire-node"; diff --git a/src/app/formulaire/elements/select/select-field.ts b/src/app/formulaire/elements/select/select-field.ts index 2b9b65aa9..b45f59c42 100644 --- a/src/app/formulaire/elements/select/select-field.ts +++ b/src/app/formulaire/elements/select/select-field.ts @@ -1,6 +1,6 @@ import { Field } from "../field"; import { SelectEntry } from "./select-entry"; -import { arraysAreEqual } from "../../../util"; +import { arraysAreEqual } from "../../../util/util"; import { FormulaireNode } from "../formulaire-node"; import { ServiceFactory } from "app/services/service-factory"; import { FormulaireDefinition } from "../../definition/form-definition"; diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts index 37ff757b9..c8c814d89 100644 --- a/src/app/results/var-results.ts +++ b/src/app/results/var-results.ts @@ -2,7 +2,7 @@ import { CalculatedParamResults } from "./param-calc-results"; import { ServiceFactory } from "../services/service-factory"; import { PlottableData } from "./plottable-data"; import { ChartType } from "./chart-type"; -import { longestVarParam } from "../util"; +import { longestVarParam } from "../util/util"; import { FormulaireDefinition } from "../formulaire/definition/form-definition"; import { sprintf } from "sprintf-js"; diff --git a/src/app/services/internationalisation.service.ts b/src/app/services/internationalisation.service.ts index ea1bec8c3..deee494fe 100644 --- a/src/app/services/internationalisation.service.ts +++ b/src/app/services/internationalisation.service.ts @@ -5,7 +5,7 @@ import { Message, MessageCode, Observable, Observer, Nub, CalculatorType, PreBar import { StringMap } from "../stringmap"; import { ApplicationSetupService } from "./app-setup.service"; import { HttpService } from "./http.service"; -import { fv, decodeHtml } from "../util"; +import { fv, decodeHtml } from "../util/util"; import { ServiceFactory } from "./service-factory"; import { FormulaireService } from "./formulaire.service"; diff --git a/src/app/util.ts b/src/app/util/util.ts similarity index 98% rename from src/app/util.ts rename to src/app/util/util.ts index 763a425cb..ba2777eab 100644 --- a/src/app/util.ts +++ b/src/app/util/util.ts @@ -1,5 +1,5 @@ -import { NgParameter } from "./formulaire/elements/ngparam"; -import { ServiceFactory } from "./services/service-factory"; +import { NgParameter } from "../formulaire/elements/ngparam"; +import { ServiceFactory } from "../services/service-factory"; import { formattedValue, Nub, VariatedDetails, ParamDefinition, ParamValueMode, Result } from "jalhyd"; -- GitLab From 46b6f37f8b714d9af8976fc9f5933870b51e7176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 23 Feb 2023 09:10:42 +0100 Subject: [PATCH 170/285] refactor: move definedvalue to util refs #604 --- src/app/components/field-set/field-set.component.ts | 2 +- .../fieldset-container/fieldset-container.component.ts | 2 +- src/app/components/generic-calculator/calculator.component.ts | 2 +- src/app/components/generic-input/generic-input.component.ts | 2 +- src/app/components/pab-table/pab-table.component.ts | 2 +- src/app/components/pb-schema/pb-schema.component.ts | 2 +- src/app/{ => util}/definedvalue/definedboolean.ts | 0 src/app/{ => util}/definedvalue/definedvalue.ts | 0 8 files changed, 6 insertions(+), 6 deletions(-) rename src/app/{ => util}/definedvalue/definedboolean.ts (100%) rename src/app/{ => util}/definedvalue/definedvalue.ts (100%) diff --git a/src/app/components/field-set/field-set.component.ts b/src/app/components/field-set/field-set.component.ts index 448d40a7d..62b39960f 100644 --- a/src/app/components/field-set/field-set.component.ts +++ b/src/app/components/field-set/field-set.component.ts @@ -16,7 +16,7 @@ import { I18nService } from "../../services/internationalisation.service"; import { sprintf } from "sprintf-js"; import { capitalize } from "jalhyd"; -import { DefinedBoolean } from "app/definedvalue/definedboolean"; +import { DefinedBoolean } from "../../util/definedvalue/definedboolean"; @Component({ selector: "field-set", diff --git a/src/app/components/fieldset-container/fieldset-container.component.ts b/src/app/components/fieldset-container/fieldset-container.component.ts index 042df7517..e07c6514d 100644 --- a/src/app/components/fieldset-container/fieldset-container.component.ts +++ b/src/app/components/fieldset-container/fieldset-container.component.ts @@ -6,7 +6,7 @@ import { FieldSet } from "../../formulaire/elements/fieldset"; import { FormulaireDefinition } from "../../formulaire/definition/form-definition"; import { I18nService } from "../../services/internationalisation.service"; import { ApplicationSetupService } from "../../services/app-setup.service"; -import { DefinedBoolean } from "app/definedvalue/definedboolean"; +import { DefinedBoolean } from "../../util/definedvalue/definedboolean"; import { ParamValueMode } from "jalhyd"; @Component({ diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 40832d354..fe805f658 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -62,7 +62,7 @@ import { sprintf } from "sprintf-js"; import * as XLSX from "xlsx"; import { ServiceFactory } from "app/services/service-factory"; -import { DefinedBoolean } from "app/definedvalue/definedboolean"; +import { DefinedBoolean } from "../../util/definedvalue/definedboolean"; import { FormulaireCourbeRemous } from "app/formulaire/definition/form-courbe-remous"; import { RemousResults } from "app/results/remous-results"; diff --git a/src/app/components/generic-input/generic-input.component.ts b/src/app/components/generic-input/generic-input.component.ts index d95168143..281a11332 100644 --- a/src/app/components/generic-input/generic-input.component.ts +++ b/src/app/components/generic-input/generic-input.component.ts @@ -5,7 +5,7 @@ import { FormulaireDefinition } from "../../formulaire/definition/form-definitio import { NgParameter } from "../../formulaire/elements/ngparam"; import { I18nService } from "../../services/internationalisation.service"; import { ApplicationSetupService } from "../../services/app-setup.service"; -import { DefinedBoolean } from "app/definedvalue/definedboolean"; +import { DefinedBoolean } from "../../util/definedvalue/definedboolean"; /** * classe de gestion générique d'un champ de saisie avec titre, validation et message d'erreur diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index ead6072f1..dc2470aef 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -28,7 +28,7 @@ import { PabTable } from "../../formulaire/elements/pab-table"; import { DialogEditPabComponent } from "../dialog-edit-pab/dialog-edit-pab.component"; import { AppComponent } from "../../app.component"; import { NgParameter, ParamRadioConfig } from "../../formulaire/elements/ngparam"; -import { DefinedBoolean } from "app/definedvalue/definedboolean"; +import { DefinedBoolean } from "../../util/definedvalue/definedboolean"; /** * The big editable data grid for calculator type "Pab" (component) diff --git a/src/app/components/pb-schema/pb-schema.component.ts b/src/app/components/pb-schema/pb-schema.component.ts index 3ba8bf93d..ef424b22f 100644 --- a/src/app/components/pb-schema/pb-schema.component.ts +++ b/src/app/components/pb-schema/pb-schema.component.ts @@ -20,7 +20,7 @@ import { AppComponent } from "../../app.component"; import { fv } from "app/util/util"; import { ServiceFactory } from "app/services/service-factory"; -import { DefinedBoolean } from "app/definedvalue/definedboolean"; +import { DefinedBoolean } from "../../util/definedvalue/definedboolean"; import { PrebarrageService, PrebarrageServiceEvents } from "app/services/prebarrage.service"; /** diff --git a/src/app/definedvalue/definedboolean.ts b/src/app/util/definedvalue/definedboolean.ts similarity index 100% rename from src/app/definedvalue/definedboolean.ts rename to src/app/util/definedvalue/definedboolean.ts diff --git a/src/app/definedvalue/definedvalue.ts b/src/app/util/definedvalue/definedvalue.ts similarity index 100% rename from src/app/definedvalue/definedvalue.ts rename to src/app/util/definedvalue/definedvalue.ts -- GitLab From 904d24bea474dac56b36646c5a8e8a930e508ac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 23 Feb 2023 09:37:31 +0100 Subject: [PATCH 171/285] fix: warning on isNumber() refs #604 --- src/app/util/util.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/util/util.ts b/src/app/util/util.ts index ba2777eab..06db46788 100644 --- a/src/app/util/util.ts +++ b/src/app/util/util.ts @@ -13,7 +13,7 @@ export function logObject(obj: {}, m?: string) { } export function isNumber(s: string): boolean { - return Number(s) !== NaN; + return !Number.isNaN(Number(s)); } /** -- GitLab From 00e678074e54cbc3a3e0c5116e95000b30575559 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 23 Feb 2023 16:12:04 +0100 Subject: [PATCH 172/285] =?UTF-8?q?feat:=20add=20bidirectionnal=20subject?= =?UTF-8?q?=20(=C3=A0=20la=20RxJS)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refs #604 --- src/app/util/bidir_subject.ts | 131 ++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 src/app/util/bidir_subject.ts diff --git a/src/app/util/bidir_subject.ts b/src/app/util/bidir_subject.ts new file mode 100644 index 000000000..069e004e8 --- /dev/null +++ b/src/app/util/bidir_subject.ts @@ -0,0 +1,131 @@ +import { Observer, Subject, firstValueFrom, lastValueFrom } from "rxjs"; + +/** + * bi-directional subject (see RxJS Subject) + * Allows two objects to exchange messages in both directions. Each object has to choose a posting channel + * (messages will receive from the other one). + * + * source1 ----post-----> | channel 0 | --subscribe--> source2 + * <--subscribe-- | channel 1 | <-----post---- + * + * EventEmitter is not used since it is reserved to properties in Angular component with @Output annotation + */ +export class BidirectionalSubject<T> { + + // communication channels + private _channel0: Subject<T>; + private _channel1: Subject<T>; + + // array of "who chose which posting channel" + private _channel0Posters: any[] = []; + private _channel1Posters: any[] = []; + + constructor() { + this._channel0 = new Subject(); + this._channel1 = new Subject(); + } + + /** + * get posting channel index + * @param source object that chose one of the channels + */ + private getPostingChannelIndex(source: any) { + if (this._channel0Posters.indexOf(source) !== -1) { + return 0; + } + if (this._channel1Posters.indexOf(source) !== -1) { + return 1; + } + return -1; + } + + /** + * choose a posting channel + * @param source object that chooses the channel + * @param chan channel number + */ + public selectPostingChannel(source: any, chan: number) { + switch (chan) { + case 0: + if (this.getPostingChannelIndex(source) !== -1) { + throw new Error("object already has a selected channel"); + } + this._channel0Posters.push(source); + break; + + case 1: + if (this.getPostingChannelIndex(source) !== -1) { + throw new Error("object already has a selected channel"); + } + this._channel1Posters.push(source); + break; + + default: + throw new Error(`invalid channel number ${chan}`); + } + } + + /** + * remove a source from its channel + */ + public unselectPostingChannel(source: any) { + this._channel0Posters = this._channel0Posters.filter(o => o != source); + this._channel1Posters = this._channel1Posters.filter(o => o != source); + } + + /** + * used by a source to post a message to communication channel + */ + public post(source: any, msg: T) { + switch (this.getPostingChannelIndex(source)) { + case 0: + this._channel0.next(msg); + break; + + case 1: + this._channel1.next(msg); + break; + + case -1: + throw new Error("must select a channel first"); + } + } + + /** + * create a Promise representing a received message (when posted by another source) + * @param source object that will use the Promise + */ + public getReceivePromise(source: any): Promise<T> { + switch (this.getPostingChannelIndex(source)) { + case 0: + return firstValueFrom(this._channel1); + + case 1: + return firstValueFrom(this._channel0); + + case -1: + throw new Error("must select a channel first"); + } + } + + /** + * Add a message handler (provided by source) to process received messages + * (alternative to getReceivePromise()) + * @param source object providing handler + * @param handler message processing function + */ + public addHandler(source: any, handler: Observer<T>) { + switch (this.getPostingChannelIndex(source)) { + case 0: + this._channel1.subscribe(handler); + break; + + case 1: + this._channel0.subscribe(handler); + break; + + case -1: + throw new Error("must select a channel first"); + } + } +} -- GitLab From 4d3d919e80a49e944ba5bcc53614c8f514b15e52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 23 Feb 2023 16:13:56 +0100 Subject: [PATCH 173/285] feat: add a service to handle user confirmation through GUI refs #604 --- src/app/app.module.ts | 4 +- src/app/services/user-confirmation.service.ts | 69 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/app/services/user-confirmation.service.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 15eac9540..66a7231f2 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -127,6 +127,7 @@ import { SelectSectionDetailsComponent } from "./components/select-section-detai import { ServiceWorkerModule } from '@angular/service-worker'; import { environment } from '../environments/environment'; import { ServiceWorkerUpdateService } from "./services/service-worker-update.service"; +import { UserConfirmationService } from "./services/user-confirmation.service"; const appRoutes: Routes = [ { path: "list/search", component: CalculatorListComponent }, @@ -282,7 +283,8 @@ const appRoutes: Routes = [ provide: ErrorStateMatcher, useClass: ImmediateErrorStateMatcher }, - ServiceWorkerUpdateService + ServiceWorkerUpdateService, + UserConfirmationService ], schemas: [NO_ERRORS_SCHEMA], bootstrap: [AppComponent] diff --git a/src/app/services/user-confirmation.service.ts b/src/app/services/user-confirmation.service.ts new file mode 100644 index 000000000..d33beecbb --- /dev/null +++ b/src/app/services/user-confirmation.service.ts @@ -0,0 +1,69 @@ +import { Injectable } from "@angular/core"; + +import { BidirectionalSubject } from "app/util/bidir_subject"; +import { Observer } from "rxjs"; + +/** + * This service enables any class (even another service) to display a confirmation dialog on GUI ans get the user answer + */ +@Injectable() +export class UserConfirmationService { + + // used to communicate with UI component in charge of displaying confirmation dialog + // direction 0 : this + // direction 1 : UI + private _userConfirm: BidirectionalSubject<{}>; + + public constructor() { + this._userConfirm = new BidirectionalSubject<{}>(); + + // we choose communication canal 0, UI will use 1 + this._userConfirm.selectPostingChannel(this, 0); + } + + /** + * add subscription from UI + * @param source + */ + public subscribe(source: any) { + this._userConfirm.selectPostingChannel(source, 1); + } + + /** + * remove UI subscription + * @param source + */ + public unsubscribe(source: any) { + this._userConfirm.unselectPostingChannel(source); + } + + /** + * add a handler (provided bu UI) to confirmation request + * @param source normally, UI component + * @param obs processing function + */ + public addHandler(source: any, obs: Observer<boolean>) { + this._userConfirm.addHandler(source, obs) + } + + /** + * forward user confirmation from UI to requesting object + * @param confirm user confirmation status + */ + public postConfirmation(source: any, confirm: {}) { + this._userConfirm.post(source, confirm); + } + + /** + * forward to UI a request from source to ask a user confirmation with a dialog + * @param source object requesting confirmation + * @param title confirmation dialog title + * @param text confirmation dialog body text + * @returns a Promise resolving to a boolean holding user confirmation status + */ + public askUserConfirmation(title: string, text: string): Promise<{}> { + const ret = this._userConfirm.getReceivePromise(this); + this._userConfirm.post(this, { title: title, body: text }); // false or true, we don't care + return ret; + } +} -- GitLab From a37d07e5f4cf7d4e78b30b4656b5bc13bdd6377d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 23 Feb 2023 16:14:53 +0100 Subject: [PATCH 174/285] feat: add generic confirmation dialog component refs #604 --- src/app/app.module.ts | 2 + .../dialog-confirm.component.html | 12 ++++++ .../dialog-confirm.component.ts | 38 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 src/app/components/dialog-confirm/dialog-confirm.component.html create mode 100644 src/app/components/dialog-confirm/dialog-confirm.component.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 66a7231f2..5c912764c 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -96,6 +96,7 @@ import { JetTrajectoryChartComponent } from "./components/jet-trajectory-chart/j import { SessionPropertiesComponent } from "./components/session-properties/session-properties.component"; import { VerificateurResultsComponent } from "./components/verificateur-results/verificateur-results.component"; +import { DialogConfirmComponent } from "./components/dialog-confirm/dialog-confirm.component"; import { DialogConfirmEmptySessionComponent } from "./components/dialog-confirm-empty-session/dialog-confirm-empty-session.component"; import { DialogConfirmCloseCalcComponent } from "./components/dialog-confirm-close-calc/dialog-confirm-close-calc.component"; import { DialogEditPabComponent } from "./components/dialog-edit-pab/dialog-edit-pab.component"; @@ -209,6 +210,7 @@ const appRoutes: Routes = [ CalculatorResultsComponent, DialogConfirmCloseCalcComponent, DialogConfirmEmptySessionComponent, + DialogConfirmComponent, DialogEditPabComponent, DialogEditParamComputedComponent, DialogEditParamValuesComponent, diff --git a/src/app/components/dialog-confirm/dialog-confirm.component.html b/src/app/components/dialog-confirm/dialog-confirm.component.html new file mode 100644 index 000000000..1de1a1bae --- /dev/null +++ b/src/app/components/dialog-confirm/dialog-confirm.component.html @@ -0,0 +1,12 @@ +<h1 mat-dialog-title [innerHTML]="uitextTitle"></h1> +<div mat-dialog-content> + <p [innerHTML]="uitextBody"></p> +</div> +<div mat-dialog-actions [attr.align]="'end'"> + <button id="cancel" mat-raised-button color="primary" [mat-dialog-close]="false" cdkFocusInitial> + {{ uitextNo }} + </button> + <button id="confirm" mat-raised-button color="warn" [mat-dialog-close]="true"> + {{ uitextYes }} + </button> +</div> diff --git a/src/app/components/dialog-confirm/dialog-confirm.component.ts b/src/app/components/dialog-confirm/dialog-confirm.component.ts new file mode 100644 index 000000000..f8cefaa25 --- /dev/null +++ b/src/app/components/dialog-confirm/dialog-confirm.component.ts @@ -0,0 +1,38 @@ +import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog"; +import { Inject, Component } from "@angular/core"; +import { I18nService } from "../../services/internationalisation.service"; + +@Component({ + selector: "dialog-confirm", + templateUrl: "dialog-confirm.component.html", +}) +export class DialogConfirmComponent { + + private _title: string; + private _text: string; + + constructor( + public dialogRef: MatDialogRef<DialogConfirmComponent>, + private intlService: I18nService, + @Inject(MAT_DIALOG_DATA) public data: any + ) { + this._title = data.title; + this._text = data.text; + } + + public get uitextYes() { + return this.intlService.localizeText("INFO_OPTION_YES"); + } + + public get uitextNo() { + return this.intlService.localizeText("INFO_OPTION_NO"); + } + + public get uitextTitle() { + return this._title; + } + + public get uitextBody() { + return this._text; + } +} -- GitLab From 2b5c5af483428760df5873ed362700698f19820d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 23 Feb 2023 16:16:05 +0100 Subject: [PATCH 175/285] refactor: app component: process confirmation requests from UserConfirmationService refs #604 --- src/app/app.component.ts | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 0df6289bd..84666d8ee 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -33,7 +33,8 @@ import { saveAs } from "file-saver"; import * as XLSX from "xlsx"; import * as pako from "pako"; -import { ServiceWorkerUpdateService } from "./services/service-worker-update.service"; +import { DialogConfirmComponent } from "./components/dialog-confirm/dialog-confirm.component"; +import { UserConfirmationService } from "./services/user-confirmation.service"; @Component({ selector: "nghyd-app", @@ -85,7 +86,8 @@ export class AppComponent implements OnInit, OnDestroy, Observer { private confirmCloseCalcDialog: MatDialog, private hotkeysService: HotkeysService, private matomoTracker: MatomoTracker, - private serviceWorkerUpdateService: ServiceWorkerUpdateService + private confirmDialog: MatDialog, + private userConfirmationService: UserConfirmationService ) { ServiceFactory.httpService = httpService; ServiceFactory.applicationSetupService = appSetupService; @@ -218,10 +220,23 @@ export class AppComponent implements OnInit, OnDestroy, Observer { ngOnInit() { this.formulaireService.addObserver(this); this._innerWidth = window.innerWidth; + + // Initialise communication with UserConfirmationService. + // When receiving a message from it, open a dialog to ask user to confirm. + // Will then reply to UserConfirmationService with a message holding confirmation status. + this.userConfirmationService.subscribe(this); + this.userConfirmationService.addHandler(this, { + next: (data) => this.displayConfirmationDialog(data["title"], data["body"]), + error: () => { }, + complete: () => { }, + }); } ngOnDestroy() { this.formulaireService.removeObserver(this); + + // cancel communication link with UserConfirmationService + this.userConfirmationService.unsubscribe(this); } @HostListener("window:resize", ["$event"]) @@ -809,4 +824,24 @@ export class AppComponent implements OnInit, OnDestroy, Observer { } } } + + /** + * display a confirmation display upon request from UserConfirmationService + */ + private displayConfirmationDialog(title: string, text: string) { + const dialogRef = this.confirmDialog.open( + DialogConfirmComponent, + { + data: { + title: title, + text: text + }, + disableClose: true + } + ); + dialogRef.afterClosed().subscribe(result => { + // reply to UserConfirmationService + this.userConfirmationService.postConfirmation(this, { "confirm": result }); + }); + } } -- GitLab From 37600fabce1b3e38465c9fb93653e12d856f0289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 23 Feb 2023 16:25:35 +0100 Subject: [PATCH 176/285] refactor: service worker: display confirmation dialog when application update is ready refs #604 --- .../services/service-worker-update.service.ts | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/app/services/service-worker-update.service.ts b/src/app/services/service-worker-update.service.ts index 47b47c9ed..95b3cdd66 100644 --- a/src/app/services/service-worker-update.service.ts +++ b/src/app/services/service-worker-update.service.ts @@ -1,27 +1,29 @@ import { Injectable } from "@angular/core"; -import { SwUpdate, VersionEvent } from '@angular/service-worker'; +import { SwUpdate } from '@angular/service-worker'; import { I18nService } from "./internationalisation.service"; import { NotificationsService } from "./notifications.service"; +import { UserConfirmationService } from "./user-confirmation.service"; @Injectable() export class ServiceWorkerUpdateService { constructor( private swUpdate: SwUpdate, private notificationService: NotificationsService, - private i18nService: I18nService + private i18nService: I18nService, + private userConfirmationService: UserConfirmationService ) { swUpdate.versionUpdates.subscribe(evt => { switch (evt.type) { case 'VERSION_DETECTED': let ver = (evt as any).version?.appData?.version ?? "<NA>"; - console.log("SwUpdate VERSION_DETECTED", ver); + console.log("ServiceWorkerUpdateService: VERSION_DETECTED", ver); notificationService.notify(i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_DETECTED", { "ver": ver }), 10000); break; case 'VERSION_READY': const currVer = (evt as any).currentVersion?.appData?.version ?? "<NA>"; const newVer = (evt as any).latestVersion?.appData?.version ?? "<NA>"; - console.log("SwUpdate VERSION_READY", currVer, newVer); + console.log("ServiceWorkerUpdateService: VERSION_READY", currVer, "->", newVer); notificationService.notify(i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_READY", { "ver": newVer }), 10000); // PLANTE si on stocke le message dans une variable !!!! @@ -29,17 +31,28 @@ export class ServiceWorkerUpdateService { // notificationService.notify(msg, 10000); // -> ReferenceError: can't access lexical declaration 'xxx' before initialization // avec xxx qui varie d'une fois à l'autre !!! + + userConfirmationService.askUserConfirmation("Confirmation", + i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_READY", { "ver": newVer })).then(data => { + if (data["confirm"]) { + console.log("ServiceWorkerUpdateService: application update confirmed"); + window.location.reload(); + } + else { + console.log("ServiceWorkerUpdateService: application update canceled"); + } + }); break; case 'VERSION_INSTALLATION_FAILED': ver = (evt as any).version?.appData?.version ?? "NA"; - console.log("SwUpdate VERSION_INSTALLATION_FAILED", ver); + console.log("ServiceWorkerUpdateService: VERSION_INSTALLATION_FAILED", ver); notificationService.notify(i18nService.localizeText("ERROR_SERVICE_WORKER_INSTALL_FAILED", { "ver": ver }), 10000); break; } }); swUpdate.unrecoverable.subscribe(event => { - console.log("SwUpdate.unrecoverable", event.reason, event.type); + console.log("SwUpdate.unrecoverable reason", event.reason, "type", event.type); notificationService.notify("SwUpdate: unrecoverable state. Reason=" + event.reason + ", type=" + event.type, 10000); }); } -- GitLab From 1761b3ca3d331a36e19d32298a74047f588f3f47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 24 Feb 2023 12:51:28 +0100 Subject: [PATCH 177/285] fix: manually register ngsw-worker.js (Angular service worker) refs #604 --- src/main.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main.ts b/src/main.ts index 066830176..28da08b5b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -11,5 +11,9 @@ if (environment.production) { enableProdMode(); } -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.log(err)); +platformBrowserDynamic().bootstrapModule(AppModule).then(() => { + if ('serviceWorker' in navigator && environment.production) { + console.log("Registering ngsw-worker.js..."); + navigator.serviceWorker.register('ngsw-worker.js'); + } +}).catch(err => console.log(err)); -- GitLab From be94a75d9df76c7df2cb234edf4232bbd7fb380c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 24 Feb 2023 13:31:29 +0100 Subject: [PATCH 178/285] fix: force service worker to check for available updates refs #604 --- .../services/service-worker-update.service.ts | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/app/services/service-worker-update.service.ts b/src/app/services/service-worker-update.service.ts index 95b3cdd66..163fd4a12 100644 --- a/src/app/services/service-worker-update.service.ts +++ b/src/app/services/service-worker-update.service.ts @@ -1,8 +1,9 @@ -import { Injectable } from "@angular/core"; +import { Injectable, NgZone } from "@angular/core"; import { SwUpdate } from '@angular/service-worker'; import { I18nService } from "./internationalisation.service"; import { NotificationsService } from "./notifications.service"; import { UserConfirmationService } from "./user-confirmation.service"; +import { interval } from "rxjs"; @Injectable() export class ServiceWorkerUpdateService { @@ -10,9 +11,23 @@ export class ServiceWorkerUpdateService { private swUpdate: SwUpdate, private notificationService: NotificationsService, private i18nService: I18nService, - private userConfirmationService: UserConfirmationService + private userConfirmationService: UserConfirmationService, + private ngZone: NgZone ) { - swUpdate.versionUpdates.subscribe(evt => { + if (this.swUpdate.isEnabled) { + this.ngZone.runOutsideAngular(() => + interval(1000 * 60 * 60).subscribe(val => { + console.log('ServiceWorkerUpdateService: checking for updates...') + swUpdate.checkForUpdate().then(b => { + console.log("ServiceWorkerUpdateService: " + (b ? "new version found" : "no new version")); + }); + }) + ); + } else { + console.log("ServiceWorkerUpdateService: SwUpdate is disabled"); + } + + this.swUpdate.versionUpdates.subscribe(evt => { switch (evt.type) { case 'VERSION_DETECTED': let ver = (evt as any).version?.appData?.version ?? "<NA>"; -- GitLab From 3de02bcc1ac7b92634e3341ce3e92528a80d2f99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 24 Feb 2023 13:33:48 +0100 Subject: [PATCH 179/285] refactor: add service worker update service to service factory refs #604 --- src/app/app.component.ts | 3 +++ src/app/services/service-factory.ts | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 84666d8ee..de541dcec 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -35,6 +35,7 @@ import * as XLSX from "xlsx"; import * as pako from "pako"; import { DialogConfirmComponent } from "./components/dialog-confirm/dialog-confirm.component"; import { UserConfirmationService } from "./services/user-confirmation.service"; +import { ServiceWorkerUpdateService } from "./services/service-worker-update.service"; @Component({ selector: "nghyd-app", @@ -87,6 +88,7 @@ export class AppComponent implements OnInit, OnDestroy, Observer { private hotkeysService: HotkeysService, private matomoTracker: MatomoTracker, private confirmDialog: MatDialog, + private serviceWorkerUpdateService: ServiceWorkerUpdateService, private userConfirmationService: UserConfirmationService ) { ServiceFactory.httpService = httpService; @@ -94,6 +96,7 @@ export class AppComponent implements OnInit, OnDestroy, Observer { ServiceFactory.i18nService = intlService; ServiceFactory.formulaireService = formulaireService; ServiceFactory.notificationsService = notificationsService; + ServiceFactory.serviceWorkerUpdateService = serviceWorkerUpdateService; if (!isDevMode()) { // évite de mettre en place un bandeau RGPD diff --git a/src/app/services/service-factory.ts b/src/app/services/service-factory.ts index e3ea55cae..668d5aea1 100644 --- a/src/app/services/service-factory.ts +++ b/src/app/services/service-factory.ts @@ -4,6 +4,7 @@ import { I18nService } from "./internationalisation.service"; import { HttpService } from "./http.service"; import { NotificationsService } from "./notifications.service"; import { PrebarrageService } from "./prebarrage.service"; +import { ServiceWorkerUpdateService } from "./service-worker-update.service"; /** * A "Singleton" the TS way, that holds pointers to all services, to be accessed @@ -17,11 +18,13 @@ export const ServiceFactory: { httpService: HttpService; notificationsService: NotificationsService; prebarrageService: PrebarrageService; + serviceWorkerUpdateService: ServiceWorkerUpdateService; } = { applicationSetupService: undefined, formulaireService: undefined, i18nService: undefined, httpService: undefined, notificationsService: undefined, - prebarrageService: undefined + prebarrageService: undefined, + serviceWorkerUpdateService: undefined }; -- GitLab From 56be0ca0095433beeb07e19e0e284c7a251d7c10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 27 Feb 2023 16:49:49 +0100 Subject: [PATCH 180/285] chore: modify build to use base href (for dev versions, not production) refs #604 --- .gitlab-ci.yml | 29 +++++++++++++++++++++++------ package.json | 1 + scripts/deploy-version.sh | 8 -------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ed146e000..162862386 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,8 @@ stages: - install - test - - build + - build-dev + - build-prod - clean-stale-branches - deploy-dev - deploy-prod @@ -79,8 +80,24 @@ test: script: - npm run e2e -build: - stage: build +build-dev: + stage: build-dev + only: + - pushes + - tags + - schedules + - web + artifacts: + expire_in: 10 min + paths: + - dist/ + script: + # -baseref option is used by npm to set the npm_config_basehref environment variable + # used in package.json + - npm run build-href -basehref=/cassiopee/$CI_COMMIT_REF_NAME/ + +build-prod: + stage: build-prod only: - pushes - tags @@ -109,7 +126,7 @@ deploy-dev: - tags - web dependencies: - - build + - build-dev script: # Copie de la branche / du tag - ./scripts/deploy-version.sh $CI_COMMIT_REF_NAME $DEV_LOGIN $DEV_HOST $DEV_PATH @@ -120,7 +137,7 @@ deploy-ovh-dev: only: - devel dependencies: - - build + - build-prod script: # Copie de la branche / du tag - ./scripts/deploy-version.sh prod-devel $PROD_LOGIN $PROD_HOST $PROD_DEV_PATH @@ -131,7 +148,7 @@ deploy-prod: variables: - $CI_COMMIT_REF_NAME == "stable" dependencies: - - build + - build-prod script: - ./scripts/deploy-version.sh prod $PROD_LOGIN $PROD_HOST $PROD_PATH diff --git a/package.json b/package.json index 47e5d0349..59d30e848 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 0.0.0.0 --poll 5000", "build-no-pdf": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production", "build": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production && npm run mkdocs2pdf", + "build-href": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production --base-href=$npm_config_basehref && npm run mkdocs2pdf", "update-dist-index-mimetypes": "node scripts/update-dist-index-mimetypes.js", "electron": "npm run update-dist-index-mimetypes && \"node_modules/.bin/electron\" .", "release-linux-nocompile": "npm run update-dist-index-mimetypes && \"node_modules/.bin/electron-builder\"", diff --git a/scripts/deploy-version.sh b/scripts/deploy-version.sh index 4221e281b..4d5bd0687 100755 --- a/scripts/deploy-version.sh +++ b/scripts/deploy-version.sh @@ -35,10 +35,6 @@ echo "$(basename $0): deploying version $VERSION in $LOGIN@$HOST:$DIR" if [[ $VERSION == "prod" || $VERSION == "prod-devel" ]]; then display_local_href - # Modification du dossier base href -> / - echo "updating index.html base href to /" - sed -i '/<base/s/href="[^"]*"/href="\/"/' $LOCAL_DIR/index.html - # Copie de la branche production rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" $LOCAL_DIR/ ${LOGIN}@${HOST}:${DIR}/ @@ -46,10 +42,6 @@ if [[ $VERSION == "prod" || $VERSION == "prod-devel" ]]; then else display_local_href - # Modification du dossier base href -> /cassiopee/version/ - echo "updating index.html base href to /cassiopee/$VERSION/" - sed -i "/<base/s/href=\"[^\"]*\"/href=\"\/cassiopee\/$VERSION\/\"/" $LOCAL_DIR/index.html - # Copie de la branche / du tag rsync -a --delete --exclude=cassiopee-releases -e "ssh -o StrictHostKeyChecking=no" $LOCAL_DIR/ "$LOGIN@$HOST:$DIR/$VERSION" -- GitLab From a617db08b94813fbcb3bbcff6884d5e7913fce2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 28 Feb 2023 10:30:40 +0100 Subject: [PATCH 181/285] fix(ci): wrong conditions for project building refs #604 --- .gitlab-ci.yml | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 162862386..d3502479b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -80,13 +80,8 @@ test: script: - npm run e2e -build-dev: - stage: build-dev - only: - - pushes - - tags - - schedules - - web +.build: + stage: build artifacts: expire_in: 10 min paths: @@ -94,21 +89,25 @@ build-dev: script: # -baseref option is used by npm to set the npm_config_basehref environment variable # used in package.json - - npm run build-href -basehref=/cassiopee/$CI_COMMIT_REF_NAME/ + - npm run build-href -basehref=$BASEHREF -build-prod: - stage: build-prod +build-dev: + extends: .build only: - - pushes - tags + - pushes - schedules - web - artifacts: - expire_in: 10 min - paths: - - dist/ - script: - - npm run build + variables: + - BASEHREF=/cassiopee/$CI_COMMIT_REF_NAME/ + +build-prod: + extends: .build + only: + - tags + - devel + variables: + - BASEHREF=/ clean-stale-branches: stage: clean-stale-branches -- GitLab From c4ba963242d1085fc2cd84b0a31a2e5b0a3e8387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 28 Feb 2023 10:40:48 +0100 Subject: [PATCH 182/285] feat: display nghyd,jalhyd revisions in console refs #604 --- src/app/app.component.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index de541dcec..0e1044ac6 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -223,6 +223,7 @@ export class AppComponent implements OnInit, OnDestroy, Observer { ngOnInit() { this.formulaireService.addObserver(this); this._innerWidth = window.innerWidth; + this.logRevisionInfo(); // Initialise communication with UserConfirmationService. // When receiving a message from it, open a dialog to ask user to confirm. @@ -688,6 +689,12 @@ export class AppComponent implements OnInit, OnDestroy, Observer { }; } + private logRevisionInfo() { + const ri = this.revisionInfo; + console.log("JaLHyd", ri.jalhyd.date, ri.jalhyd.version); + console.log("ngHyd", ri.nghyd.date, ri.nghyd.version); + } + /** * sauvegarde du/des formulaires * @param form formulaire à sélectionner par défaut dans la liste -- GitLab From 8e5e48be139d0311e7a411f2f3b34347800730f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 28 Feb 2023 10:46:52 +0100 Subject: [PATCH 183/285] fix(ci): invalid variables syntax refs #604 --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d3502479b..8eab60c79 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -99,7 +99,7 @@ build-dev: - schedules - web variables: - - BASEHREF=/cassiopee/$CI_COMMIT_REF_NAME/ + BASEHREF: "/cassiopee/$CI_COMMIT_REF_NAME/" build-prod: extends: .build @@ -107,7 +107,7 @@ build-prod: - tags - devel variables: - - BASEHREF=/ + BASEHREF: "/" clean-stale-branches: stage: clean-stale-branches -- GitLab From 7f5d19dc5f082ee08c17d902fb396a700b2fc25a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 28 Feb 2023 10:59:29 +0100 Subject: [PATCH 184/285] fix(ci): invalid stage names refs #604 --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8eab60c79..92811cedb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,8 +1,7 @@ stages: - install - test - - build-dev - - build-prod + - build - clean-stale-branches - deploy-dev - deploy-prod -- GitLab From e143ed562c61bd18ed7b781ebbbd2ef3fd7bca30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 28 Feb 2023 12:48:42 +0100 Subject: [PATCH 185/285] test(e2e): check that input empty in empty fields mode when modifying the target module refs #601 --- e2e/solveur.e2e-spec.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 281aeec5a..9c7160e07 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -375,4 +375,34 @@ describe("Solveur - nghyd#601 without empty fields option", () => { await calcPage.checkEmptyInput("Xinit", false); await browser.sleep(200); }); + + it(" with empty fields option, check selecting a target module does not fill inputs", async () => { + // disable evil option "empty fields on module creation" + await prefPage.setEmptyFields(false); + await browser.sleep(200); + + await navBar.clickNewCalculatorButton(); + await browser.sleep(200); + + // open "channel flow with hydraulic structures" example + const examples = await element.all(by.css("#examples-list .load-example")); + await examples[1].click(); + await browser.sleep(500); + + // close existing "solver" calculator + await navBar.middleClickCalculatorTab(3); + await browser.sleep(500); + + // open new solver calculator + await openSolver(); + await browser.sleep(500); + + // select other target module + const ntc = calcPage.getSelectById("select_target_nub"); + await calcPage.changeSelectValue(ntc, 1); + + // check target value input is empty + await calcPage.checkEmptyInput("Ytarget", true); + await browser.sleep(200); + }); }); -- GitLab From 56759310114d05f9a4ed1c9ca03248bfd03480d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Mar 2023 10:43:38 +0100 Subject: [PATCH 186/285] fix: FieldSet.updateFields(): update inputs with nub values in case clearing is not forced refs #601 --- src/app/formulaire/elements/fieldset.ts | 29 +++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 7b709eb76..73e6b8535 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -4,7 +4,8 @@ import { IProperties, Observer, Nub, - enumValueFromString + enumValueFromString, + ParamValueMode } from "jalhyd"; import { FormulaireElement } from "./formulaire-element"; @@ -215,8 +216,32 @@ export class FieldSet extends FormulaireElement implements IProperties { public updateFields(forceClear: boolean) { if (forceClear) { this.clearFields(); + this.parseFields(); } - this.parseFields(); + else { + const nub = this.parentForm.currentNub; + for (const e of this.parentForm.allFormElements) { + if (e instanceof NgParameter) { + const p: ParamDefinition = nub.getParameter(e.symbol); + switch (e.paramDefinition.valueMode) { + case ParamValueMode.SINGLE: + e.setValue(this, p.singleValue); + break; + + case ParamValueMode.MINMAX: + e.setMinValue(this, p.min); + e.setMaxValue(this, p.max); + e.setStepValue(this, p.step); + break; + + case ParamValueMode.LISTE: + e.setValueList(this, p.valueList); + break; + } + } + } + } + this.updateLocalisation(); // for all select fields known by the form, set selected value -- GitLab From 6b533b601ff6a56388b8c9e4c14bb8f250770d7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Mar 2023 14:33:05 +0100 Subject: [PATCH 187/285] fix(e2e): solver: wrong 'empty field' option value refs #601 --- e2e/solveur.e2e-spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index e6956e3a6..8c8383565 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -377,8 +377,8 @@ describe("Solveur - nghyd#601 without empty fields option", () => { }); it(" with empty fields option, check selecting a target module does not fill inputs", async () => { - // disable evil option "empty fields on module creation" - await prefPage.setEmptyFields(false); + // enable evil option "empty fields on module creation" + await prefPage.setEmptyFields(true); await browser.sleep(200); await navBar.clickNewCalculatorButton(); @@ -399,7 +399,7 @@ describe("Solveur - nghyd#601 without empty fields option", () => { // select other target module const ntc = calcPage.getSelectById("select_target_nub"); - await calcPage.changeSelectValue(ntc, 1); + await changeSelectValue(ntc, 1); // check target value input is empty await calcPage.checkEmptyInput("Ytarget", true); -- GitLab From 5b6ccdcb6a03b67bc193dbc380c5542b7fa0626a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Mar 2023 14:33:51 +0100 Subject: [PATCH 188/285] update jalhyd_branch to 342-solveur-multimodule-le-module-existe-toujours-apres-suppression refs #601 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index cf4a15c27..50cc6a0b1 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -215-conduites-en-charge-ajouter-loi-de-strickler-exercice-dans-livre-de-bennis +342-solveur-multimodule-le-module-existe-toujours-apres-suppression -- GitLab From a9822a466b8097e41bb4fec422d70c98946ce831 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Mar 2023 14:34:13 +0100 Subject: [PATCH 189/285] fix: solver form: in empty fields mode, selecting a different target module does not leave unchanged the target Y field refs #601 --- src/app/formulaire/definition/form-solveur.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/app/formulaire/definition/form-solveur.ts b/src/app/formulaire/definition/form-solveur.ts index 1bc0f0b82..4052054a6 100644 --- a/src/app/formulaire/definition/form-solveur.ts +++ b/src/app/formulaire/definition/form-solveur.ts @@ -1,4 +1,4 @@ -import { IObservable, ParamDefinition, Nub, Props, Solveur } from "jalhyd"; +import { IObservable, ParamDefinition, Nub, Props, Solveur, SolveurParams } from "jalhyd"; import { NgParameter } from "../elements/ngparam"; import { FormulaireFixedVar } from "./form-fixedvar"; @@ -60,6 +60,16 @@ export class FormulaireSolveur extends FormulaireFixedVar { // copied from FormFixedVar, to avoid calling super.update() else if (data.action === "propertyChange") { this.reset(); + if (data.name === "nubToCalculate") { + const n = (this.currentNub as Solveur).nubToCalculate; + if (n !== undefined) { + const prms: SolveurParams = this.currentNub.prms as SolveurParams; + // update Ytarget + if (prms.Ytarget.singleValue === undefined && !ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit) { + prms.Ytarget.singleValue = n.calculatedParam.singleValue; + } + } + } } else if (sender instanceof SelectField) { if (sender.id === "select_target_nub" && data.action === "select") { -- GitLab From 12635d844f42e2c0be790fbc091b4e452a015eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 2 Mar 2023 10:58:29 +0100 Subject: [PATCH 190/285] fix: PAB table: column selection not working on header second line (type, parameters, value) refs #607 --- src/app/components/pab-table/pab-table.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/pab-table/pab-table.component.html b/src/app/components/pab-table/pab-table.component.html index 3f2722eb2..d3b0c017e 100644 --- a/src/app/components/pab-table/pab-table.component.html +++ b/src/app/components/pab-table/pab-table.component.html @@ -66,7 +66,7 @@ </th> </tr> <tr *ngFor="let col of columns"> - <th *ngFor="let cell of col.cells" (click)="toggleSelection(col, $event)" + <th *ngFor="let cell of col.cells" (click)="toggleSelection(cell, $event)" (mousedown)="preventCtrlClickBorder($event)" [class.selectable-cell]="isSelectable(cell)" [class.selected-cell]="isSelected(cell)" [attr.rowspan]="rowSpan(cell)" [attr.colspan]="colSpan(cell)" [title]="cellTitle(cell)"> -- GitLab From f6f4548a1fbe8673cf47913da69cf1b826f18926 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 2 Mar 2023 11:32:38 +0100 Subject: [PATCH 191/285] fix: PAB table: copy button not working refs #607 --- src/app/components/pab-table/pab-table.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index c07ae0282..f06c1b536 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -969,7 +969,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni for (let i = 0; i < this.childrenToAdd; i++) { for (const si of this.selectedItems) { const newChild = Session.getInstance().createNub( - si.properties.clone(), + si, si.parent ); // copy parameter values @@ -982,7 +982,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni if (si instanceof ParallelStructure) { for (const c of si.getChildren()) { const newGrandChild = Session.getInstance().createNub( - c.properties.clone(), + c, newChild ); // copy children parameters values -- GitLab From 74dbe94f6e09de2b11b674dedf16f1675180b8f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 2 Mar 2023 16:39:10 +0100 Subject: [PATCH 192/285] refactor(doc): improve PDF generation refs #604 --- .gitignore | 1 + README.md | 2 +- scripts/mkdocs2pdf.py | 77 +++++++++++++++++++++++-------------------- 3 files changed, 44 insertions(+), 36 deletions(-) diff --git a/.gitignore b/.gitignore index 5bd2d8af3..d484f6a04 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ /src/assets/docs /release /build +/docs/pdf_build # dependencies /node_modules diff --git a/README.md b/README.md index 5750c79b6..0fc8a9725 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Requirements for developping Cassiopee can be achieved by manually install the r * npm * python3 * pandoc ^2 (optional, for PDF documentation only) - * texlive (optional, for PDF documentation only) + * texlive, texlive-bibtex-extra, texlive-latex-extra, latexmk (optional, for PDF documentation only) Building the HTML documentation requires MkDocs and some extensions: diff --git a/scripts/mkdocs2pdf.py b/scripts/mkdocs2pdf.py index 6e3cf6804..37deb6a8f 100644 --- a/scripts/mkdocs2pdf.py +++ b/scripts/mkdocs2pdf.py @@ -20,6 +20,9 @@ import yaml import re import shutil +# verbose output +verbose = False + baseDir = os.getcwd() buildDir = os.path.join(baseDir, 'build') latexSourceDir = os.path.join(baseDir, 'docs/latex') @@ -38,6 +41,21 @@ def runCommand(cmd): if os.waitstatus_to_exitcode(os.system(cmd)) != 0: raise RuntimeError("error executing:",cmd) +# Create a symbolic link +def createLink(src): + # check if destination already exists + dest = os.path.basename(src) + if os.path.exists(dest): + if not os.path.islink(dest): + raise Exception('{} exists but is not a symbolic link'.format(dest)) + else: + runCommand('ln -s {}'.format(src)) + +def createEmptyDir(path): + if os.path.exists(path): + shutil.rmtree(path) + os.makedirs(path) + # Reads an MkDocs configuration file def readConfig(sYAML): f = open(sYAML, 'r') @@ -130,9 +148,14 @@ def convertMdToTex(filePath): def getLatexModel(): # Clone Git repository os.chdir(pdfBuildDir) - runCommand( - 'git clone {} {}'.format(latexModelRepository, latexModelDir) - ) + if os.path.isdir(latexModelDir): + # git directory exists, update it + os.chdir(latexModelDir) + runCommand('git pull') + # platform independent "cd .." + os.chdir(os.path.dirname(os.getcwd())) + else: + runCommand('git clone {} {}'.format(latexModelRepository, latexModelDir)) # back to original working drectory os.chdir(baseDir) @@ -146,35 +169,17 @@ def injectContentIntoModel(mergedDocFilenameTex, lang): # Symlink necessary resources os.chdir(modelDir) relPathToMergedTexDoc = os.path.join('..', mergedDocFilenameTex) - runCommand( - 'ln -s {} .'.format(relPathToMergedTexDoc) - ) + createLink(relPathToMergedTexDoc) latexTemplate = filenamePrefix + lang + '.tex' relPathToLatexTemplate = os.path.join(latexSourceDir, latexTemplate) - runCommand( - 'ln -s {}'.format(relPathToLatexTemplate) - ) - runCommand( - 'ln -s {}'.format(os.path.join(latexSourceDir, 'logo_pole.png')) - ) - runCommand( - 'ln -s {}/schema_rugosite_fond.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam')) - ) - runCommand( - 'ln -s {}/bloc_cylindre.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam')) - ) - runCommand( - 'ln -s {}/bloc_face_arrondie.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam')) - ) - runCommand( - 'ln -s {}/bloc_base_carree.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam')) - ) - runCommand( - 'rm rapport_inrae/logos.tex' - ) - runCommand( - 'ln -s {} rapport_inrae/'.format(os.path.join(latexSourceDir, 'logos.tex')) - ) + createLink(relPathToLatexTemplate) + createLink(os.path.join(latexSourceDir, 'logo_pole.png')) + createLink('{}/schema_rugosite_fond.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam'))) + createLink('{}/bloc_cylindre.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam'))) + createLink('{}/bloc_face_arrondie.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam'))) + createLink('{}/bloc_base_carree.png'.format(os.path.join(baseDir, 'docs', lang, 'calculators', 'pam'))) + runCommand('rm rapport_inrae/logos.tex') + createLink('{} rapport_inrae/'.format(os.path.join(latexSourceDir, 'logos.tex'))) # back to original working drectory os.chdir(baseDir) @@ -189,9 +194,11 @@ def buildPDF(lang): cvt = os.path.join(buildDir, 'cassiopee_version.tex') shutil.copy(cvt, modelDir) - os.system( - 'latexmk -f -xelatex -pdf -interaction=nonstopmode {} > /dev/null 2>&1'.format(sourceTexFile) - ) + if verbose: + os.system('latexmk -f -xelatex -pdf -interaction=nonstopmode {} > /dev/null'.format(sourceTexFile)) + else: + os.system('latexmk -f -xelatex -pdf -interaction=nonstopmode {} > /dev/null 2>&1'.format(sourceTexFile)) + # copy generated PDF to release directory shutil.copy(outputPdfFile, outputDir) # back to original working drectory @@ -201,9 +208,9 @@ def buildPDF(lang): def buildDocForLang(lang): # Prepare temporary build directory - os.makedirs(pdfBuildDir, exist_ok=True) + createEmptyDir(pdfBuildDir) # Prepare output directory - os.makedirs(outputDir, exist_ok=True) + createEmptyDir(outputDir) # Read config yamlPath = 'mkdocs/mkdocs-' + lang + '.yml' -- GitLab From 6de41fa5a2fc1c849ca7374b1f61a531e3b45568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 2 Mar 2023 16:40:11 +0100 Subject: [PATCH 193/285] refactor(chore): simplify package.json build scripts refs #604 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 59d30e848..b7cf7d4e8 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "preprocess": "mkdir -p build; node scripts/preprocessors.js; npm run service-worker-version; bash scripts/fix-chartjs-plugin-zoom-2.0.0.sh", "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 0.0.0.0 --poll 5000", "build-no-pdf": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production", - "build": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production && npm run mkdocs2pdf", + "build": "npm run build-href -basehref=/", "build-href": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production --base-href=$npm_config_basehref && npm run mkdocs2pdf", "update-dist-index-mimetypes": "node scripts/update-dist-index-mimetypes.js", "electron": "npm run update-dist-index-mimetypes && \"node_modules/.bin/electron\" .", -- GitLab From 81b39985b5397b081fd045db07014c0201314627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 3 Mar 2023 08:04:57 +0100 Subject: [PATCH 194/285] test(e2e): check that notes are displayed properly refs #602 --- e2e/notes.e2e-spec.ts | 92 +++++++++++++++++++++++++++++++++++++++++++ e2e/sidenav.po.ts | 10 +++++ 2 files changed, 102 insertions(+) create mode 100644 e2e/notes.e2e-spec.ts diff --git a/e2e/notes.e2e-spec.ts b/e2e/notes.e2e-spec.ts new file mode 100644 index 000000000..2419119a8 --- /dev/null +++ b/e2e/notes.e2e-spec.ts @@ -0,0 +1,92 @@ +import { browser, by, element } from "protractor"; +import { AppPage } from "./app.po"; +import { Navbar } from "./navbar.po"; +import { ListPage } from "./list.po"; +import { SideNav } from "./sidenav.po"; + +describe("check calculator notes", () => { + let startPage: AppPage; + let navBar: Navbar; + let listPage: ListPage; + let sidenav: SideNav; + + beforeEach(() => { + startPage = new AppPage(); + navBar = new Navbar(); + listPage = new ListPage(); + sidenav = new SideNav(); + }); + + it(" - notes should display properly when opened from a calculator", async () => { + await startPage.navigateTo(); + await browser.sleep(200); + + // open PAB: chute calculator + await listPage.clickMenuEntryForCalcType(12); + await browser.sleep(200); + + // open notes + await navBar.clickMenuButton(); + await browser.sleep(200); + await sidenav.clickNotesButton(); + await browser.sleep(200); + + // input some text + const ta = element(by.css("textarea")); + await ta.clear(); + await ta.sendKeys("azerty123"); + await browser.sleep(200); + + // reopen calculator + await navBar.openNthCalculator(0); + await browser.sleep(200); + + // reopen notes + await navBar.clickMenuButton(); + await browser.sleep(200); + await sidenav.clickNotesButton(); + await browser.sleep(200); + + // check text + const md = element(by.css("markdown p")); + await browser.sleep(200); + expect(await md.getText()).toEqual("azerty123"); + }); + + it(" - notes should display properly when opened from modules diagram", async () => { + await startPage.navigateTo(); + await browser.sleep(200); + + // open PAB: chute calculator + await listPage.clickMenuEntryForCalcType(12); + await browser.sleep(200); + + // open notes + await navBar.clickMenuButton(); + await browser.sleep(200); + await sidenav.clickNotesButton(); + await browser.sleep(200); + + // input some text + const ta = element(by.css("textarea")); + await ta.clear(); + await ta.sendKeys("azerty123"); + await browser.sleep(200); + + // open modules diagram + await navBar.clickMenuButton(); + await browser.sleep(200); + await sidenav.clickDiagramButton(); + await browser.sleep(200); + + // open notes + const notesLink = element(by.css("#show-notes a")); + notesLink.click(); + await browser.sleep(200); + + // check text + const md = element(by.css("markdown p")); + await browser.sleep(200); + expect(await md.getText()).toEqual("azerty123"); + }); +}); diff --git a/e2e/sidenav.po.ts b/e2e/sidenav.po.ts index 5b4060f52..596db0a86 100644 --- a/e2e/sidenav.po.ts +++ b/e2e/sidenav.po.ts @@ -31,6 +31,10 @@ export class SideNav { return element(by.css(`button#confirm-new-session`)); } + getNotesButton() { + return element(by.css("#side-nav-session-props")); + } + async clickLoadSessionButton() { const ncb = this.getLoadSessionButton(); await browser.sleep(500); @@ -60,4 +64,10 @@ export class SideNav { await this.getFileLoadButton().click(); } } + + async clickNotesButton() { + const nb = this.getNotesButton(); + await browser.sleep(200); + await nb.click(); + } } -- GitLab From 0793068d5879d10a5c7c0a1e5e2bdce97b41a6de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 14 Feb 2023 14:38:42 +0100 Subject: [PATCH 195/285] fix: session notes do not display properly refs #602 --- src/index.html | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/index.html b/src/index.html index 5a2324c1d..ff5eb8617 100644 --- a/src/index.html +++ b/src/index.html @@ -14,8 +14,19 @@ <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#ffffff"> <meta name="viewport" content="width=device-width, initial-scale=1"> - <link rel="manifest" href="manifest.webmanifest"> - <meta name="theme-color" content="#1976d2"> + <link rel="manifest" href="manifest.webmanifest"> + <meta name="theme-color" content="#1976d2"> + + <!-- fix error message "When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports" --> + <!-- cf. nghyd#602 --> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/katex.min.css" + integrity="sha384-vKruj+a13U8yHIkAyGgK1J3ArTLzrFGBbBc0tDp4ad/EyewESeXE/Iv67Aj8gKZ0" crossorigin="anonymous"> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/katex.min.js" + integrity="sha384-PwRUT/YqbnEjkZO0zZxNqcxACrXe+j766U2amXcgMg5457rve2Y7I6ZJSm2A0mS4" + crossorigin="anonymous"></script> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/contrib/auto-render.min.js" + integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous" + onload="renderMathInElement(document.body);"></script> </head> <body> @@ -163,4 +174,4 @@ <noscript>Please enable JavaScript to continue using this application.</noscript> </body> -</html> \ No newline at end of file +</html> -- GitLab From fa05091068cb2f798c0e67535f1554ebc1400d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 2 Mar 2023 14:55:04 +0100 Subject: [PATCH 196/285] fix: session notes do not display properly (angular.json solution) refs #602 --- angular.json | 3 ++- src/index.html | 11 ----------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/angular.json b/angular.json index 7af026e53..1b463deca 100644 --- a/angular.json +++ b/angular.json @@ -49,7 +49,8 @@ ], "scripts": [ "node_modules/marked/marked.min.js", - "node_modules/katex/dist/katex.min.js" + "node_modules/katex/dist/katex.min.js", + "node_modules/katex/dist/contrib/auto-render.min.js" ], "allowedCommonJsDependencies": [ "chartjs-plugin-zoom", diff --git a/src/index.html b/src/index.html index ff5eb8617..a1fbb0362 100644 --- a/src/index.html +++ b/src/index.html @@ -16,17 +16,6 @@ <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="manifest.webmanifest"> <meta name="theme-color" content="#1976d2"> - - <!-- fix error message "When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports" --> - <!-- cf. nghyd#602 --> - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/katex.min.css" - integrity="sha384-vKruj+a13U8yHIkAyGgK1J3ArTLzrFGBbBc0tDp4ad/EyewESeXE/Iv67Aj8gKZ0" crossorigin="anonymous"> - <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/katex.min.js" - integrity="sha384-PwRUT/YqbnEjkZO0zZxNqcxACrXe+j766U2amXcgMg5457rve2Y7I6ZJSm2A0mS4" - crossorigin="anonymous"></script> - <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/contrib/auto-render.min.js" - integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous" - onload="renderMathInElement(document.body);"></script> </head> <body> -- GitLab From 6f84eb64a5bd35dab76100ef4b52c41d971d77f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 3 Mar 2023 15:50:54 +0100 Subject: [PATCH 197/285] refactor: solver form: remove useless update() code refs #601 --- src/app/formulaire/definition/form-solveur.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/app/formulaire/definition/form-solveur.ts b/src/app/formulaire/definition/form-solveur.ts index 4052054a6..08318dd8c 100644 --- a/src/app/formulaire/definition/form-solveur.ts +++ b/src/app/formulaire/definition/form-solveur.ts @@ -105,12 +105,6 @@ export class FormulaireSolveur extends FormulaireFixedVar { // refresh parameters selector this.refreshParameterEntries(); } - } else if (sender instanceof ParamDefinition) { - if (data.action === "paramdefinitionAfterValue" && sender.symbol === "Ytarget") { - if (this.isFirstDisplay && ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit) { - sender.setValue(undefined); - } - } } } -- GitLab From 5e8b87b3d9fa879a1e14862e3bb69909c9b4186f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Mar 2023 10:02:45 +0100 Subject: [PATCH 198/285] test(e2e): add check of Mathjax formula in calculator help refs #608 --- e2e/calculator.po.ts | 7 +++++ e2e/documentation.e2e-spec.ts | 55 +++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 e2e/documentation.e2e-spec.ts diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index f2b98b2d9..91878a738 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -441,4 +441,11 @@ export class CalculatorPage { n++; } } + + /** + * get help button related to calculator + */ + getCalculatorHelpButton() { + return element(by.css("#help-calc")); + } } diff --git a/e2e/documentation.e2e-spec.ts b/e2e/documentation.e2e-spec.ts new file mode 100644 index 000000000..ea30f5ab5 --- /dev/null +++ b/e2e/documentation.e2e-spec.ts @@ -0,0 +1,55 @@ +import { ListPage } from "./list.po"; +import { CalculatorPage } from "./calculator.po"; +import { Navbar } from "./navbar.po"; +import { browser, by, element } from "protractor"; +import { PreferencesPage } from "./preferences.po"; + +describe("documentation − ", () => { + let listPage: ListPage; + let calcPage: CalculatorPage; + let prefPage: PreferencesPage; + let navbar: Navbar; + + beforeAll(() => { + calcPage = new CalculatorPage(); + prefPage = new PreferencesPage(); + navbar = new Navbar(); + listPage = new ListPage(); + + // browser.manage().window().setPosition(2000, 30); + }); + + async function checkMathjaxInHelp(lang: number) { + // change setup to French + await prefPage.navigateTo(); + await prefPage.changeLanguage(lang); + await browser.sleep(200); + + // start page + await navbar.clickNewCalculatorButton(); + + // open "fish ladder: fall" calculator + await listPage.clickMenuEntryForCalcType(12); + await browser.sleep(200); + + // click help + await calcPage.getCalculatorHelpButton().click(); + await browser.sleep(200); + + browser.getAllWindowHandles().then(async (handles) => { + browser.ignoreSynchronization = true; // deprecated but the only solution to work in the newly opened tab + browser.switchTo().window(handles[1]).then(async () => { + // check Mathjax element is present + expect(element.all(by.css("mjx-container")).isPresent()).toBe(true); + }); + }); + } + + it("check Mathjax formula are displayed in calculator French help", async () => { + await checkMathjaxInHelp(1); // fr + }); + + it("check Mathjax formula are displayed in calculator English help", async () => { + await checkMathjaxInHelp(0); // en + }); +}); -- GitLab From e114b190e58edcc927279baebf7e81151c0bdb77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Mar 2023 11:19:13 +0100 Subject: [PATCH 199/285] fix(doc): wrong directory when copying Mathjax files to dist refs #608 --- scripts/mkdocs-postprocess.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mkdocs-postprocess.js b/scripts/mkdocs-postprocess.js index 558e8300f..96f0794bb 100644 --- a/scripts/mkdocs-postprocess.js +++ b/scripts/mkdocs-postprocess.js @@ -8,7 +8,7 @@ const fs = require('fs-extra'); const destPath_JS = "src/assets/docs/javascripts"; const destPath_FR_JS = "src/assets/docs/fr/javascripts"; // pour la compilation en local (français) -const destPath_EN_JS = "src/assets/docs/fr/javascripts"; // pour la compilation en local (anglais) +const destPath_EN_JS = "src/assets/docs/en/javascripts"; // pour la compilation en local (anglais) const destPath_CSS = "src/assets/docs/stylesheets"; const destPath_FR_CSS = "src/assets/docs/fr/stylesheets"; // pour la compilation en local (français) -- GitLab From 8284a1a09e42e6ac8f3dec8f377f79ad445f9817 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Mar 2023 11:24:33 +0100 Subject: [PATCH 200/285] fix(e2e): Mathjax formula in help tests fail after first language refs #608 --- e2e/documentation.e2e-spec.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/e2e/documentation.e2e-spec.ts b/e2e/documentation.e2e-spec.ts index ea30f5ab5..e3a142432 100644 --- a/e2e/documentation.e2e-spec.ts +++ b/e2e/documentation.e2e-spec.ts @@ -20,7 +20,7 @@ describe("documentation − ", () => { }); async function checkMathjaxInHelp(lang: number) { - // change setup to French + // change language setup await prefPage.navigateTo(); await prefPage.changeLanguage(lang); await browser.sleep(200); @@ -38,10 +38,23 @@ describe("documentation − ", () => { browser.getAllWindowHandles().then(async (handles) => { browser.ignoreSynchronization = true; // deprecated but the only solution to work in the newly opened tab + + // switch to help tab browser.switchTo().window(handles[1]).then(async () => { // check Mathjax element is present - expect(element.all(by.css("mjx-container")).isPresent()).toBe(true); + expect(element(by.css("mjx-container")).isPresent()).toBe(true); + }).then(async () => { + // close help tab + await browser.close(); + // switch back to calculator (required to avoid failure of next language test) + await browser.switchTo().window(handles[0]); + browser.ignoreSynchronization = false; }); + + // switch back to calculator (required to avoid failure of next language test) + await browser.switchTo().window(handles[0]); + + browser.ignoreSynchronization = false; }); } -- GitLab From bb5c6d26e2c0f2211532bf7dd6a80d918b1ee816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Mar 2023 13:28:13 +0100 Subject: [PATCH 201/285] fix(doc): missing links in pressure loss refs #608 --- docs/fr/calculators/hyd_en_charge/perte_de_charge.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/fr/calculators/hyd_en_charge/perte_de_charge.md b/docs/fr/calculators/hyd_en_charge/perte_de_charge.md index 955d4a1b2..2cc8b9868 100644 --- a/docs/fr/calculators/hyd_en_charge/perte_de_charge.md +++ b/docs/fr/calculators/hyd_en_charge/perte_de_charge.md @@ -2,8 +2,8 @@ Ce module permet de calculer les pertes de charge dans une conduite circulaire à partir des lois suivantes donnant les pertes de charge linéaires : -- Lechapt et Calmon -- Strickler +- [Lechapt et Calmon](lechapt-calmon.md) +- [Strickler](strickler.md) Il permet le calcul de la valeur d'une des grandeurs suivantes : -- GitLab From 880ebe88edcf79e6506cf4f3bedbcef7bcb9acf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Mar 2023 14:02:19 +0100 Subject: [PATCH 202/285] fix(doc): Lechapt and Calmon: remove unit from singular pressure loss coefficient refs #608 --- docs/en/calculators/hyd_en_charge/lechapt-calmon.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/calculators/hyd_en_charge/lechapt-calmon.md b/docs/en/calculators/hyd_en_charge/lechapt-calmon.md index ee025f713..ba97396cb 100644 --- a/docs/en/calculators/hyd_en_charge/lechapt-calmon.md +++ b/docs/en/calculators/hyd_en_charge/lechapt-calmon.md @@ -8,7 +8,7 @@ It allows the calculation of the value of one of the following quantities: - Pipe diameter (m) - Total head loss (m) - Pipe length (m) -- Singular pressure loss coefficient (m) +- Singular pressure loss coefficient The total head loss is the sum of the linear head losses \(J_L\) obtained from the Lechapt and Calmon abacuses and singular \(J_S\) depending on the above coefficient. -- GitLab From eb7c1271f388f9ce13e7ba1109f01d5c5532b93d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Mar 2023 14:03:15 +0100 Subject: [PATCH 203/285] fix(doc): add missing pressure loss, Strickler documentation refs #608 --- .../hyd_en_charge/perte_de_charge.md | 34 +++++++++++++++++++ .../en/calculators/hyd_en_charge/strickler.md | 11 ++++++ 2 files changed, 45 insertions(+) create mode 100644 docs/en/calculators/hyd_en_charge/perte_de_charge.md create mode 100644 docs/en/calculators/hyd_en_charge/strickler.md diff --git a/docs/en/calculators/hyd_en_charge/perte_de_charge.md b/docs/en/calculators/hyd_en_charge/perte_de_charge.md new file mode 100644 index 000000000..3ed9b791f --- /dev/null +++ b/docs/en/calculators/hyd_en_charge/perte_de_charge.md @@ -0,0 +1,34 @@ +# Pressure loss + +This module computes linear head losses in a circular pipe with the following laws: + +- [Lechapt et Calmon](lechapt-calmon.md) +- [Strickler](strickler.md) + + +The following values can be computed: + +- Flow (m<sup>3</sup>/s) +- Pipe diameter (m) +- Total pressure loss (m) +- Pipe length (m) +- Singular head loss coefficient + +The total pressure loss is the sum of linear losses \(J_{lin}\), according to the used law, and singular losses \(J_{loc}\) depending on the above coefficient. + +## Singular pressure loss + +$$ J_{loc} = K_{loc} \frac{V^2}{2g}$$ + +Given : + +- \(K_{loc}\) : singular head loss coefficient +- \(V\) : water speed in the pipe (\(V = 4 Q / \pi / D^2\)) + +## Linear head loss coefficient + +$$ K_{lin} = \frac{2g J_{lin}}{V^2} $$ + +## Darcy head loss coefficient + +$$ f_D = \frac{2g J D}{l_T V^2} $$ diff --git a/docs/en/calculators/hyd_en_charge/strickler.md b/docs/en/calculators/hyd_en_charge/strickler.md new file mode 100644 index 000000000..ea7870e9f --- /dev/null +++ b/docs/en/calculators/hyd_en_charge/strickler.md @@ -0,0 +1,11 @@ +# Strickler formula + +This linear head loss law is parameterised by the Stricker coefficient \(K_S\). + +The other law parameters are shared with all pressure loss formulas: + +- \(Q\) : flow (m<sup>3</sup>/s) +- \(D\) : pipe diameter (m) +- \(l_T\) : pipe length (m) + +$$J_L=\frac{l_T.Q^2}{(K_S.\pi.D^2/4)^2.(D/4)^{4/3}}$$ -- GitLab From 427bcb87f0ce7c29656c574bda6fef4cc1395b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Mar 2023 16:39:37 +0100 Subject: [PATCH 204/285] test(e2e): check all pressure loss fields are present for all laws refs #611 --- e2e/calculator.po.ts | 10 +++++ e2e/pressure-loss.e2e-spec.ts | 77 +++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 e2e/pressure-loss.e2e-spec.ts diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index f2b98b2d9..44930c8cc 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -90,6 +90,11 @@ export class CalculatorPage { return element(by.id(id)); } + async isMatSelectPresent(id: string) { + const sel: ElementFinder = element(by.css("mat-select#" + id)); + return await sel.isPresent(); + } + async getSelectValueText(select: ElementFinder) { return await select.element(by.css(".mat-select-value-text > span")).getText(); } @@ -176,6 +181,11 @@ export class CalculatorPage { return tr.element(by.css("td:nth-of-type(" + n + ")")); } + async isNgParamPresent(id: string) { + const inp: ElementFinder = element(by.css("ngparam-input input#" + id)); + return await inp.isPresent(); + } + async inputHasCalcModeButton(input: ElementFinder) { // get parent (div.container) const container = await this.findParentContainer(input); diff --git a/e2e/pressure-loss.e2e-spec.ts b/e2e/pressure-loss.e2e-spec.ts new file mode 100644 index 000000000..af37c218b --- /dev/null +++ b/e2e/pressure-loss.e2e-spec.ts @@ -0,0 +1,77 @@ +import { ListPage } from "./list.po"; +import { Navbar } from "./navbar.po"; +import { browser, by, element } from "protractor"; +import { CalculatorPage } from "./calculator.po"; +import { PreferencesPage } from "./preferences.po"; +import { changeSelectValue } from "./util.po"; + +describe("Pressure loss - ", () => { + let listPage: ListPage; + let navBar: Navbar; + let calcPage: CalculatorPage; + let prefPage: PreferencesPage; + + beforeAll(async () => { + listPage = new ListPage(); + navBar = new Navbar(); + calcPage = new CalculatorPage(); + prefPage = new PreferencesPage(); + }); + + beforeEach(async () => { + // enable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await prefPage.disableEvilEmptyFields(); + await browser.sleep(200); + }); + + describe("modify pressure loss law displays the appropriate fields - ", () => { + it("Lechapt&Calmon", async () => { + // open "pressure loss" calculator + await navBar.clickNewCalculatorButton(); + await listPage.clickMenuEntryForCalcType(35); + await browser.sleep(200); + + // select Lechapt-Calmon pressure loss law + const materialSelect = calcPage.getSelectById("select_pressurelosstype"); + await changeSelectValue(materialSelect, 0); + await browser.sleep(200); + + // check inputs presence + expect(await calcPage.isNgParamPresent("Q")).toBe(true); + expect(await calcPage.isNgParamPresent("D")).toBe(true); + expect(await calcPage.isNgParamPresent("J")).toBe(true); // en calcul (donc id=calc_J mais ça marche quand même !) + expect(await calcPage.isNgParamPresent("Lg")).toBe(true); + expect(await calcPage.isNgParamPresent("Kloc")).toBe(true); + + // check material select + expect(await calcPage.isMatSelectPresent("select_material")).toBe(true); + }); + + it("Strickler", async () => { + browser.manage().window().setPosition(2000, 30); + + // open "pressure loss" calculator + await navBar.clickNewCalculatorButton(); + await listPage.clickMenuEntryForCalcType(35); + await browser.sleep(200); + + // select Strickler pressure loss law + const materialSelect = calcPage.getSelectById("select_pressurelosstype"); + await changeSelectValue(materialSelect, 1); + await browser.sleep(200); + debugger + + // check inputs presence + + const ks = element(by.id("0_Ks")); + expect(await ks.isPresent()).toBe(true); // isNgParamPresent does not work on "0_Ks". Why ? Mystery... + + expect(await calcPage.isNgParamPresent("Q")).toBe(true); + expect(await calcPage.isNgParamPresent("D")).toBe(true); + expect(await calcPage.isNgParamPresent("J")).toBe(true); + expect(await calcPage.isNgParamPresent("Lg")).toBe(true); + expect(await calcPage.isNgParamPresent("Kloc")).toBe(true); + }); + }); +}); -- GitLab From 35e8a20bc84ed872b8d508eac260b53d09247cb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 6 Mar 2023 17:02:44 +0100 Subject: [PATCH 205/285] fix: pressure loss: displayed fields do not change when pressure loss law is modified refs #611 --- src/app/formulaire/definition/form-pressureloss.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/formulaire/definition/form-pressureloss.ts b/src/app/formulaire/definition/form-pressureloss.ts index 9260bc79a..4329b0879 100644 --- a/src/app/formulaire/definition/form-pressureloss.ts +++ b/src/app/formulaire/definition/form-pressureloss.ts @@ -38,7 +38,7 @@ export class FormulairePressureLoss extends FormulaireFixedVar { public update(sender: IObservable, data: any) { // if (sender instanceof FieldSet && sender.id === "fs_pressureloss_law" && data.action === "propertyChange") { if (data.action === "propertyChange") { - if (data.name === "pressurelosstype") { + if (data.name === "pressureLossType") { // changement de propriété du FieldSet contenant le select de choix du type de perte de charge // replace underlying pressure loss law without replacing whole Nub -- GitLab From 8decbc4d868829958dbaee5ca14c1845e6bca2d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 7 Mar 2023 17:05:53 +0100 Subject: [PATCH 206/285] test(e2e): code cleanup --- .vscode/settings.json | 19 --- e2e/app.e2e-spec.ts | 2 +- e2e/bief-empty-fields.e2e-spec.ts | 2 +- e2e/calc-all-examples.e2e-spec.ts | 7 +- e2e/calculate-all-params.e2e-spec.ts | 23 ++-- e2e/calculate-button-validation.e2e-spec.ts | 2 +- e2e/calculate-linked-params.e2e-spec.ts | 7 +- e2e/calculator.e2e-spec.ts | 2 +- e2e/check-translations.e2e-spec.ts | 112 +++++++++--------- e2e/cloisons.e2e-spec.ts | 5 +- e2e/clone-all-calc.e2e-spec.ts | 73 ++++++------ e2e/clone-calc.e2e-spec.ts | 11 +- e2e/compute-reset-chained-links.e2e-spec.ts | 6 +- e2e/cote-amont-aval-bief.e2e-spec.ts | 4 +- e2e/courbe-remous-empty-fields.e2e-spec.ts | 2 +- e2e/diagramme-modules.e2e-spec.ts | 6 +- e2e/duplicate-results.e2e-spec.ts | 4 +- e2e/examples-empty-fields.e2e-spec.ts | 9 +- e2e/lechapt-calmon.e2e-spec.ts | 1 - e2e/link-parallel-devices.e2e-spec.ts | 9 +- e2e/linked-parameter-section-type.e2e-spec.ts | 4 +- e2e/list.e2e-spec.ts | 2 +- e2e/load-linked-params.e2e-spec.ts | 11 +- e2e/load-malformed-files.e2e-spec.ts | 9 +- e2e/notes.e2e-spec.ts | 2 +- e2e/ouvrages-empty-fields.e2e-spec.ts | 1 - e2e/pab-cloisons-empty-fields.e2e-spec.ts | 3 +- e2e/pab.e2e-spec.ts | 17 +-- e2e/parallel-structures.e2e-spec.ts | 4 +- e2e/predam-empty-fields.e2e-spec.ts | 4 +- e2e/predam-log.e2e-spec.ts | 6 +- e2e/preferences.e2e-spec.ts | 2 +- e2e/pressure-loss-empty-fields.e2e-spec.ts | 2 +- e2e/regime-uniforme-empty-fields.e2e-spec.ts | 2 +- e2e/remous.e2e-spec.ts | 5 +- e2e/reset-param-mode.e2e-spec.ts | 5 +- e2e/reset-results.e2e-spec.ts | 5 +- e2e/section-empty-fields.e2e-spec.ts | 2 +- e2e/solveur.e2e-spec.ts | 9 +- e2e/translation.e2e-spec.ts | 4 +- e2e/valeurs-erronees.e2e-spec.ts | 6 +- e2e/variable-param-cancel.e2e-spec.ts | 2 +- 42 files changed, 191 insertions(+), 222 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index bfe798cdd..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "spellright.language": [ - "fr" - ], - "spellright.documentTypes": [ - "latex", - "plaintext", - "markdown" - ], - "cSpell.words": [ - "Cassan", - "DICHO", - "MACRORUGO", - "fdescribe", - "jalhyd", - "nghyd", - "prms" - ] -} \ No newline at end of file diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts index 66fc56982..660387982 100644 --- a/e2e/app.e2e-spec.ts +++ b/e2e/app.e2e-spec.ts @@ -7,7 +7,7 @@ import { browser } from "protractor"; describe("ngHyd − start page", () => { let page: AppPage; - beforeEach(() => { + beforeAll(() => { page = new AppPage(); }); diff --git a/e2e/bief-empty-fields.e2e-spec.ts b/e2e/bief-empty-fields.e2e-spec.ts index fd9fc0a44..391c45238 100644 --- a/e2e/bief-empty-fields.e2e-spec.ts +++ b/e2e/bief-empty-fields.e2e-spec.ts @@ -10,7 +10,7 @@ describe("Check fields are empty in 'up/downstream elevations of a reach' calcul let calcPage: CalculatorPage; let prefPage: PreferencesPage; - beforeAll(async () => { + beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); diff --git a/e2e/calc-all-examples.e2e-spec.ts b/e2e/calc-all-examples.e2e-spec.ts index 5fc9e4b76..570e5f19c 100644 --- a/e2e/calc-all-examples.e2e-spec.ts +++ b/e2e/calc-all-examples.e2e-spec.ts @@ -1,4 +1,3 @@ -import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { browser, by, element } from "protractor"; @@ -8,9 +7,8 @@ import { SideNav } from "./sidenav.po"; /** * Calculate all modules of all examples */ -describe("ngHyd − example sessions −", async () => { +describe("ngHyd − example sessions −", () => { - let listPage: ListPage; let calcPage: CalculatorPage; let navbar: Navbar; let prefPage: PreferencesPage; @@ -18,7 +16,6 @@ describe("ngHyd − example sessions −", async () => { beforeAll(() => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 100 * 1000; - listPage = new ListPage(); calcPage = new CalculatorPage(); navbar = new Navbar(); prefPage = new PreferencesPage(); @@ -78,7 +75,5 @@ describe("ngHyd − example sessions −", async () => { } i++; } - }); - }); diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 9003678bd..5d0b9280a 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -10,18 +10,23 @@ import { scrollPageToTop } from "./util.po"; * For all calculators, try to calculate every parameter: check that only one parameter * is set to CAL mode, trigger the calculation, check that result is not empty */ -describe("ngHyd − calculate all parameters of all calculators", async () => { +describe("ngHyd − calculate all parameters of all calculators", () => { let listPage: ListPage; let calcPage: CalculatorPage; let navBar: Navbar; let prefPage: PreferencesPage; - beforeEach(() => { + beforeAll(async () => { listPage = new ListPage(); calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); navBar = new Navbar(); + // disable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await prefPage.disableEvilEmptyFields(); + await browser.sleep(200); + // increase timeout to avoid "Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL" message jasmine.DEFAULT_TIMEOUT_INTERVAL = 10 * 60 * 1000; // 10 min }); @@ -29,18 +34,9 @@ describe("ngHyd − calculate all parameters of all calculators", async () => { // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ const calcTypes = testedCalcTypes; - beforeAll(async () => { - prefPage = new PreferencesPage(); - navBar = new Navbar(); - // disable evil option "empty fields on module creation" - await prefPage.navigateTo(); - await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); - }); - // for each calculator for (const ct of calcTypes) { - if ([ 22, 31, 32, 33, 34 ].includes(ct)) { + if ([22, 31, 32, 33, 34].includes(ct)) { // omit 22 - Solveur // omit 31 - PbCloison // omit 32 - PbBassin @@ -49,7 +45,7 @@ describe("ngHyd − calculate all parameters of all calculators", async () => { // (not calculated here because they are not independent) continue; } - describe(" − calculate all parameters of calculator type [" + ct + "]", async () => { + describe(" − calculate all parameters of calculator type [" + ct + "]", () => { it("", async () => { // go to list page await navBar.clickNewCalculatorButton(); @@ -98,5 +94,4 @@ describe("ngHyd − calculate all parameters of all calculators", async () => { }); }); } - }); diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index 1d55211fb..512616101 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -10,7 +10,7 @@ describe("Calculate button - ", () => { let navBar: Navbar; let prefPage: PreferencesPage; - beforeAll(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index 7c54f5af4..e7192eca9 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -1,4 +1,3 @@ -import { AppPage } from "./app.po"; import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; @@ -29,12 +28,15 @@ describe("ngHyd − calculate with linked parameters", () => { let sidenav: SideNav; let prefPage: PreferencesPage; - beforeEach(async () => { + beforeAll(() => { listPage = new ListPage(); calcPage = new CalculatorPage(); navBar = new Navbar(); prefPage = new PreferencesPage(); sidenav = new SideNav(); + }); + + beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); @@ -306,7 +308,6 @@ describe("ngHyd − calculate with linked parameters", () => { }); it(" − a link target parameter should not be able to link to another parameter", async () => { - debugger // create 1st PAB-Chute await navBar.clickNewCalculatorButton(); await browser.sleep(200); diff --git a/e2e/calculator.e2e-spec.ts b/e2e/calculator.e2e-spec.ts index 3c42955ec..841a53047 100644 --- a/e2e/calculator.e2e-spec.ts +++ b/e2e/calculator.e2e-spec.ts @@ -8,7 +8,7 @@ describe("ngHyd − calculator page", () => { let page: CalculatorPage; let listPage: ListPage; - beforeEach(() => { + beforeAll(() => { page = new CalculatorPage(); listPage = new ListPage(); }); diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index ee07f746e..df1c7282e 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -25,69 +25,69 @@ describe("ngHyd − check translation of all calculators", () => { sideNav = new SideNav(); }); - // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ - const calcTypes = testedCalcTypes; + describe("", () => { + // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ + const calcTypes = testedCalcTypes; - // options of "Language" selector on preferences page - const langs = ["English", "Français"]; + // options of "Language" selector on preferences page + const langs = ["English", "Français"]; - // for each language - for (let i = 0; i < langs.length; i++) { - describe("language " + langs[i] + " − ", async () => { + // for each language + for (let i = 0; i < langs.length; i++) { + describe("language " + langs[i] + " − ", () => { - beforeAll(async () => { - await prefPage.navigateTo(); - await prefPage.changeLanguage(i); - await browser.sleep(200); - await navBar.clickNewCalculatorButton(); - }); - - beforeEach(function () { - jasmine.addMatchers({ - toContain: function () { - return { - compare: function (actual, expected) { - const result = { - pass: actual.includes(expected), - message: "error" // short message to avoid whole page source being dumped on expect() failure - }; - return result; - } - }; - } + beforeAll(async () => { + await prefPage.navigateTo(); + await prefPage.changeLanguage(i); + await browser.sleep(200); + await navBar.clickNewCalculatorButton(); }); - }); - - // for each calculator - for (const ct of calcTypes) { - it(" − check translations of calculator type [" + ct + "]", async () => { - // click calculator button (instanciate) - await listPage.clickMenuEntryForCalcType(ct); - // just click the "compute" button with default values - // check that "compute" button is active - const calcButton = calcPage.getCalculateButton(); - const disabledState = await calcButton.getAttribute("disabled"); - if (!disabledState) { - // click "compute" button - await calcButton.click(); - // check that result is not empty - const hasResults = await calcPage.hasResults(); - expect(hasResults).toBe(true); - } + beforeEach(function () { + jasmine.addMatchers({ + toContain: function () { + return { + compare: function (actual, expected) { + const result = { + pass: actual.includes(expected), + message: "error" // short message to avoid whole page source being dumped on expect() failure + }; + return result; + } + }; + } + }); + }); - // check absence of "*** message not found" in whole DOM - expect(await browser.getPageSource()).not.toContain("*** message not found", "missing translations found"); + // for each calculator + for (const ct of calcTypes) { + it(" − check translations of calculator type [" + ct + "]", async () => { + // click calculator button (instanciate) + await listPage.clickMenuEntryForCalcType(ct); - // empty session - await navBar.clickMenuButton(); - await browser.sleep(200); - await sideNav.clickNewSessionButton(); - browser.sleep(200); - }); - } + // just click the "compute" button with default values + // check that "compute" button is active + const calcButton = calcPage.getCalculateButton(); + const disabledState = await calcButton.getAttribute("disabled"); + if (!disabledState) { + // click "compute" button + await calcButton.click(); + // check that result is not empty + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(true); + } - }); - } + // check absence of "*** message not found" in whole DOM + expect(await browser.getPageSource()).not.toContain("*** message not found", "missing translations found"); + // empty session + await navBar.clickMenuButton(); + await browser.sleep(200); + await sideNav.clickNewSessionButton(); + browser.sleep(200); + }); + } + }); + } + }); }); diff --git a/e2e/cloisons.e2e-spec.ts b/e2e/cloisons.e2e-spec.ts index f251afabc..f08cac6a0 100644 --- a/e2e/cloisons.e2e-spec.ts +++ b/e2e/cloisons.e2e-spec.ts @@ -14,11 +14,14 @@ describe("ngHyd − cloisons", () => { let navBar: Navbar; let prefPage: PreferencesPage; - beforeEach(async () => { + beforeAll(() => { listPage = new ListPage(); calcPage = new CalculatorPage(); navBar = new Navbar(); prefPage = new PreferencesPage(); + }); + + beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index ca352163c..9c454e864 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -15,56 +15,61 @@ describe("ngHyd − clone all calculators with all possible <select> values", () let navbar: Navbar; let prefPage: PreferencesPage; - beforeEach(async () => { + beforeAll(async () => { listPage = new ListPage(); calcPage = new CalculatorPage(); navbar = new Navbar(); prefPage = new PreferencesPage(); + }); + + beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); await browser.sleep(200); }); - const calcTypes = testedCalcTypes; + describe("", () => { - // for each calculator - for (const ct of calcTypes) { - if (ct === 22) { - // omit 22 - Solveur is not tested here because it is not independent - continue; - } - describe(" − clone all variations of calculator type [" + ct + "]", async () => { - it("", async () => { - await navbar.clickNewCalculatorButton(); - // click calculator button (instanciate) - await listPage.clickMenuEntryForCalcType(ct); + const calcTypes = testedCalcTypes; - // get all select IDs outside Structures - // get select IDs inside Structures - // @TODO set configuration to every combination of <select> options + // for each calculator + for (const ct of calcTypes) { + if (ct === 22) { + // omit 22 - Solveur is not tested here because it is not independent + continue; + } + describe(" − clone all variations of calculator type [" + ct + "]", () => { + it("", async () => { + await navbar.clickNewCalculatorButton(); + // click calculator button (instanciate) + await listPage.clickMenuEntryForCalcType(ct); - // modify all <input> values and store them - await calcPage.modifyAllInputValues(); - const sourceValues = await calcPage.storeAllInputValues(); + // get all select IDs outside Structures + // get select IDs inside Structures + // @TODO set configuration to every combination of <select> options - // clone calculator - await scrollPageToTop(); - await calcPage.clickCloneCalcButton(); - await browser.sleep(300); + // modify all <input> values and store them + await calcPage.modifyAllInputValues(); + const sourceValues = await calcPage.storeAllInputValues(); - // check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().count()).toBe(2); + // clone calculator + await scrollPageToTop(); + await calcPage.clickCloneCalcButton(); + await browser.sleep(300); - // @TODO check <select> values + // check existence of the cloned module + expect(await navbar.getAllCalculatorTabs().count()).toBe(2); - // read all <input> values and compare them to stored ones - const cloneValues = await calcPage.storeAllInputValues(); - for (const k in cloneValues) { - expect(cloneValues[k]).toBeCloseTo(sourceValues[k]); - } - }); - }); - } + // @TODO check <select> values + // read all <input> values and compare them to stored ones + const cloneValues = await calcPage.storeAllInputValues(); + for (const k in cloneValues) { + expect(cloneValues[k]).toBeCloseTo(sourceValues[k]); + } + }); + }); + } + }); }); diff --git a/e2e/clone-calc.e2e-spec.ts b/e2e/clone-calc.e2e-spec.ts index a63f565b0..68be69080 100644 --- a/e2e/clone-calc.e2e-spec.ts +++ b/e2e/clone-calc.e2e-spec.ts @@ -1,4 +1,3 @@ -import { AppPage } from "./app.po"; import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; @@ -10,21 +9,19 @@ import { changeSelectValue, scrollPageToTop } from "./util.po"; * Clone calculators */ describe("ngHyd − clone a calculator", () => { - let startPage: AppPage; let listPage: ListPage; let calcPage: CalculatorPage; let navbar: Navbar; let prefPage: PreferencesPage; - beforeEach(() => { - startPage = new AppPage(); + beforeAll(async () => { listPage = new ListPage(); calcPage = new CalculatorPage(); - }); - - beforeAll(async () => { prefPage = new PreferencesPage(); navbar = new Navbar(); + }); + + beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); diff --git a/e2e/compute-reset-chained-links.e2e-spec.ts b/e2e/compute-reset-chained-links.e2e-spec.ts index cd97f196a..9f402a179 100644 --- a/e2e/compute-reset-chained-links.e2e-spec.ts +++ b/e2e/compute-reset-chained-links.e2e-spec.ts @@ -19,14 +19,13 @@ describe("ngHyd − compute then reset chained results − ", () => { let sidenav: SideNav; let prefPage: PreferencesPage; - function init() { + beforeAll(() => { startPage = new AppPage(); calcPage = new CalculatorPage(); navbar = new Navbar(); sidenav = new SideNav(); prefPage = new PreferencesPage(); - } - beforeEach(init); + }); it("when loading session-cascade-params.json, computation should not be chained, but results reset should be", async () => { // load session file @@ -188,5 +187,4 @@ describe("ngHyd − compute then reset chained results − ", () => { expect(hasResults4).toBe(false); }); - }); diff --git a/e2e/cote-amont-aval-bief.e2e-spec.ts b/e2e/cote-amont-aval-bief.e2e-spec.ts index e7a239a02..1c73805f0 100644 --- a/e2e/cote-amont-aval-bief.e2e-spec.ts +++ b/e2e/cote-amont-aval-bief.e2e-spec.ts @@ -10,12 +10,14 @@ describe("ngHyd − up/downstream elevations of a reach", () => { let listPage: ListPage; let calcPage: CalculatorPage; - beforeEach(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + }); + beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await browser.sleep(200); diff --git a/e2e/courbe-remous-empty-fields.e2e-spec.ts b/e2e/courbe-remous-empty-fields.e2e-spec.ts index 392075ce5..4674b1c5c 100644 --- a/e2e/courbe-remous-empty-fields.e2e-spec.ts +++ b/e2e/courbe-remous-empty-fields.e2e-spec.ts @@ -10,7 +10,7 @@ describe("Check fields are empty in 'backwater curves' calculator when created w let calcPage: CalculatorPage; let prefPage: PreferencesPage; - beforeAll(async () => { + beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); diff --git a/e2e/diagramme-modules.e2e-spec.ts b/e2e/diagramme-modules.e2e-spec.ts index a7a1b6c41..87a6c8d0a 100644 --- a/e2e/diagramme-modules.e2e-spec.ts +++ b/e2e/diagramme-modules.e2e-spec.ts @@ -17,18 +17,20 @@ function removeMermaidIdFormat(id: string): string { return id; } -describe("modules diagram", async () => { +describe("modules diagram", () => { let navBar: Navbar; let listPage: ListPage; let sideNav: SideNav; let prefPage: PreferencesPage; - beforeEach(async () => { + beforeAll(async () => { listPage = new ListPage(); navBar = new Navbar(); sideNav = new SideNav(); prefPage = new PreferencesPage(); + }); + beforeEach(async () => { await prefPage.navigateTo(); }); diff --git a/e2e/duplicate-results.e2e-spec.ts b/e2e/duplicate-results.e2e-spec.ts index f0c0c5707..bc2032048 100644 --- a/e2e/duplicate-results.e2e-spec.ts +++ b/e2e/duplicate-results.e2e-spec.ts @@ -10,12 +10,14 @@ describe("ngHyd − check that results are not duplicated", () => { let listPage: ListPage; let calcPage: CalculatorPage; - beforeEach(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + }); + beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await browser.sleep(200); diff --git a/e2e/examples-empty-fields.e2e-spec.ts b/e2e/examples-empty-fields.e2e-spec.ts index 3a8d3942c..dd59b1a13 100644 --- a/e2e/examples-empty-fields.e2e-spec.ts +++ b/e2e/examples-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; -import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" import { changeSelectValue } from "./util.po"; @@ -13,11 +12,13 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on let navBar: Navbar; let calcPage: CalculatorPage; - beforeEach(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + }); + beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await browser.sleep(200); @@ -82,11 +83,13 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea let navBar: Navbar; let calcPage: CalculatorPage; - beforeEach(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + }); + beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await browser.sleep(200); diff --git a/e2e/lechapt-calmon.e2e-spec.ts b/e2e/lechapt-calmon.e2e-spec.ts index f3be14a59..70ee97d0a 100644 --- a/e2e/lechapt-calmon.e2e-spec.ts +++ b/e2e/lechapt-calmon.e2e-spec.ts @@ -20,7 +20,6 @@ describe("Lechapt&Calmon - ", () => { listPage = new ListPage(); calcPage = new CalculatorPage(); navBar = new Navbar(); - browser.manage().window().setPosition(2000, 30); }); beforeEach(async () => { diff --git a/e2e/link-parallel-devices.e2e-spec.ts b/e2e/link-parallel-devices.e2e-spec.ts index 7d104289d..768c320af 100644 --- a/e2e/link-parallel-devices.e2e-spec.ts +++ b/e2e/link-parallel-devices.e2e-spec.ts @@ -10,17 +10,19 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( let prefPage: PreferencesPage; let navBar: Navbar; - async function init() { + beforeAll(() => { calcPage = new CalculatorPage(); listPage = new ListPage(); prefPage = new PreferencesPage(); navBar = new Navbar(); + }); + + beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); await browser.sleep(200); - } - beforeEach(init); + }); it("when creating Parallel Structures, devices should be linkable to one another", async () => { await navBar.clickNewCalculatorButton(); @@ -45,5 +47,4 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( const nb3 = await calcPage.getAllLinkButtons().count(); expect(nb3).toBe(6); // link buttons on children but not on parent }); - }); diff --git a/e2e/linked-parameter-section-type.e2e-spec.ts b/e2e/linked-parameter-section-type.e2e-spec.ts index a863f273e..36dce48fa 100644 --- a/e2e/linked-parameter-section-type.e2e-spec.ts +++ b/e2e/linked-parameter-section-type.e2e-spec.ts @@ -11,7 +11,7 @@ describe("linked parameter in calculator with section - ", () => { let calcPage: CalculatorPage; let prefPage: PreferencesPage; - beforeAll(async () => { + beforeAll( () => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); @@ -26,7 +26,7 @@ describe("linked parameter in calculator with section - ", () => { }); it("modify section type", async () => { - browser.manage().window().setPosition(2000, 30); + // browser.manage().window().setPosition(2000, 30); // open first "parametric section" calculator await navBar.clickNewCalculatorButton(); diff --git a/e2e/list.e2e-spec.ts b/e2e/list.e2e-spec.ts index 0530208ee..2b2679a5c 100644 --- a/e2e/list.e2e-spec.ts +++ b/e2e/list.e2e-spec.ts @@ -7,7 +7,7 @@ import { element, by } from "protractor"; describe("ngHyd − list page", () => { let page: ListPage; - beforeEach(() => { + beforeAll(() => { page = new ListPage(); }); diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index dd8253971..32d976aff 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -1,5 +1,3 @@ -import { AppPage } from "./app.po"; -import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; @@ -12,22 +10,17 @@ import { PreferencesPage } from "./preferences.po"; * @TODO les valeurs des Select sont comparées au français, pas très générique :/ */ describe("ngHyd − load session with multiple linked parameters − ", () => { - let startPage: AppPage; - let listPage: ListPage; let calcPage: CalculatorPage; let prefPage: PreferencesPage; let navbar: Navbar; let sidenav: SideNav; - function init() { - startPage = new AppPage(); + beforeAll(()=> { calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); navbar = new Navbar(); sidenav = new SideNav(); - listPage = new ListPage(); - } - beforeAll(init); + }); beforeEach(async () => { // force language to prevent issues due to default browser language diff --git a/e2e/load-malformed-files.e2e-spec.ts b/e2e/load-malformed-files.e2e-spec.ts index a5c0649b9..9204d87b6 100644 --- a/e2e/load-malformed-files.e2e-spec.ts +++ b/e2e/load-malformed-files.e2e-spec.ts @@ -1,4 +1,3 @@ -import { AppPage } from "./app.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { browser, element, by } from "protractor"; @@ -13,18 +12,15 @@ import { PreferencesPage } from "./preferences.po"; * @WARNING error messages are tested in french */ describe("ngHyd − load malformed session files − ", () => { - let startPage: AppPage; let navbar: Navbar; let sidenav: SideNav; let prefPage: PreferencesPage; - function init() { - startPage = new AppPage(); + beforeAll(() => { navbar = new Navbar(); sidenav = new SideNav(); prefPage = new PreferencesPage(); - } - beforeAll(init); + }); beforeEach(async () => { // force language to prevent issues due to default browser language @@ -81,5 +77,4 @@ describe("ngHyd − load malformed session files − ", () => { const err = element(by.css(".file-problem .mat-list-item-content")); expect(await err.getText()).toContain("Mauvaise version du format de fichier"); }); - }); diff --git a/e2e/notes.e2e-spec.ts b/e2e/notes.e2e-spec.ts index 2419119a8..dd0454099 100644 --- a/e2e/notes.e2e-spec.ts +++ b/e2e/notes.e2e-spec.ts @@ -10,7 +10,7 @@ describe("check calculator notes", () => { let listPage: ListPage; let sidenav: SideNav; - beforeEach(() => { + beforeAll(() => { startPage = new AppPage(); navBar = new Navbar(); listPage = new ListPage(); diff --git a/e2e/ouvrages-empty-fields.e2e-spec.ts b/e2e/ouvrages-empty-fields.e2e-spec.ts index 918107e2c..06891af7e 100644 --- a/e2e/ouvrages-empty-fields.e2e-spec.ts +++ b/e2e/ouvrages-empty-fields.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; -import { AppPage } from "./app.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; import { changeSelectValue } from "./util.po"; diff --git a/e2e/pab-cloisons-empty-fields.e2e-spec.ts b/e2e/pab-cloisons-empty-fields.e2e-spec.ts index 6b19d4c3e..749c1708e 100644 --- a/e2e/pab-cloisons-empty-fields.e2e-spec.ts +++ b/e2e/pab-cloisons-empty-fields.e2e-spec.ts @@ -1,8 +1,7 @@ import { ListPage } from "./list.po"; import { PreferencesPage } from "./preferences.po"; -import { browser, by, element } from "protractor"; +import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; -import { AppPage } from "./app.po"; import { Navbar } from "./navbar.po"; /** diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index edcdd9750..00e798f1e 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -18,7 +18,7 @@ describe("ngHyd − Passe à Bassins", () => { let sidenav: SideNav; let prefPage: PreferencesPage; - beforeEach(() => { + beforeAll(() => { startPage = new AppPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); @@ -27,8 +27,7 @@ describe("ngHyd − Passe à Bassins", () => { prefPage = new PreferencesPage(); }); - describe("create PAB - ", async () => { - + describe("create PAB - ", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); @@ -149,7 +148,7 @@ describe("ngHyd − Passe à Bassins", () => { }); - describe("generate PAB - ", async () => { + describe("generate PAB - ", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" @@ -228,11 +227,9 @@ describe("ngHyd − Passe à Bassins", () => { const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); }); - }); - describe("load session files - ", async () => { - + describe("load session files - ", () => { it("complete example of all PAB modules", async () => { await startPage.navigateTo(); // load @@ -266,11 +263,9 @@ describe("ngHyd − Passe à Bassins", () => { // check absence of logs expect(await calcPage.nbLogEntries()).toBe(0); }); - }); - describe("load regulated variated PAB with calc errors - ", async () => { - + describe("load regulated variated PAB with calc errors - ", () => { it("should display logs", async () => { await startPage.navigateTo(); // load @@ -302,7 +297,5 @@ describe("ngHyd − Passe à Bassins", () => { // check absence of logs expect(await calcPage.nbLogEntries()).toBe(2); }); - }); - }); diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index 44312c6bf..0653fbe85 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -1,6 +1,6 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; +import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -10,7 +10,7 @@ describe("Check calculated parameter remains the same when copying a structure", let calcPage: CalculatorPage; let prefPage: PreferencesPage; - beforeAll(async () => { + beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); diff --git a/e2e/predam-empty-fields.e2e-spec.ts b/e2e/predam-empty-fields.e2e-spec.ts index 8c1cfb79b..1c9f5dd98 100644 --- a/e2e/predam-empty-fields.e2e-spec.ts +++ b/e2e/predam-empty-fields.e2e-spec.ts @@ -13,12 +13,14 @@ describe("ngHyd − check that predam fields are empty", () => { let navBar: Navbar; let calcPage: CalculatorPage; - beforeEach(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + }); + beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await browser.sleep(200); diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index cb06046b7..7b3a51cf7 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -1,4 +1,4 @@ -import { browser, by, element } from "protractor"; +import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -10,12 +10,14 @@ describe("check that low iteration count leads to log messages", () => { let navBar: Navbar; let calcPage: CalculatorPage; - beforeEach(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + }); + beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await browser.sleep(200); diff --git a/e2e/preferences.e2e-spec.ts b/e2e/preferences.e2e-spec.ts index e2ac77205..e7c3d95f3 100644 --- a/e2e/preferences.e2e-spec.ts +++ b/e2e/preferences.e2e-spec.ts @@ -7,7 +7,7 @@ import { browser } from "protractor"; describe("ngHyd − preferences page", () => { let page: PreferencesPage; - beforeEach(() => { + beforeAll(() => { page = new PreferencesPage(); }); diff --git a/e2e/pressure-loss-empty-fields.e2e-spec.ts b/e2e/pressure-loss-empty-fields.e2e-spec.ts index 59eb87c64..f02085bc3 100644 --- a/e2e/pressure-loss-empty-fields.e2e-spec.ts +++ b/e2e/pressure-loss-empty-fields.e2e-spec.ts @@ -11,7 +11,7 @@ describe("Check fields are empty in 'pressure loss' calculator when created with let calcPage: CalculatorPage; let prefPage: PreferencesPage; - beforeAll(async () => { + beforeAll( () => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); diff --git a/e2e/regime-uniforme-empty-fields.e2e-spec.ts b/e2e/regime-uniforme-empty-fields.e2e-spec.ts index ce60476f2..6c5f1887f 100644 --- a/e2e/regime-uniforme-empty-fields.e2e-spec.ts +++ b/e2e/regime-uniforme-empty-fields.e2e-spec.ts @@ -10,7 +10,7 @@ describe("Check fields are empty in 'uniform flow' calculator when created with let calcPage: CalculatorPage; let prefPage: PreferencesPage; - beforeAll(async () => { + beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index 342d35edb..e6a584333 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -16,12 +16,15 @@ describe("ngHyd − remous", () => { let prefPage: PreferencesPage; let sidenav: SideNav; - beforeEach(async () => { + beforeAll(() => { listPage = new ListPage(); prefPage = new PreferencesPage(); calcPage = new CalculatorPage(); navBar = new Navbar(); sidenav = new SideNav(); + }); + + beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); diff --git a/e2e/reset-param-mode.e2e-spec.ts b/e2e/reset-param-mode.e2e-spec.ts index b6a294b72..b4c87cf4e 100644 --- a/e2e/reset-param-mode.e2e-spec.ts +++ b/e2e/reset-param-mode.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; -import { browser, by, element, ElementFinder } from "protractor"; -import { CalculatorPage } from "./calculator.po"; +import { browser, by, element } from "protractor"; /** * Parameter mode should be set to its previous mode (fixed/var/...) when cancel is pressed @@ -9,7 +8,7 @@ import { CalculatorPage } from "./calculator.po"; describe("ngHyd - check parameter mode is set to its previous value - ", () => { let listPage: ListPage; - beforeAll(async () => { + beforeAll(() => { listPage = new ListPage(); }); diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index 7b98cde01..e0582c7f0 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -3,7 +3,6 @@ import { Navbar } from "./navbar.po"; import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; -import { cp } from "fs"; import { SideNav } from "./sidenav.po"; describe("Check results are reset after application settings modification - ", () => { @@ -13,7 +12,7 @@ describe("Check results are reset after application settings modification - ", ( let prefPage: PreferencesPage; let sideNav: SideNav; - beforeAll(async () => { + beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); @@ -55,7 +54,7 @@ describe("Check results are reset after application settings modification - ", ( // reopen settings await navBar.clickMenuButton(); await browser.sleep(200); - const setupBtn = await sideNav.getSetupButton(); + const setupBtn = sideNav.getSetupButton(); await setupBtn.click(); await browser.sleep(200); diff --git a/e2e/section-empty-fields.e2e-spec.ts b/e2e/section-empty-fields.e2e-spec.ts index 2a336e916..9a72987ac 100644 --- a/e2e/section-empty-fields.e2e-spec.ts +++ b/e2e/section-empty-fields.e2e-spec.ts @@ -10,7 +10,7 @@ describe("Check fields are empty in 'parametric section' calculator when created let calcPage: CalculatorPage; let prefPage: PreferencesPage; - beforeAll(async () => { + beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 8c8383565..cdbbb5fec 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -1,4 +1,3 @@ -import { AppPage } from "./app.po"; import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; @@ -17,7 +16,7 @@ describe("Solveur - ", () => { let sidenav: SideNav; let prefPage: PreferencesPage; - beforeAll(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); @@ -194,7 +193,7 @@ describe("Solveur - nghyd#601 with empty fields option", () => { let listPage: ListPage; let calcPage: CalculatorPage; - beforeAll(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); listPage = new ListPage(); @@ -289,7 +288,7 @@ describe("Solveur - nghyd#601 without empty fields option", () => { let listPage: ListPage; let calcPage: CalculatorPage; - beforeAll(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); listPage = new ListPage(); @@ -309,7 +308,7 @@ describe("Solveur - nghyd#601 without empty fields option", () => { } beforeEach(async () => { - await browser.manage().window().setPosition(2000, 30); + // await browser.manage().window().setPosition(2000, 30); // disable evil option "empty fields on module creation" await prefPage.setEmptyFields(false); diff --git a/e2e/translation.e2e-spec.ts b/e2e/translation.e2e-spec.ts index b0118eac9..ca1b51b31 100644 --- a/e2e/translation.e2e-spec.ts +++ b/e2e/translation.e2e-spec.ts @@ -12,7 +12,7 @@ describe("Check translation", () => { let prefPage: PreferencesPage; let sideNav: SideNav; - beforeAll(async () => { + beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); @@ -68,7 +68,7 @@ describe("Check translation", () => { // setup -> english await navBar.clickMenuButton(); await browser.sleep(200); - const setupBtn = await sideNav.getSetupButton(); + const setupBtn = sideNav.getSetupButton(); await setupBtn.click(); await browser.sleep(200); await prefPage.changeLanguage(0); // en diff --git a/e2e/valeurs-erronees.e2e-spec.ts b/e2e/valeurs-erronees.e2e-spec.ts index b2f00ce02..8580ae57e 100644 --- a/e2e/valeurs-erronees.e2e-spec.ts +++ b/e2e/valeurs-erronees.e2e-spec.ts @@ -10,12 +10,14 @@ describe("ngHyd - check invalid values are removed - ", () => { let navBar: Navbar; let calcPage: CalculatorPage; - beforeEach(async () => { + beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + }); + beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await browser.sleep(200); @@ -52,6 +54,6 @@ describe("ngHyd - check invalid values are removed - ", () => { expect(w).toEqual(""); // check that "compute" button is disabled - const calcButton = calcPage.checkCalcButtonEnabled(false); + calcPage.checkCalcButtonEnabled(false); }); }); diff --git a/e2e/variable-param-cancel.e2e-spec.ts b/e2e/variable-param-cancel.e2e-spec.ts index abe96d8fe..c76b73945 100644 --- a/e2e/variable-param-cancel.e2e-spec.ts +++ b/e2e/variable-param-cancel.e2e-spec.ts @@ -8,7 +8,7 @@ import { by, element } from "protractor"; describe("ngHyd - check cancel button for variable parameters - ", () => { let listPage: ListPage; - beforeAll(async () => { + beforeAll(() => { listPage = new ListPage(); }); -- GitLab From 6ebb6a711e59c4038995f31289b87073cd2ba669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 13 Mar 2023 11:32:11 +0100 Subject: [PATCH 207/285] update jalhyd_branch to 343-courbe-de-remous-rendre-facultatif-l-une-des-deux-conditions-limites-en-cote refs #610 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index 50cc6a0b1..c8375d882 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -342-solveur-multimodule-le-module-existe-toujours-apres-suppression +343-courbe-de-remous-rendre-facultatif-l-une-des-deux-conditions-limites-en-cote -- GitLab From 8b389e25ba2b9601d4be4c94d9117f4fd321fae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 15 Mar 2023 12:23:49 +0100 Subject: [PATCH 208/285] feat: add nub computability to form validity refs #610 --- src/app/components/generic-calculator/calculator.component.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index cc7754383..1ef35884a 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -568,6 +568,8 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe res = res && pstr.getChildren().length > 0; break; } + + res = res && this._formulaire.currentNub.isComputable(); } this._isUIValid.value = res; -- GitLab From 536b449e8c0f10086e9a067f32ec1884cf245d56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 16 Mar 2023 11:19:42 +0100 Subject: [PATCH 209/285] refactor: backwater curves calculator JSON definition: add allowEmpty to Z1,Z2 refs #610 --- src/app/calculators/courberemous/config.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/app/calculators/courberemous/config.json b/src/app/calculators/courberemous/config.json index d1682af8b..14ee8981c 100644 --- a/src/app/calculators/courberemous/config.json +++ b/src/app/calculators/courberemous/config.json @@ -44,8 +44,14 @@ "type": "fieldset", "fields": [ "Q", - "Z1", - "Z2" + { + "id": "Z1", + "allowEmpty": true + }, + { + "id": "Z2", + "allowEmpty": true + } ] }, { -- GitLab From 8c92831b561973f8f353c8120a7cc09fd0cf370b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 16 Mar 2023 13:11:19 +0100 Subject: [PATCH 210/285] fix: form validity not updated after closing variable mode parameter dialog refs #610 --- src/app/components/field-set/field-set.component.ts | 2 +- .../components/generic-input/generic-input.component.ts | 7 ++++--- .../param-field-line/param-field-line.component.ts | 4 ++++ src/app/components/param-values/param-values.component.ts | 4 ++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/app/components/field-set/field-set.component.ts b/src/app/components/field-set/field-set.component.ts index 62b39960f..889b28d60 100644 --- a/src/app/components/field-set/field-set.component.ts +++ b/src/app/components/field-set/field-set.component.ts @@ -265,7 +265,7 @@ export class FieldSetComponent implements DoCheck { * réception d'un événement de validité de ParamFieldLineComponent */ public onParamLineValid(event: boolean) { - this.updateValidity(); + this.updateValidity(true); } /** diff --git a/src/app/components/generic-input/generic-input.component.ts b/src/app/components/generic-input/generic-input.component.ts index 281a11332..0054b643d 100644 --- a/src/app/components/generic-input/generic-input.component.ts +++ b/src/app/components/generic-input/generic-input.component.ts @@ -119,9 +119,10 @@ export abstract class GenericInputComponentDirective implements OnChanges { */ private setAndEmitValid() { this._isValid.value = this._isValidUI && this._isValidModel; - if (this._isValid.changed) { - this.change.emit({ "action": "valid", "value": this._isValid.value }); - } + // if (this._isValid.changed) + // { + this.change.emit({ "action": "valid", "value": this._isValid.value }); + // } } /** diff --git a/src/app/components/param-field-line/param-field-line.component.ts b/src/app/components/param-field-line/param-field-line.component.ts index 2dbe5a333..43cea6de7 100644 --- a/src/app/components/param-field-line/param-field-line.component.ts +++ b/src/app/components/param-field-line/param-field-line.component.ts @@ -347,6 +347,10 @@ export class ParamFieldLineComponent implements OnChanges { case "cancelvar": // cancel button clicked in DialogEditParamValuesComponent this.param.loadObjectRepresentation(this.paramBackup); break; + + case "okvar": + this.emitValidity(); + break; } } diff --git a/src/app/components/param-values/param-values.component.ts b/src/app/components/param-values/param-values.component.ts index d39e310fe..b77eff7ad 100644 --- a/src/app/components/param-values/param-values.component.ts +++ b/src/app/components/param-values/param-values.component.ts @@ -74,6 +74,10 @@ export class ParamValuesComponent implements AfterViewInit, Observer { this.change.emit({ action: "cancelvar" }); + } else { + this.change.emit({ + action: "okvar" + }); } }); } -- GitLab From 83aaf87462435c68b0dd0f91d0dd582e368dc1e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 8 Mar 2023 14:25:51 +0100 Subject: [PATCH 211/285] fix(e2e): test fails due to bad path refs #608 --- .gitlab-ci.yml | 5 ---- e2e/load-save-session.e2e-spec.ts | 41 +++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 92811cedb..e00eb59e2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -71,11 +71,6 @@ install: test: stage: test - only: - - tags - - schedules - - web - - master script: - npm run e2e diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 8689c6f13..b56572375 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -18,16 +18,35 @@ let navbar: Navbar; let sidenav: SideNav; let prefPage: PreferencesPage; -async function saveSession(): Promise<string> { - await calcPage.clickSaveCalcButton(); - await browser.sleep(500); +function findDownloadedFile(filename: string): string { + const downloadDirs = ["Téléchargements", "Downloads", "/tmp"]; + for (const d of downloadDirs) { + const download_prefix = d.charAt(0) === "/" ? d : path.resolve(os.homedir(), d); + const fp = path.resolve(download_prefix, filename); + if (fs.existsSync(fp)) { + return fp; + } + } +} +function deleteDownloadedFile(filename: string) { // see: https://stackoverflow.com/questions/21935696/protractor-e2e-test-case-for-downloading-pdf-file - const filename = path.resolve(os.homedir(), "Téléchargements/session.json"); - if (fs.existsSync(filename)) { + const fp = findDownloadedFile(filename); + if (fp !== undefined) { // Make sure the browser doesn't have to rename the download. - fs.unlinkSync(filename); + fs.unlinkSync(fp); } +} + +async function saveSession(): Promise<string> { + const sessionFile = "session.json"; + deleteDownloadedFile(sessionFile); + + await calcPage.clickSaveCalcButton(); + await browser.sleep(500); + + // cf. protractor.conf.fs, exports.config.capabilities.chromeOptions.prefs.download.default_directory + // protractor.conf.fs/exports.config.capabilities.chromeOptions.prefs.download.default_directory DOES NOT WORK ! // Le code laissé en commentaire tente de corriger un bug : // il s'écoule 40 secondes entre le clic sur le bouton menu (en haut à gauche) et l'ouverture du sidenav. @@ -63,7 +82,8 @@ async function saveSession(): Promise<string> { // browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - return filename; + console.log("saveSession() saved to ", findDownloadedFile(sessionFile)); + return findDownloadedFile(sessionFile); } async function loadSession(path: string) { @@ -125,13 +145,14 @@ describe("ngHyd − save and load sessions", () => { await changeSelectValue(calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" await calcPage.getInputById("Ks").clear(); // coefficient de Strickler - await browser.sleep(1000); + await browser.sleep(200); await calcPage.getInputById("Ks").sendKeys("42"); - await browser.sleep(1000); + await browser.sleep(200); const filename = await saveSession(); - await browser.sleep(1000); + await browser.sleep(500); const fileContent = fs.readFileSync(filename, { encoding: "utf8" }); + await browser.sleep(200); expect(fileContent).toContain(`"nodeType":"SectionTrapeze"`); expect(fileContent).toContain(`{"symbol":"Ks","mode":"SINGLE","value":42}`); -- GitLab From 9ad188bdad0a4622ac5439ecfe2f561af93ee52c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 8 Mar 2023 16:23:43 +0100 Subject: [PATCH 212/285] refactor(e2e): temporarily disable mathjax tests (asynchronous interaction makes other tests fail) refs #608 --- e2e/documentation.e2e-spec.ts | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/e2e/documentation.e2e-spec.ts b/e2e/documentation.e2e-spec.ts index e3a142432..a3a4f14d8 100644 --- a/e2e/documentation.e2e-spec.ts +++ b/e2e/documentation.e2e-spec.ts @@ -22,11 +22,13 @@ describe("documentation − ", () => { async function checkMathjaxInHelp(lang: number) { // change language setup await prefPage.navigateTo(); + await browser.sleep(200); await prefPage.changeLanguage(lang); await browser.sleep(200); // start page await navbar.clickNewCalculatorButton(); + await browser.sleep(200); // open "fish ladder: fall" calculator await listPage.clickMenuEntryForCalcType(12); @@ -37,32 +39,38 @@ describe("documentation − ", () => { await browser.sleep(200); browser.getAllWindowHandles().then(async (handles) => { + const old = browser.ignoreSynchronization browser.ignoreSynchronization = true; // deprecated but the only solution to work in the newly opened tab // switch to help tab browser.switchTo().window(handles[1]).then(async () => { + await browser.sleep(200); // check Mathjax element is present - expect(element(by.css("mjx-container")).isPresent()).toBe(true); + expect(await element(by.css("mjx-container")).isPresent()).toBe(true); }).then(async () => { // close help tab - await browser.close(); + // await browser.close(); + // await browser.sleep(200); // switch back to calculator (required to avoid failure of next language test) await browser.switchTo().window(handles[0]); - browser.ignoreSynchronization = false; + await browser.sleep(200); + // browser.ignoreSynchronization = false; + }).then(async () => { + // switch back to calculator (required to avoid failure of next language test) + await browser.switchTo().window(handles[0]); + await browser.sleep(200); + // browser.ignoreSynchronization = false; + browser.ignoreSynchronization = old; }); - - // switch back to calculator (required to avoid failure of next language test) - await browser.switchTo().window(handles[0]); - - browser.ignoreSynchronization = false; }); } - it("check Mathjax formula are displayed in calculator French help", async () => { + xit("check Mathjax formula are displayed in calculator French help", async () => { + debugger await checkMathjaxInHelp(1); // fr }); - it("check Mathjax formula are displayed in calculator English help", async () => { + xit("check Mathjax formula are displayed in calculator English help", async () => { await checkMathjaxInHelp(0); // en }); }); -- GitLab From 20686a1b4490001c2004e500a9e0eaa39452f476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 17 Mar 2023 06:28:33 +0100 Subject: [PATCH 213/285] chore(ci): revert temporary change to .gitlab-ci.yml aimed at triggering CI tests on a feature branch refs #608 --- .gitlab-ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e00eb59e2..92811cedb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -71,6 +71,11 @@ install: test: stage: test + only: + - tags + - schedules + - web + - master script: - npm run e2e -- GitLab From 3b07b658a8aaac05c103517cd146292ebd330d70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 21 Mar 2023 13:21:44 +0100 Subject: [PATCH 214/285] test(e2e): check that solver can be used with only one module in the session refs #606 --- e2e/solveur.e2e-spec.ts | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index cdbbb5fec..6ca71d3c7 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -405,3 +405,53 @@ describe("Solveur - nghyd#601 without empty fields option", () => { await browser.sleep(200); }); }); + +describe("Solveur - nghyd#606 - a single module cannot be used with solver", () => { + let prefPage: PreferencesPage; + let navBar: Navbar; + let listPage: ListPage; + let calcPage: CalculatorPage; + + beforeAll(() => { + prefPage = new PreferencesPage(); + navBar = new Navbar(); + listPage = new ListPage(); + calcPage = new CalculatorPage(); + }); + + async function openCalculator(id: number) { + await navBar.clickNewCalculatorButton(); + await browser.sleep(200); + + await listPage.clickMenuEntryForCalcType(id); + await browser.sleep(200); + } + + async function openSolver() { + await openCalculator(22); + } + + beforeEach(async () => { + // await browser.manage().window().setPosition(2000, 30); + + // disable evil option "empty fields on module creation" + await prefPage.setEmptyFields(false); + }); + + it("", async () => { + // open uniform flow calculator + await openCalculator(3); + + // open a solver module + await openSolver(); + + // set speed as target parameter + const trs = calcPage.getSelectById("select_target_result"); + await changeSelectValue(trs, 1); + await browser.sleep(200); + + // check searched parameter has options + const sps = calcPage.getSelectById("select_searched_param"); + expect(await calcPage.isSelectEmpty(sps)).toBe(false); + }); +}); -- GitLab From 2fb4056def7864c5c85250a1e11db6c02f7d2b19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 21 Mar 2023 13:37:42 +0100 Subject: [PATCH 215/285] fix(doc): add missing headloss,strickler doc files in mkdocs-xx.yml refs #597 --- mkdocs/mkdocs-en.yml | 2 ++ mkdocs/mkdocs-fr.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/mkdocs/mkdocs-en.yml b/mkdocs/mkdocs-en.yml index 23d32b54e..88ae9eff9 100644 --- a/mkdocs/mkdocs-en.yml +++ b/mkdocs/mkdocs-en.yml @@ -29,7 +29,9 @@ nav: - general/parametres_application.md - general/raccourcis_clavier.md - Pipe flow: + - calculators/hyd_en_charge/perte_de_charge.md - calculators/hyd_en_charge/lechapt-calmon.md + - calculators/hyd_en_charge/strickler.md - calculators/hyd_en_charge/cond_distri.md - Open-channel flow: - Uniform flow: calculators/hsl/regime_uniforme.md diff --git a/mkdocs/mkdocs-fr.yml b/mkdocs/mkdocs-fr.yml index 4d6aa5fb2..4c31e2e74 100644 --- a/mkdocs/mkdocs-fr.yml +++ b/mkdocs/mkdocs-fr.yml @@ -29,7 +29,9 @@ nav: - general/parametres_application.md - general/raccourcis_clavier.md - Hydraulique en charge: + - calculators/hyd_en_charge/perte_de_charge.md - calculators/hyd_en_charge/lechapt-calmon.md + - calculators/hyd_en_charge/strickler.md - calculators/hyd_en_charge/cond_distri.md - Hydraulique à surface libre: - Régime uniforme: calculators/hsl/regime_uniforme.md -- GitLab From e729e5410e4fb7c33cfec2c0ab78239e21266cf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 21 Mar 2023 14:10:24 +0100 Subject: [PATCH 216/285] fix(doc): baffle fishways: add help links in pass type select refs #598 --- src/app/calculators/par/config.json | 8 +++++++- src/app/calculators/parsimulation/config.json | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/app/calculators/par/config.json b/src/app/calculators/par/config.json index c7ba05c46..00b267c59 100644 --- a/src/app/calculators/par/config.json +++ b/src/app/calculators/par/config.json @@ -22,7 +22,13 @@ "type": "select", "id": "select_partype", "property": "parType", - "default": "PLANE" + "default": "PLANE", + "help": { + "0": "par/theorie_plans.html", + "1": "par/theorie_fatou.html", + "2": "par/theorie_suractif.html", + "3": "par/theorie_mixte.html" + } }, "ha", "S", diff --git a/src/app/calculators/parsimulation/config.json b/src/app/calculators/parsimulation/config.json index 810625bf6..64b58bfc5 100644 --- a/src/app/calculators/parsimulation/config.json +++ b/src/app/calculators/parsimulation/config.json @@ -19,7 +19,13 @@ "type": "select", "id": "select_partype", "property": "parType", - "default": "PLANE" + "default": "PLANE", + "help": { + "0": "par/theorie_plans.html", + "1": "par/theorie_fatou.html", + "2": "par/theorie_suractif.html", + "3": "par/theorie_mixte.html" + } }, "L", "S", -- GitLab From 74c412cd28915bff9f505f970a46803652572524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 21 Mar 2023 14:13:41 +0100 Subject: [PATCH 217/285] fix(doc): baffle fishways: english translation of "pass type" --- src/app/calculators/par/en.json | 2 +- src/app/calculators/parsimulation/en.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/calculators/par/en.json b/src/app/calculators/par/en.json index f1d88aa17..a1271a1a1 100644 --- a/src/app/calculators/par/en.json +++ b/src/app/calculators/par/en.json @@ -30,7 +30,7 @@ "Hmin": "Minimal baffle height", "Hmax": "Maximal baffle height", - "select_partype": "Type de passe", + "select_partype": "Pass type", "PARTYPE_0": "Plane baffles", "PARTYPE_1": "Fatou", "PARTYPE_2": "Superactive", diff --git a/src/app/calculators/parsimulation/en.json b/src/app/calculators/parsimulation/en.json index 36c46b4b1..f6812ebc5 100644 --- a/src/app/calculators/parsimulation/en.json +++ b/src/app/calculators/parsimulation/en.json @@ -30,7 +30,7 @@ "Hmin": "Minimal baffle height", "Hmax": "Maximal baffle height", - "select_partype": "Type de passe", + "select_partype": "Pass type", "PARTYPE_0": "Plane baffles", "PARTYPE_1": "Fatou", "PARTYPE_2": "Superactive", -- GitLab From c3b218a5f24f50840f53d1de6b18e4703c1b43cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 21 Mar 2023 14:39:00 +0100 Subject: [PATCH 218/285] chore(doc): remove useless copies in mkdoc postprocessing script refs #612 --- scripts/mkdocs-postprocess.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/mkdocs-postprocess.js b/scripts/mkdocs-postprocess.js index 96f0794bb..95a410838 100644 --- a/scripts/mkdocs-postprocess.js +++ b/scripts/mkdocs-postprocess.js @@ -37,10 +37,6 @@ fs.copySync("docs/mathjax.config.js", destPath_JS + "/mathjax.config.js"); fs.copySync("docs/mathjax.config.js", destPath_FR_JS + "/mathjax.config.js"); fs.copySync("docs/mathjax.config.js", destPath_EN_JS + "/mathjax.config.js"); -fs.copySync("docs/mathjax-scrollbar.css", destPath_JS + "/mathjax.config.js"); -fs.copySync("docs/mathjax.config.js", destPath_FR_JS + "/mathjax.config.js"); -fs.copySync("docs/mathjax.config.js", destPath_EN_JS + "/mathjax.config.js"); - fs.copySync("docs/mathjax-scrollbar.css", destPath_CSS + "/mathjax-scrollbar.css"); fs.copySync("docs/mathjax-scrollbar.css", destPath_FR_CSS + "/mathjax-scrollbar.css"); fs.copySync("docs/mathjax-scrollbar.css", destPath_EN_CSS + "/mathjax-scrollbar.css"); -- GitLab From 784cfbb1cac97b72cd1acaf19d2e1dc86878155b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 22 Mar 2023 10:39:35 +0100 Subject: [PATCH 219/285] refactor(chore): move stylesheet files used by HTML documentation to a single directory refs #612 --- scripts/mkdocs-postprocess.js | 57 ++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/scripts/mkdocs-postprocess.js b/scripts/mkdocs-postprocess.js index 95a410838..e5025a4a0 100644 --- a/scripts/mkdocs-postprocess.js +++ b/scripts/mkdocs-postprocess.js @@ -11,8 +11,6 @@ const destPath_FR_JS = "src/assets/docs/fr/javascripts"; // pour la compilation const destPath_EN_JS = "src/assets/docs/en/javascripts"; // pour la compilation en local (anglais) const destPath_CSS = "src/assets/docs/stylesheets"; -const destPath_FR_CSS = "src/assets/docs/fr/stylesheets"; // pour la compilation en local (français) -const destPath_EN_CSS = "src/assets/docs/en/stylesheets"; // pour la compilation en local (anglais) const destPath_JS_MJ = destPath_JS + "/mathjax"; const destPath_FR_JS_MJ = destPath_FR_JS + "/mathjax"; // pour la compilation en local (français) @@ -38,8 +36,6 @@ fs.copySync("docs/mathjax.config.js", destPath_FR_JS + "/mathjax.config.js"); fs.copySync("docs/mathjax.config.js", destPath_EN_JS + "/mathjax.config.js"); fs.copySync("docs/mathjax-scrollbar.css", destPath_CSS + "/mathjax-scrollbar.css"); -fs.copySync("docs/mathjax-scrollbar.css", destPath_FR_CSS + "/mathjax-scrollbar.css"); -fs.copySync("docs/mathjax-scrollbar.css", destPath_EN_CSS + "/mathjax-scrollbar.css"); fs.copySync("docs/matomo-tracking.js", destPath_JS + "/matomo-tracking.js"); fs.copySync("docs/matomo-tracking.js", destPath_FR_JS + "/matomo-tracking.js"); @@ -48,3 +44,56 @@ fs.copySync("docs/matomo-tracking.js", destPath_EN_JS + "/matomo-tracking.js"); fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_JS + "/mermaid.min.js"); fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_FR_JS + "/mermaid.min.js"); fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_EN_JS + "/mermaid.min.js"); + +/* +Ici, on veut que les ressources copiées ci dessus soit accessibles. + +mkdocs-xx.yml : +extra_css: + - ../stylesheets/mathjax-scrollbar.css + +Fichiers HTML générés : +Par ex src/assets/docs/fr/calculators/maths/solver.html contient <link rel="stylesheet" href="../../stylesheets/mathjax-scrollbar.css"> +ce qui fait référence à stylesheets dans src/assets/docs/fr alors qu'on veut référencer stylesheets dans src/assets/docs/ +(le chemin généré dépend de l'emplacement du fichier le contenant). + +Le problème, c'est que si on modifie extra_css avec ../../stylesheets/mathjax-scrollbar.css, cela génère la même chose +(href="../../stylesheets/mathjax-scrollbar.css") vraisemblablement à cause de site_dir (=docs/fr) qui limite les "remontées" +de niveau de répertoire. + +La solution est donc de modifier les fichiers HTML générés pour ajouter ../ dans href="...". +*/ + +const cp = require('child_process'); + +function execBashCmd(cmd) { + // console.log(cmd); + // console.log(cp.execSync(cmd, { encoding: 'utf-8' })); + cp.execSync(cmd); +} + +function escapeSlash(s) { + return s.replaceAll('/', '\\\/'); +} + +function escapeDot(s) { + return s.replaceAll('\.', '\\.'); +} + +function escapeDoubleQuote(s) { + return s.replaceAll('"', '\\"'); +} + +function applyEscapes(s) { + return escapeDot(escapeSlash(escapeDoubleQuote(s))); +} + +function replaceHtml(base_dir, s1, s2) { + s1 = applyEscapes(s1); + s2 = applyEscapes(s2); + const cmd = "find " + base_dir + " -name '*.html' -exec sed -i \"s/" + s1 + "/" + s2 + "/g\" {} \\\;"; + execBashCmd(cmd); +} + +replaceHtml("src/assets/docs/fr/", "../../stylesheets/mathjax-scrollbar.css", "../../../stylesheets/mathjax-scrollbar.css"); +replaceHtml("src/assets/docs/en/", "../../stylesheets/mathjax-scrollbar.css", "../../../stylesheets/mathjax-scrollbar.css"); -- GitLab From 5f21248c9c91bab059548cdca34db31aedc4e5a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 22 Mar 2023 11:10:56 +0100 Subject: [PATCH 220/285] refactor(chore): move javascript files used by HTML documentation to a single directory refs #612 --- scripts/mkdocs-postprocess.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/scripts/mkdocs-postprocess.js b/scripts/mkdocs-postprocess.js index e5025a4a0..b3c248606 100644 --- a/scripts/mkdocs-postprocess.js +++ b/scripts/mkdocs-postprocess.js @@ -24,26 +24,18 @@ fs.ensureDirSync(destPath_JS_MJ + "/fonts/HTML-CSS/TeX/", { recursive: true }); // copy required files only fs.copySync("node_modules/mathjax/es5/tex-mml-chtml.js", destPath_JS_MJ + "/tex-mml-chtml.js"); -fs.copySync("node_modules/mathjax/es5/tex-mml-chtml.js", destPath_FR_JS_MJ + "/tex-mml-chtml.js"); -fs.copySync("node_modules/mathjax/es5/tex-mml-chtml.js", destPath_EN_JS_MJ + "/tex-mml-chtml.js"); fs.copySync("node_modules/mathjax/es5/output/chtml/fonts", destPath_JS_MJ + "/output/chtml/fonts"); fs.copySync("node_modules/mathjax/es5/output/chtml/fonts", destPath_FR_JS_MJ + "/output/chtml/fonts"); fs.copySync("node_modules/mathjax/es5/output/chtml/fonts", destPath_EN_JS_MJ + "/output/chtml/fonts"); fs.copySync("docs/mathjax.config.js", destPath_JS + "/mathjax.config.js"); -fs.copySync("docs/mathjax.config.js", destPath_FR_JS + "/mathjax.config.js"); -fs.copySync("docs/mathjax.config.js", destPath_EN_JS + "/mathjax.config.js"); fs.copySync("docs/mathjax-scrollbar.css", destPath_CSS + "/mathjax-scrollbar.css"); fs.copySync("docs/matomo-tracking.js", destPath_JS + "/matomo-tracking.js"); -fs.copySync("docs/matomo-tracking.js", destPath_FR_JS + "/matomo-tracking.js"); -fs.copySync("docs/matomo-tracking.js", destPath_EN_JS + "/matomo-tracking.js"); fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_JS + "/mermaid.min.js"); -fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_FR_JS + "/mermaid.min.js"); -fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_EN_JS + "/mermaid.min.js"); /* Ici, on veut que les ressources copiées ci dessus soit accessibles. @@ -97,3 +89,15 @@ function replaceHtml(base_dir, s1, s2) { replaceHtml("src/assets/docs/fr/", "../../stylesheets/mathjax-scrollbar.css", "../../../stylesheets/mathjax-scrollbar.css"); replaceHtml("src/assets/docs/en/", "../../stylesheets/mathjax-scrollbar.css", "../../../stylesheets/mathjax-scrollbar.css"); + +replaceHtml("src/assets/docs/fr/", "../../javascripts/mathjax.config.js", "../../../javascripts/mathjax.config.js"); +replaceHtml("src/assets/docs/en/", "../../javascripts/mathjax.config.js", "../../../javascripts/mathjax.config.js"); + +replaceHtml("src/assets/docs/fr/", "../../javascripts/matomo-tracking.js", "../../../javascripts/matomo-tracking.js"); +replaceHtml("src/assets/docs/en/", "../../javascripts/matomo-tracking.js", "../../../javascripts/matomo-tracking.js"); + +replaceHtml("src/assets/docs/fr/", "../../javascripts/mermaid.min.js", "../../../javascripts/mermaid.min.js"); +replaceHtml("src/assets/docs/en/", "../../javascripts/mermaid.min.js", "../../../javascripts/mermaid.min.js"); + +replaceHtml("src/assets/docs/fr/", "../../javascripts/mathjax/tex-mml-chtml.js", "../../../javascripts/mathjax/tex-mml-chtml.js"); +replaceHtml("src/assets/docs/en/", "../../javascripts/mathjax/tex-mml-chtml.js", "../../../javascripts/mathjax/tex-mml-chtml.js"); -- GitLab From ba67544b0247ee856b383733134905641e3c4ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 22 Mar 2023 11:20:48 +0100 Subject: [PATCH 221/285] fix(chore): doc: remove useless font files copy refs #612 --- scripts/mkdocs-postprocess.js | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/scripts/mkdocs-postprocess.js b/scripts/mkdocs-postprocess.js index b3c248606..4119dbb6a 100644 --- a/scripts/mkdocs-postprocess.js +++ b/scripts/mkdocs-postprocess.js @@ -7,14 +7,8 @@ const fs = require('fs-extra'); const destPath_JS = "src/assets/docs/javascripts"; -const destPath_FR_JS = "src/assets/docs/fr/javascripts"; // pour la compilation en local (français) -const destPath_EN_JS = "src/assets/docs/en/javascripts"; // pour la compilation en local (anglais) - const destPath_CSS = "src/assets/docs/stylesheets"; - const destPath_JS_MJ = destPath_JS + "/mathjax"; -const destPath_FR_JS_MJ = destPath_FR_JS + "/mathjax"; // pour la compilation en local (français) -const destPath_EN_JS_MJ = destPath_EN_JS + "/mathjax"; // pour la compilation en local (anglais) // empty destination folder fs.emptyDirSync(destPath_JS); @@ -24,17 +18,10 @@ fs.ensureDirSync(destPath_JS_MJ + "/fonts/HTML-CSS/TeX/", { recursive: true }); // copy required files only fs.copySync("node_modules/mathjax/es5/tex-mml-chtml.js", destPath_JS_MJ + "/tex-mml-chtml.js"); - fs.copySync("node_modules/mathjax/es5/output/chtml/fonts", destPath_JS_MJ + "/output/chtml/fonts"); -fs.copySync("node_modules/mathjax/es5/output/chtml/fonts", destPath_FR_JS_MJ + "/output/chtml/fonts"); -fs.copySync("node_modules/mathjax/es5/output/chtml/fonts", destPath_EN_JS_MJ + "/output/chtml/fonts"); - fs.copySync("docs/mathjax.config.js", destPath_JS + "/mathjax.config.js"); - fs.copySync("docs/mathjax-scrollbar.css", destPath_CSS + "/mathjax-scrollbar.css"); - fs.copySync("docs/matomo-tracking.js", destPath_JS + "/matomo-tracking.js"); - fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_JS + "/mermaid.min.js"); /* -- GitLab From 2b3d1405cd77f067d990dd9beeaf8ea7185fee76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 22 Mar 2023 11:25:25 +0100 Subject: [PATCH 222/285] fix(chore): remove warning in browser console about mermaid.min.js.map refs #612 --- scripts/mkdocs-postprocess.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/mkdocs-postprocess.js b/scripts/mkdocs-postprocess.js index 4119dbb6a..11b259033 100644 --- a/scripts/mkdocs-postprocess.js +++ b/scripts/mkdocs-postprocess.js @@ -23,6 +23,7 @@ fs.copySync("docs/mathjax.config.js", destPath_JS + "/mathjax.config.js"); fs.copySync("docs/mathjax-scrollbar.css", destPath_CSS + "/mathjax-scrollbar.css"); fs.copySync("docs/matomo-tracking.js", destPath_JS + "/matomo-tracking.js"); fs.copySync("node_modules/mermaid/dist/mermaid.min.js", destPath_JS + "/mermaid.min.js"); +fs.copySync("node_modules/mermaid/dist/mermaid.min.js.map", destPath_JS + "/mermaid.min.js.map"); /* Ici, on veut que les ressources copiées ci dessus soit accessibles. -- GitLab From 7639a5e1774522c35301898c9c268a5e2e93a2f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 28 Mar 2023 16:32:49 +0200 Subject: [PATCH 223/285] doc: add slot discharge coefficient documentation refs #595 --- docs/en/calculators/structures/fente_noyee.md | 38 ++++++++++++++++-- .../structures/fente_noyee_fig1.png | Bin 0 -> 19290 bytes .../structures/fente_noyee_fig2.png | Bin 0 -> 344833 bytes docs/fr/calculators/structures/fente_noyee.md | 38 ++++++++++++++++-- .../structures/fente_noyee_fig1.png | Bin 0 -> 19290 bytes .../structures/fente_noyee_fig2.png | Bin 0 -> 344833 bytes 6 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 docs/en/calculators/structures/fente_noyee_fig1.png create mode 100644 docs/en/calculators/structures/fente_noyee_fig2.png create mode 100644 docs/fr/calculators/structures/fente_noyee_fig1.png create mode 100644 docs/fr/calculators/structures/fente_noyee_fig2.png diff --git a/docs/en/calculators/structures/fente_noyee.md b/docs/en/calculators/structures/fente_noyee.md index fc77817d5..b7a3fac75 100644 --- a/docs/en/calculators/structures/fente_noyee.md +++ b/docs/en/calculators/structures/fente_noyee.md @@ -6,12 +6,44 @@ Larinier (1992) suggests the following equation: -$$Q = \mu b H_1\sqrt{2g \Delta H}$$ +$$Q = C_d b H_1\sqrt{2g \Delta H}$$ With: * *b* the slot width in m * *H<sub>1</sub>* the head on the slot m -* *μ* the discharge coefficient (equal to 0.65 by default). +* *C<sub>d</sub>* the discharge coefficient. -The discharge coefficient *μ* may vary from 0.65 for a sharp-edged slot to more than 0.85 when the slot profile is rounded. +# Discharge coefficient **C<sub>d</sub>** for the submerged slot formula (vertical slot fish ladder) + +The discharge coefficient **C<sub>d</sub>** is an important parameter for the design of vertical slot weirs. This term is integrated in the formula of conveyance of a submerged slot, which connects the transited flow with the fall between basins, the upstream head on the slot and its width. + +**For single vertical slot weirs**, model-reduced studies and numerical simulations have determined average values of discharge coefficients for different configurations, for a typical slot and baffle geometry defined from vertical slot weirs built in France (Figure 1). A different slot and baffle geometry can induce deviations from the average values of the discharge coefficients according to the configurations indicated below. + + + +*Figure 1: typical slot and baffle geometry from which the discharge coefficient values were determined (Ballu, 2017)* + +* **Under smooth apron conditions (no bottom roughness) and in the absence of a weir in the slot**, Wang *et al.* (2010) and Ballu *et al.* (2017) showed that the value of **C<sub>d</sub>** is not significantly influenced by discharge and depends mainly on the slope **S** (%) and the ratio of the basin width **B** to the slot width **b** (**B/b**). + +* **Under smooth invert conditions (no bottom roughness) with the presence of a weir in the slot**, under 3 configurations of weir heights **h<sub>s</sub>/b** related to slot width **b** (**h<sub>s</sub>/b** = 0.5, 1, and 1.5), Ballu *et al.* (2015) and Ballu (2017) showed that the value of **C<sub>d</sub>** is not significantly influenced by discharge, and is mainly influenced by slope **S**, aspect ratio **B/b**, and weir height **h<sub>s</sub>/b**. + +* **Under apron conditions with precast bottom roughnesses and in the absence of a weir in the slot**, with evenly distributed roughnesses of height **h<sub>r</sub>/b** = 2/3 and diameter **Ø<sub>r</sub>/b** = 1/2, under 2 configurations of densities **d<sub>r</sub>** of 10% and 15%, Ballu *et al.* (2017) and Ballu (2017) showed that the value of **C<sub>d</sub>** is not significantly influenced by discharge, and is mainly influenced by slope **S**, aspect ratio **B/b**, and the presence of the bottom roughness **d<sub>r</sub>**. + +Depending on these different configurations, the average values of the discharge coefficient range from about 0.62 to nearly 0.88 (Figure 2). + + + +*Figure 2: average values and uncertainties (95% confidence intervals, k = 2) of the discharge coefficients according to the slope S and the shape ratio B/b, for different configurations: (A) smooth raft without weir in the slot, (B) bottom roughness d<sub>r</sub> = 10% without weir in the slot, (C) bottom roughness d<sub>r</sub> = 15% without weir in the slot, (D) weir in the slot h<sub>s</sub>/b = 0.5 and smooth raft, (E) weir in the slot h<sub>s</sub>/b = 1 and smooth raft, (F) weir in the slot h<sub>s</sub>/b = 1.5 and smooth raft* + +**For passes with double vertical slots**, **C<sub>d</sub>** values between 0.75 and 0.80 are commonly used for recently constructed devices with longitudinal slopes between 4% and 5.5%. Studies are under way to clarify the influence of different configurations on discharge coefficients and their corresponding values. + +**Bibliography:** + +Ballu A., Pineau G., Calluaud D., David L. (2015). Experimental study of the influence of sills on vertical slot fishway flow. *36<sup>th</sup> IAHR World Congress*, 7p. + +Ballu A. (2017). Étude numérique et expérimentale de l’écoulement turbulent au sein des passes à poissons à fentes verticales. Analyse de l’écoulement tridimensionnel et instationnaire. *Thèse de l’Université de Poitiers*, 223p. + +Ballu A., Calluaud D., Pineau G., david L. (2017). Experimental study of the influence of macro‑roughnesses on vertical slot fishway flows. *La Houille Blanche*, 2: 9-14. + +Wang R.W., David L., Larinier M. (2010). Contribution of experimental fluid mechanics to the design of vertical slot ï¬sh passes. *Knowledge and Management of Aquatic Ecosystems*, 396(2). diff --git a/docs/en/calculators/structures/fente_noyee_fig1.png b/docs/en/calculators/structures/fente_noyee_fig1.png new file mode 100644 index 0000000000000000000000000000000000000000..15680c7cefede3a3c1282e3b1f20ff3219a212de GIT binary patch literal 19290 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 JiM{*$zW{x2GfDse literal 0 HcmV?d00001 diff --git a/docs/en/calculators/structures/fente_noyee_fig2.png b/docs/en/calculators/structures/fente_noyee_fig2.png new file mode 100644 index 0000000000000000000000000000000000000000..2c72b515e39b440eae1f429ff091a0b686b41453 GIT binary patch literal 344833 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	pN%od?m!Z9*tTIxN2d=MYRt`J37){0bbA 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 DX<BnK literal 0 HcmV?d00001 diff --git a/docs/fr/calculators/structures/fente_noyee.md b/docs/fr/calculators/structures/fente_noyee.md index efd3dcf98..b31bdfb8c 100644 --- a/docs/fr/calculators/structures/fente_noyee.md +++ b/docs/fr/calculators/structures/fente_noyee.md @@ -6,12 +6,44 @@ Larinier (1992) propose l'équation suivante : -$$Q = \mu b H_1\sqrt{2g \Delta H}$$ +$$Q = C_d b H_1\sqrt{2g \Delta H}$$ Avec : * *b* la largeur de la fente en m * *H<sub>1</sub>* la charge sur la fente m -* *μ* le coefficient de débit (égal à 0.65 par défaut). +* *C<sub>d</sub>* le coefficient de débit. -Le coefficient de débit *μ* peut varier de 0.65 pour une fente à arêtes vives à plus de 0.85 lorsque le profil de la fente est arrondi. +# Coefficient de débit C<sub>d</sub> pour la formule de la fente noyée (passe à bassins à fente verticale) + +Le coefficient de débit **C<sub>d</sub>** est un paramètre important pour le dimensionnement des passes à fente(s) verticale(s). Ce terme est intégré dans la formule de débitance d’un déversoir de type fente noyée, qui relie le débit transité avec la chute entre bassins, la charge amont sur la fente et sa largeur. + +**Pour les passes à simple fente verticale**, des études réalisées sur modèle-réduit et par simulations numériques ont permis de déterminer des valeurs moyennes de coefficients de débit selon différentes configurations, pour une géométrie type de fente et de déflecteurs définie à partir des passes à fentes verticales construites en France (Figure 1). Une géométrie différente de fente et de déflecteur peut induire des écarts par rapport aux valeurs moyennes des coefficients de débit selon les configurations indiquées ci-dessous. + + + +*Figure 1 : géométrie type de fente et de déflecteurs à partir de laquelle les valeurs des coefficients de débit ont été déterminés (Ballu, 2017)* + +* **Dans des conditions de radier lisse (sans rugosité de fond) et en l’absence de seuil dans la fente**, Wang *et al.* (2010) et Ballu *et al.* (2017) ont montré que la valeur du **C<sub>d</sub>** n’est pas significativement influencée par le débit et dépend principalement de la pente **S** (%) et du rapport entre la largeur des bassins **B** et la largeur de la fente **b** (**B/b**). + +* **Dans des conditions de radier lisse (sans rugosité de fond) avec la présence d’un seuil dans la fente**, selon 3 configurations de hauteurs de seuils **h<sub>s</sub>** rapportées à la largeur de la fente **b** (**h<sub>s</sub>/b** = 0.5, 1 et 1.5), Ballu *et al.* (2015) et Ballu (2017) ont montré que la valeur du **C<sub>d</sub>** n’est pas significativement influencée par le débit, et qu’elle est principalement influencée par la pente **S**, le rapport de forme **B/b** et la hauteur des seuils **h<sub>s</sub>**. + +* **Dans des conditions de radier avec rugosités de fond préfabriquées et en l’absence de seuil dans la fente**, avec des rugosités régulièrement réparties de hauteur **h<sub>r</sub>/b** = 2/3 et de diamètre **Ø<sub>r</sub>/b** = 1/2, selon 2 configurations de densités **d<sub>r</sub>** de 10% et 15%, Ballu *et al.* (2017) et Ballu (2017) ont montré que la valeur du **C<sub>d</sub>** n’est pas significativement influencée par le débit, et qu’elle est principalement influencée par la pente **S**, le rapport de forme **B/b** et la présence de la rugosité de fond **d<sub>r</sub>**. + +* En fonction de ces différentes configurations, les valeurs moyennes du coefficient de débit s’étalent d’environ 0.62 jusqu’à près de 0.88 (Figure 2). + + + +*Figure 2 : valeurs moyennes et incertitudes (intervalles de confiance à 95%, k=2) des coefficients de débits selon la pente S et le rapport de forme B/b pour différentes configurations : (A) radier lisse sans seuil dans la fente, (B) rugosités de fond d<sub>r</sub> = 10% sans seuil dans la fente, (C) rugosités de fond d<sub>r</sub> = 15% sans seuil dans la fente, (D) seuil dans la fente h<sub>s</sub>/b = 0.5 et radier lisse, (E) seuil dans la fente h<sub>s</sub>/b = 1 et radier lisse, (F) seuil dans la fente h<sub>s</sub>/b = 1.5 et radier lisse* + +**Pour les passes à doubles fentes verticales**, des valeurs de **C<sub>d</sub>** comprises entre 0.75 et 0.80 sont couramment retenues pour les dispositifs construits récemment avec des pentes longitudinales entre 4% et 5.5%. Des études sont en cours afin de préciser l’influence de différentes configurations sur les coefficients de débits et leurs valeurs correspondantes. + +**Bibliographie :** + +Ballu A., Pineau G., Calluaud D., David L. (2015). Experimental study of the influence of sills on vertical slot fishway flow. *36<sup>th</sup> IAHR World Congress*, 7p. + +Ballu A. (2017). Étude numérique et expérimentale de l’écoulement turbulent au sein des passes à poissons à fentes verticales. Analyse de l’écoulement tridimensionnel et instationnaire. *Thèse de l’Université de Poitiers*, 223p. + +Ballu A., Calluaud D., Pineau G., david L. (2017). Experimental study of the influence of macro‑roughnesses on vertical slot fishway flows. *La Houille Blanche*, 2: 9-14. + +Wang R.W., David L., Larinier M. (2010). Contribution of experimental fluid mechanics to the design of vertical slot ï¬sh passes. *Knowledge and Management of Aquatic Ecosystems*, 396(2). diff --git a/docs/fr/calculators/structures/fente_noyee_fig1.png b/docs/fr/calculators/structures/fente_noyee_fig1.png new file mode 100644 index 0000000000000000000000000000000000000000..15680c7cefede3a3c1282e3b1f20ff3219a212de GIT binary patch literal 19290 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 JiM{*$zW{x2GfDse literal 0 HcmV?d00001 diff --git a/docs/fr/calculators/structures/fente_noyee_fig2.png b/docs/fr/calculators/structures/fente_noyee_fig2.png new file mode 100644 index 0000000000000000000000000000000000000000..2c72b515e39b440eae1f429ff091a0b686b41453 GIT binary patch literal 344833 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	pN%od?m!Z9*tTIxN2d=MYRt`J37){0bbA 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 DX<BnK literal 0 HcmV?d00001 -- GitLab From cf18931f24dc418fd54aeff1f97e267da62c17d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 3 Apr 2023 14:37:23 +0200 Subject: [PATCH 224/285] refactor: PAB table: rename first column refs #615 --- src/locale/messages.en.json | 2 +- src/locale/messages.fr.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index b7b836bd0..b31fc6330 100755 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -470,7 +470,7 @@ "INFO_PAB_OUVRAGES": "Devices", "INFO_PAB_EDIT_VALUES": "Modify values", "INFO_CALCULATE_FIRST": "Calculate this module first", - "INFO_PAB_NUM_BASSIN": "Basin #", + "INFO_PAB_NUM_BASSIN": "Basin/wall #", "INFO_PAB_HEADER_TYPE": "Type", "INFO_PAB_HEADER_PARAMETERS": "Parameters", "INFO_PAB_HEADER_VALUES": "Values", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 1b2892173..21aca059b 100755 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -471,7 +471,7 @@ "INFO_PAB_OUVRAGES": "Ouvrages", "INFO_PAB_EDIT_VALUES": "Modifier les valeurs", "INFO_CALCULATE_FIRST": "Calculer ce module d'abord", - "INFO_PAB_NUM_BASSIN": "N° de bassin", + "INFO_PAB_NUM_BASSIN": "N° de bassin/cloison", "INFO_PAB_HEADER_TYPE": "Type", "INFO_PAB_HEADER_PARAMETERS": "Paramètres", "INFO_PAB_HEADER_VALUES": "Valeurs", -- GitLab From 0be34bb23fc3fca1ea14bc22e033522be87f9d8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 4 Apr 2023 10:53:44 +0200 Subject: [PATCH 225/285] refactor: PAB table: reshape cells, move ZRAM parameter out of basin columns refs #615 --- .../pab-table/pab-table.component.ts | 142 ++++++++++-------- 1 file changed, 82 insertions(+), 60 deletions(-) diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index a3919284b..c835b87b4 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -464,14 +464,24 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni // 0. build spanned headers over real columns this.headers = []; - // 1 header for basin + // 1 column for basin number let bs: any[] = this.model.children; bs = bs.concat(this.model.downWall); + this.headers.push({ + title: this.i18nService.localizeText("INFO_PAB_NUM_BASSIN"), + selectable: bs, + rowspan: 2 + }); + // 3 columns for basin information this.headers.push({ title: this.i18nService.localizeText("INFO_PAB_BASSIN"), - colspan: 5, + colspan: 3, selectable: bs }); + // 1 col for wall + this.headers.push({ + title: this.i18nService.localizeText("INFO_PB_CLOISON"), + }); // 1 header for each device of the wall having the most devices (including downwall) for (let i = 0; i < maxNbDevices; i++) { this.headers.push({ @@ -489,48 +499,35 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni this.cols.push(headerRow1); this.cols.push(headerRow2); - // 5 cols for basin - headerRow1.cells.push({ - title: this.i18nService.localizeText("INFO_PAB_NUM_BASSIN"), - selectable: bs, - rowspan: 2 - }); + // 3 cols for basin information headerRow1.cells.push({ title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "LB"), - selectable: bs, - rowspan: 2 + selectable: bs }); headerRow1.cells.push({ title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "BB"), - selectable: bs, - rowspan: 2 + selectable: bs }); headerRow1.cells.push({ title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRMB"), - selectable: bs, - rowspan: 2 - }); - headerRow1.cells.push({ - title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRAM"), - selectable: bs, - rowspan: 2 + selectable: bs }); - // no col for wall type (defined by rowspan-2 header above) - // 3 cols for each device of the wall having the most devices (including downwall) + + // 2 cols for each device of the wall having the most devices (including downwall) for (let i = 0; i < maxNbDevices; i++) { const sel = this.model.children.map(c => c.getChildren()[i]).concat(this.model.downWall.getChildren()[i]); + if (i == 0) { + headerRow1.cells.push({ + title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRAM"), + selectable: bs, + }); + } headerRow1.cells.push({ - title: this.i18nService.localizeText("INFO_PAB_HEADER_TYPE"), - selectable: sel, - selectableColumn: i, - colspan: 2 - }); - headerRow2.cells.push({ title: this.i18nService.localizeText("INFO_PAB_HEADER_PARAMETERS"), selectable: sel, selectableColumn: i }); - headerRow2.cells.push({ + headerRow1.cells.push({ title: this.i18nService.localizeText("INFO_PAB_HEADER_VALUES"), selectable: sel, selectableColumn: i @@ -546,23 +543,50 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni value: l }; }); + + // NOTE : EB = empty cell (3 columns wide) for LB,BB,ZRMB + // EZRAM = empty cell below ZRAM value (QA editor height + 1) + + const minQAEditorRowCount: number = 1; + // B.1 many rows for each wall let childIndex = 0; for (const cloison of this.model.children) { - // as much rows as the greatest number of parameters among its devices - const maxNbParams = this.findMaxNumberOfDeviceParameters(cloison); - for (let r = 0; r <= maxNbParams; r++) { - // build device params row + // maximum device parameter count for all devices in this wall + const maxDeviceParamCount = this.findMaxNumberOfDeviceParameters(cloison); + + // total row count for this wall = max device parameter row count + 1 line for device type + // minimum = 1 row (EB) + 1 row (LB,BB,ZRMB cells) + QA editor + const totalRowCount = Math.max(maxDeviceParamCount + 1, 1 + 1 + minQAEditorRowCount); + + // QA editor row count : total row count - 1 (LB,BB,ZRMB cells) - 1 (EB, see note) + const QAEditorRowCount = Math.max(totalRowCount - 2, minQAEditorRowCount); + + // total parameter rows (all parameters without device type) = total row count - 1 + const paramRowCount = totalRowCount - 1; + + for (let r = 0; r < totalRowCount; r++) { const deviceParamRow = { selectable: cloison, cells: [] }; - // basin number, LB, BB, ZRMB and ZRAM if (r === 0) { // basin number deviceParamRow.cells.push({ value: childIndex + 1, - rowspan: maxNbParams + 1, + rowspan: totalRowCount, class: "basin_number", selectable: cloison }); + // empty line (EB cell, see note) + deviceParamRow.cells.push({ + colspan: 3 + }); + // ZRAM + deviceParamRow.cells.push({ + model: cloison.prms.ZRAM, + title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRAM") + }); + } + // LB, BB, ZRMB, EZRAM cell (see note) + else if (r === 1) { // Longueur bassin deviceParamRow.cells.push({ model: cloison.prms.LB, @@ -578,27 +602,26 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni model: cloison.prms.ZRMB, title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRMB") }); - // ZRAM + // empty cell (EZRAM cell, see note) deviceParamRow.cells.push({ - model: cloison.prms.ZRAM, - title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "ZRAM") + rowspan: paramRowCount }); } - else if (r === 1) { - // 1 row for QA editor + else if (r === 2) { + // rows for QA editor const qaParam = new NgParameter(cloison.prms.QA, this.pabTable.form); qaParam.radioConfig = ParamRadioConfig.VAR; deviceParamRow.cells.push({ model: qaParam, - colspan: 4, - rowspan: maxNbParams, + colspan: 3, + rowspan: QAEditorRowCount, qa: true, title: this.formService.expandVariableNameAndUnit(CalculatorType.Pab, "QA") }); } // devices - this.fillParallelStructureCells(deviceParamRow, r, maxNbParams, loisCloisons); + this.fillParallelStructureCells(deviceParamRow, r, paramRowCount, loisCloisons); } childIndex++; } @@ -612,22 +635,23 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni }; }); // as much rows as the greatest number of parameters among its devices - const maxNbParamsDW = this.findMaxNumberOfDeviceParameters(this.model.downWall); - for (let r = 0; r <= maxNbParamsDW; r++) { + const dwParamCount = this.findMaxNumberOfDeviceParameters(this.model.downWall); // device parameter count + const paramRowCount = dwParamCount + 1; // max line number for parameters (without device type) + for (let r = 0; r < paramRowCount; r++) { // build device params row const deviceParamRowDW = { selectable: this.model.downWall, cells: [] }; if (r === 0) { // "downstream" deviceParamRowDW.cells.push({ value: "Aval", - rowspan: maxNbParamsDW + 1, + rowspan: paramRowCount, class: "basin_number", selectable: this.model.downWall }); // 3 empty cells deviceParamRowDW.cells.push({ colspan: 3, - rowspan: maxNbParamsDW + 1, + rowspan: paramRowCount, selectable: this.model.downWall }); // ZRAM @@ -639,27 +663,24 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni if (r === 1) { // 1 empty cell (in place of the QA editor) deviceParamRowDW.cells.push({ - rowspan: maxNbParamsDW, + rowspan: dwParamCount, selectable: this.model.downWall }); } // devices - this.fillParallelStructureCells(deviceParamRowDW, r, maxNbParamsDW, loisAval); + this.fillParallelStructureCells(deviceParamRowDW, r, paramRowCount, loisAval); } this.updateValidity(); } - private fillParallelStructureCells(tableRow: any, rowIndex: number, maxParamCount: number, loisAdmissibles: any[]) { - // device param cells : 3 cells for each device - + private fillParallelStructureCells(tableRow: any, rowIndex: number, maxStructParamRowCount: number, loisAdmissibles: any[]) { const ps: ParallelStructure = tableRow.selectable; - - for (const struct of ps.structures) { - const childStructParamCount = this.nubVisibleParameterCount(struct); - // cell 1 : device type - if (rowIndex === 0) { // 1st row + for (const struct of ps.structures) { // for each device + const structParamCount = this.nubVisibleParameterCount(struct); + if (rowIndex === 0) { + // 1st row : device type tableRow.cells.push({ model: struct, modelValue: struct.getPropValue("loiDebit"), @@ -668,9 +689,9 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni colspan: 2 }); } - else if (rowIndex === childStructParamCount + 1) { + else if (rowIndex === structParamCount + 1) { // fill remaining space - const remaining = maxParamCount - childStructParamCount; + const remaining = maxStructParamRowCount - structParamCount; if (remaining > 0) { tableRow.cells.push({ colspan: 2, @@ -680,16 +701,17 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni } } else { + // parameter row const nvParam = struct.getNthVisibleParam(rowIndex - 1); if (nvParam) { const nvParamTitle = this.formService.expandVariableNameAndUnit(CalculatorType.Pab, nvParam.symbol); - // cell 2 : param name + // parameter name tableRow.cells.push({ value: nvParam.symbol, title: nvParamTitle, selectable: struct }); - // cell 3 : param value + // parameter value tableRow.cells.push({ model: nvParam, title: nvParamTitle, -- GitLab From f70b4d5bea623b80d2bb62b4e2a1d6da93550494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 4 Apr 2023 11:37:31 +0200 Subject: [PATCH 226/285] fix: PAB table: selected areas when clicking on various cells refs #615 --- src/app/components/pab-table/pab-table.component.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index c835b87b4..8d48ab20a 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -481,6 +481,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni // 1 col for wall this.headers.push({ title: this.i18nService.localizeText("INFO_PB_CLOISON"), + selectable: bs }); // 1 header for each device of the wall having the most devices (including downwall) for (let i = 0; i < maxNbDevices; i++) { @@ -577,7 +578,8 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni }); // empty line (EB cell, see note) deviceParamRow.cells.push({ - colspan: 3 + colspan: 3, + selectable: cloison }); // ZRAM deviceParamRow.cells.push({ @@ -604,7 +606,8 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni }); // empty cell (EZRAM cell, see note) deviceParamRow.cells.push({ - rowspan: paramRowCount + rowspan: paramRowCount, + selectable: cloison }); } else if (r === 2) { @@ -696,7 +699,7 @@ export class PabTableComponent implements AfterViewInit, AfterViewChecked, OnIni tableRow.cells.push({ colspan: 2, rowspan: remaining, - selectable: ps + selectable: struct }); } } -- GitLab From f45aad92f5b72242e4021866c757e1cbda4cc976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 5 Apr 2023 14:30:22 +0200 Subject: [PATCH 227/285] feat(e2e): add reliable input clearing function refs #616 --- e2e/calculator.po.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index e73d117a9..f5dcd07e9 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -1,4 +1,4 @@ -import { by, element, ElementFinder, browser, protractor, ElementArrayFinder } from "protractor"; +import { by, element, ElementFinder, browser, protractor, ElementArrayFinder, Key } from "protractor"; import { scrollPageToTop, scrollToElement } from "./util.po"; export class CalculatorPage { @@ -458,4 +458,15 @@ export class CalculatorPage { getCalculatorHelpButton() { return element(by.css("#help-calc")); } + + /** + * reliable input clearing + */ + async clearInput(inp: ElementFinder) { + const txt = await inp.getAttribute('value'); + const len = txt.length; + for (let n = 0; n < len; n++) { + await inp.sendKeys(Key.BACK_SPACE); + } + } } -- GitLab From f7f20968cf0cb6ca13068ce8381b39cdfed2061a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 5 Apr 2023 14:30:58 +0200 Subject: [PATCH 228/285] test(e2e): check calculate button is disabled when a parallel structures input is empty refs #616 --- e2e/calculate-button-validation.e2e-spec.ts | 38 +++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index 512616101..f98e92093 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -138,4 +138,42 @@ describe("Calculate button - ", () => { expect(await upstream.getAttribute('class')).not.toContain("node-error"); }); }); + + async function checkCalculateButtonValidity(calcType: number) { + // open calculator + await navBar.clickNewCalculatorButton(); + await listPage.clickMenuEntryForCalcType(calcType); + await browser.sleep(200); + + // for each input, set empty and check calculate button is not active + + const inputs = calcPage.getParamInputs(); + const ninp = await inputs.count(); + for (let i = 0; i < ninp; i++) { + const inp = inputs.get(i); + // set input to fixed mode + await calcPage.setParamMode(inp, "fix"); + await browser.sleep(100); + + // clear input + await calcPage.clearInput(inp); + await browser.sleep(10); + + // check calculate button is disabled + await calcPage.checkCalcButtonEnabled(false); + await browser.sleep(100); + + // refill input + await inp.sendKeys("1"); + await browser.sleep(100); + } + } + + it("check status for various calculators", async () => { + // "parallel structures" calculator + await checkCalculateButtonValidity(8); + + // "fish ladder : cross walls" calculator + await checkCalculateButtonValidity(10); + }); }); -- GitLab From 3d5109a2f166e8ba312a09295d8b419a2c76cbf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 5 Apr 2023 10:53:41 +0200 Subject: [PATCH 229/285] refactor: remove useless StructureFieldsetContainerComponent refs #616 --- src/app/app.module.ts | 2 -- .../calculator.component.html | 8 ++++---- .../structure-fieldset-container.component.ts | 20 ------------------- 3 files changed, 4 insertions(+), 26 deletions(-) delete mode 100644 src/app/components/structure-fieldset-container/structure-fieldset-container.component.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 5c912764c..add5d9f10 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -121,7 +121,6 @@ import { ImmediateErrorStateMatcher } from "./formulaire/immediate-error-state-m import { LoadSessionURLComponent } from "./components/load-session-url/load-session-url.component"; import { DialogShowMessageComponent } from "./components/dialog-show-message/dialog-show-message.component"; import { DialogConfirmLoadSessionURLComponent } from "./components/dialog-confirm-load-session-url/dialog-confirm-load-session-url.component"; -import { StructureFieldsetContainerComponent } from "./components/structure-fieldset-container/structure-fieldset-container.component"; import { BasinFieldsetContainerComponent } from "./components/basin-fieldset-container/basin-fieldset-container.component"; import { PrebarrageService } from "./services/prebarrage.service"; import { SelectSectionDetailsComponent } from "./components/select-section-details/select-section-details.component"; @@ -225,7 +224,6 @@ const appRoutes: Routes = [ DialogConfirmLoadSessionURLComponent, FieldSetComponent, FieldsetContainerComponent, - StructureFieldsetContainerComponent, BasinFieldsetContainerComponent, FixedResultsComponent, FixedVarResultsComponent, diff --git a/src/app/components/generic-calculator/calculator.component.html b/src/app/components/generic-calculator/calculator.component.html index 40cac6c06..a332794d6 100644 --- a/src/app/components/generic-calculator/calculator.component.html +++ b/src/app/components/generic-calculator/calculator.component.html @@ -105,11 +105,11 @@ (tabPressed)="onTabPressed($event)"> </field-set> - <structure-fieldset-container *ngIf="isStructureFieldsetContainer(fe)" + <fieldset-container *ngIf="isStructureFieldsetContainer(fe)" [style.display]="getElementStyleDisplay(fe.id)" [_container]=fe (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) (tabPressed)="onTabPressed($event)"> - </structure-fieldset-container> + </fieldset-container> <basin-fieldset-container *ngIf="isBasinFieldsetContainer(fe)" [style.display]="getElementStyleDisplay(fe.id)" [_container]=fe @@ -138,12 +138,12 @@ fxFlex="1 0 auto"> </fieldset-container> - <structure-fieldset-container *ngIf="isStructureFieldsetContainer(fe)" + <fieldset-container *ngIf="isStructureFieldsetContainer(fe)" [style.display]="getElementStyleDisplay(fe.id)" [_container]=fe (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) (tabPressed)="onTabPressed($event)" fxFlex="1 0 auto"> - </structure-fieldset-container> + </fieldset-container> <pab-table *ngIf="isPabTable(fe)" [pabTable]=fe (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) diff --git a/src/app/components/structure-fieldset-container/structure-fieldset-container.component.ts b/src/app/components/structure-fieldset-container/structure-fieldset-container.component.ts deleted file mode 100644 index 34b9a3bba..000000000 --- a/src/app/components/structure-fieldset-container/structure-fieldset-container.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Component } from "@angular/core"; - -import { FieldSet } from "../../formulaire/elements/fieldset"; -import { I18nService } from "../../services/internationalisation.service"; -import { ApplicationSetupService } from "../../services/app-setup.service"; -import { FieldsetContainerComponent } from "../fieldset-container/fieldset-container.component"; - -@Component({ - selector: "structure-fieldset-container", - templateUrl: "../fieldset-container/fieldset-container.component.html", - styleUrls: [ - "../fieldset-container/fieldset-container.component.scss" - ] -}) -export class StructureFieldsetContainerComponent extends FieldsetContainerComponent { - - constructor(i18nService: I18nService, appSetupService: ApplicationSetupService) { - super(i18nService, appSetupService); - } -} -- GitLab From f96fb769e9c8953053f7c2571ecce74d99940b75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 5 Apr 2023 11:19:12 +0200 Subject: [PATCH 230/285] fix(e2e): tests on parallel structures (element finder on structure fieldset container) refs #616 --- e2e/calculator.po.ts | 4 ++-- .../generic-calculator/calculator.component.html | 8 ++++---- .../generic-calculator/calculator.component.ts | 10 ++++++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index f5dcd07e9..fa9dc5802 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -130,11 +130,11 @@ export class CalculatorPage { } getAddStructureButton() { - return element(by.css("structure-fieldset-container .hyd-window-btns button.add-structure")); + return element(by.css("fieldset-container.structure-fieldsetcontainer .hyd-window-btns button.add-structure")); } getCopyStructureButton() { - return element(by.css("structure-fieldset-container .hyd-window-btns button.copy-structure")); + return element(by.css("fieldset-container.structure-fieldsetcontainer .hyd-window-btns button.copy-structure")); } getAllLinkButtons() { diff --git a/src/app/components/generic-calculator/calculator.component.html b/src/app/components/generic-calculator/calculator.component.html index a332794d6..1a816d5c8 100644 --- a/src/app/components/generic-calculator/calculator.component.html +++ b/src/app/components/generic-calculator/calculator.component.html @@ -108,14 +108,14 @@ <fieldset-container *ngIf="isStructureFieldsetContainer(fe)" [style.display]="getElementStyleDisplay(fe.id)" [_container]=fe (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) - (tabPressed)="onTabPressed($event)"> + (tabPressed)="onTabPressed($event)" [class]="getFieldsetContainerClass(fe)"> </fieldset-container> <basin-fieldset-container *ngIf="isBasinFieldsetContainer(fe)" [style.display]="getElementStyleDisplay(fe.id)" [_container]=fe (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) (tabPressed)="onTabPressed($event)" - fxFlex="1 0 auto"> + fxFlex="1 0 auto" [class]="getFieldsetContainerClass(fe)"> </basin-fieldset-container> </ng-template> </div> @@ -135,14 +135,14 @@ [style.display]="getElementStyleDisplay(fe.id)" [_container]=fe (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) (tabPressed)="onTabPressed($event)" - fxFlex="1 0 auto"> + fxFlex="1 0 auto" [class]="getFieldsetContainerClass(fe)"> </fieldset-container> <fieldset-container *ngIf="isStructureFieldsetContainer(fe)" [style.display]="getElementStyleDisplay(fe.id)" [_container]=fe (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) (tabPressed)="onTabPressed($event)" - fxFlex="1 0 auto"> + fxFlex="1 0 auto" [class]="getFieldsetContainerClass(fe)"> </fieldset-container> <pab-table *ngIf="isPabTable(fe)" [pabTable]=fe (radio)=onRadioClick($event) diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 1ef35884a..9d5a06dff 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -232,6 +232,16 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe return false; } + public getFieldsetContainerClass(fe: any): string { + if (this.isStructureFieldsetContainer(fe)) { + return "structure-fieldsetcontainer"; + } + if (this.isBasinFieldsetContainer(fe)) { + return "basin-fieldsetcontainer"; + } + return "fieldsetcontainer"; + } + /** détermine si un FormulaireElement est du type PabTable */ public isPabTable(fe: any): boolean { return fe instanceof PabTable; -- GitLab From 7e7b9eb66342309c4daa58007e7578d914ed7909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 5 Apr 2023 13:42:33 +0200 Subject: [PATCH 231/285] fix(e2e): missing await in CalculatorPage.checkCalcButtonEnabled() refs #616 --- e2e/calculate-all-params.e2e-spec.ts | 4 ++-- e2e/calculate-button-validation.e2e-spec.ts | 12 ++++++------ e2e/calculate-linked-params.e2e-spec.ts | 2 +- e2e/calculator.po.ts | 4 ++-- e2e/solveur.e2e-spec.ts | 6 +++--- e2e/valeurs-erronees.e2e-spec.ts | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 5d0b9280a..f19c2f7d0 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -74,7 +74,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { const nbParamsCalc = await calcPage.getCheckedCalcModeButtons().count(); expect(nbParamsCalc).toBe(1); // check that "compute" button is active - const calcButton = calcPage.checkCalcButtonEnabled(true); + const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); // check that result is not empty @@ -84,7 +84,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { } else { // module has no calculable params, just click the "compute" button // check that "compute" button is active - const calcButton = calcPage.checkCalcButtonEnabled(true); + const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); // check that result is not empty diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index f98e92093..0f472f43e 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -49,21 +49,21 @@ describe("Calculate button - ", () => { await browser.sleep(200); // check that "compute" button is inactive - calcPage.checkCalcButtonEnabled(false); + await calcPage.checkCalcButtonEnabled(false); // back to PAB: chute await navBar.clickCalculatorTab(0); await browser.sleep(200); // check that "compute" button is active - calcPage.checkCalcButtonEnabled(true); + await calcPage.checkCalcButtonEnabled(true); // back to PAB: dimensions await navBar.clickCalculatorTab(1); await browser.sleep(200); // check that "compute" button is inactive - calcPage.checkCalcButtonEnabled(false); + await calcPage.checkCalcButtonEnabled(false); }); describe("check button status in prébarrages - ", () => { @@ -83,7 +83,7 @@ describe("Calculate button - ", () => { await inputQ.sendKeys("-1"); await browser.sleep(200); - calcPage.checkCalcButtonEnabled(false); + await calcPage.checkCalcButtonEnabled(false); // upstream item // look for g element with id starting by "flowchart-amont-" @@ -120,7 +120,7 @@ describe("Calculate button - ", () => { await browser.sleep(200); // calculate button disabled ? - calcPage.checkCalcButtonEnabled(false); + await calcPage.checkCalcButtonEnabled(false); // upstream item displayed in error ? expect(await upstream.getAttribute('class')).toContain("node-highlighted-error"); // upstream item is now selected by default (was 'node-error') @@ -132,7 +132,7 @@ describe("Calculate button - ", () => { await browser.sleep(200); // calculate button still disabled ? (the basin is not connected to anything) - calcPage.checkCalcButtonEnabled(false); + await calcPage.checkCalcButtonEnabled(false); // upstream item displayed not in error ? expect(await upstream.getAttribute('class')).not.toContain("node-error"); diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index e7192eca9..f87d9b168 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -45,7 +45,7 @@ describe("ngHyd − calculate with linked parameters", () => { async function computeAndCheckPresenceOfResults() { // check that "compute" button is active - const calcButton = calcPage.checkCalcButtonEnabled(true); + const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); // check that result is not empty diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index fa9dc5802..d7552190a 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -335,9 +335,9 @@ export class CalculatorPage { } // check that "compute" button is in given enabled/disabled state - checkCalcButtonEnabled(enabled: boolean) { + async checkCalcButtonEnabled(enabled: boolean) { const calcButton = this.getCalculateButton(); - expect(calcButton.isEnabled()).toBe(enabled); + expect(await calcButton.isEnabled()).toBe(enabled); return calcButton; } diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 6ca71d3c7..1b4740864 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -63,7 +63,7 @@ describe("Solveur - ", () => { expect(spV).toContain("Z2 - Cote aval (PAB : chute)"); // check that "compute" button is active - const calcButton = calcPage.checkCalcButtonEnabled(true); + const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); // check that result is not empty @@ -113,7 +113,7 @@ describe("Solveur - ", () => { await calcPage.getInputById("Ytarget").sendKeys("318"); // check that "compute" button is active - const calcButton = calcPage.checkCalcButtonEnabled(true); + const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); // check that result is not empty @@ -134,7 +134,7 @@ describe("Solveur - ", () => { expect(hasResultsClone1).toBe(false); // check that "compute" button is active - const calcButtonClone = calcPage.checkCalcButtonEnabled(true); + const calcButtonClone = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButtonClone.click(); // check that result is not empty diff --git a/e2e/valeurs-erronees.e2e-spec.ts b/e2e/valeurs-erronees.e2e-spec.ts index 8580ae57e..73f815a39 100644 --- a/e2e/valeurs-erronees.e2e-spec.ts +++ b/e2e/valeurs-erronees.e2e-spec.ts @@ -54,6 +54,6 @@ describe("ngHyd - check invalid values are removed - ", () => { expect(w).toEqual(""); // check that "compute" button is disabled - calcPage.checkCalcButtonEnabled(false); + await calcPage.checkCalcButtonEnabled(false); }); }); -- GitLab From d9eb274e87a07008393a6b361bdd072def0fe86f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 13 Apr 2023 08:59:42 +0200 Subject: [PATCH 232/285] feat(doc): add PWA installation documentation refs #617 --- docs/en/general/installation.md | 35 +++++++++++++++++++++++++++++++++ docs/en/index.md | 4 ++-- docs/fr/general/installation.md | 35 +++++++++++++++++++++++++++++++++ docs/fr/index.md | 4 ++-- mkdocs/mkdocs-en.yml | 1 + mkdocs/mkdocs-fr.yml | 1 + 6 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 docs/en/general/installation.md create mode 100644 docs/fr/general/installation.md diff --git a/docs/en/general/installation.md b/docs/en/general/installation.md new file mode 100644 index 000000000..63d05ab42 --- /dev/null +++ b/docs/en/general/installation.md @@ -0,0 +1,35 @@ +# Installation + +Cassiopée can be installed for use without an internet connection as an executable program or as a progressive web app (PWA). + +## Installation of the Cassiopée progressive web application + +A progressive web app (PWA) is a web application that consists of pages or websites, and can appear to the user in the same way as native applications or mobile applications. + +PWAs are available for all platforms (Windows, Linux, MacOS, Android, and iOS) provided you have a compatible browser: + +| Plateforme | Chrome/Chromium | Edge | Firefox | Safari | +|------------|-----------------|------|---------------|--------| +| Windows | Yes | Yes | via extension | | +| Linux | Yes | | via extension | | +| MacOS | Yes | | via extension | | +| Android | Yes | | Yes | | +| iOS | | | | Yes | + +The installation is done directly from the web browser at <https://cassiopee.g-eau.net> by clicking on a button located on the right of the address bar. The appearance of the button may vary depending on the browser used: + +* Install a PWA with Chrome/Chromium: <https://support.google.com/chrome/answer/9658361?hl=fr> +* Installing a PWA with Edge: <https://learn.microsoft.com/fr-fr/microsoft-edge/progressive-web-apps-chromium/ux> +* Install a PWA (any browser and platform): <https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Installing> + +After the installation, Cassiopée can be launched from the application icon on the desktop. + +Updates are automatically detected and installed (the user is invited to restart Cassiopée after downloading the update). + +N.B.: even without going through the PWA installation procedure, Cassiopée is available in the browser without an internet connection provided it has been previously loaded. + +## Installation of the Desktop application (obsolete) + +Cassiopée is available as an executable program for Windows, Linux and MacOS platforms. The installation programs can be downloaded at the following address: <https://cassiopee.g-eau.fr/cassiopee-releases/> + +The installation in the form of a progressive web application (see above) will definitely replace this installation mode in a future version of Cassiopée. diff --git a/docs/en/index.md b/docs/en/index.md index f8e9b1078..1fb2aeaeb 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -13,9 +13,9 @@ Cassiopée is a software dedicated to rivers hydraulics with especially some hel ## Pre-requisites - installation -Cassiopée does not require any installation. It is available online using an up-to-date browser (tested with Firefox, Chrome and Chromium) by navigating to the following address: [https://cassiopee.g-eau.fr](https://cassiopee.g-eau.fr) +Cassiopée does not require any installation. It is available online using an up-to-date browser (tested with Firefox, Edge, Chrome and Chromium) by navigating to the following address: [https://cassiopee.g-eau.fr](https://cassiopee.g-eau.fr). -Offline versions are available (Windows, Linux, macOS, Android) at the following address : [https://cassiopee.g-eau.fr/cassiopee-releases/](https://cassiopee.g-eau.fr/cassiopee-releases/) +Offline versions are available for the Windows, Linux, macOS, Android platforms. For details, see the ["Installation" section](general/installation.md) in the documentation. ## Documentation diff --git a/docs/fr/general/installation.md b/docs/fr/general/installation.md new file mode 100644 index 000000000..42d86052e --- /dev/null +++ b/docs/fr/general/installation.md @@ -0,0 +1,35 @@ +# Installation + +Cassiopée peut être installé pour une utilisation sans connexion internet sous la forme d'un programme exécutable ou d'une Web App progressive (PWA). + +## Installation de l'application web progressive Cassiopée + +Une progressive web app (PWA, application web progressive en français) est une application web qui consiste en des pages ou des sites web, et qui peuvent apparaître à l'utilisateur de la même manière que les applications natives ou les applications mobiles. + +Les PWA sont disponibles pour toutes les platesformes (Windows, Linux, MacOS, Android, et iOS) à condition d'avoir un browser compatible : + +| Plateforme | Chrome/Chromium | Edge | Firefox | Safari | +|------------|-----------------|------|---------------|--------| +| Windows | Oui | Oui | via extension | | +| Linux | Oui | | via extension | | +| MacOS | Oui | | via extension | | +| Android | Oui | | Oui | | +| iOS | | | | Oui | + +L'installation se fait directement à partir du navigateur internet à l'adresse <https://cassiopee.g-eau.net> en cliquant sur un bouton situé à droite de la barre d'adresse. L'aspect du bouton peut varier en fonction du navigateur utilisé : + +* Installer une PWA avec Chrome/Chromium : <https://support.google.com/chrome/answer/9658361?hl=fr> +* Installer une PWA avec Edge : <https://learn.microsoft.com/fr-fr/microsoft-edge/progressive-web-apps-chromium/ux> +* Installer une PWA (tout browser et plateforme - en anglais) : <https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Installing> + +Après l'installation, Cassiopée peut être lancé à partir de l'icône de l'application présente sur le bureau. + +Les mises à jour sont automatiquement détectées et installées (l'utilisateur est invité à redémarrer Cassiopée après le téléchargement de la mise à jour). + +N.B.: même sans passer par la procédure d'installation de la PWA, Cassiopée est disponible dans le navigateur sans connection internet à condition d'avoir été chargé précédemment. + +## Installation de l'application Desktop (obsolète) + +Cassiopée est disponible sous la forme d'un programme exécutable pour les plateformes Windows, Linux et MacOS. Les programmes d'installation sont téléchargeables à l'adresse suivante : <https://cassiopee.g-eau.fr/cassiopee-releases/> + +L'installation sous la forme d'une application web progressive (cf. ci-dessus) remplacera définitivement ce mode d'installation dans une prochaine version de Cassiopée. diff --git a/docs/fr/index.md b/docs/fr/index.md index c7d0948eb..a2718ab7d 100644 --- a/docs/fr/index.md +++ b/docs/fr/index.md @@ -13,9 +13,9 @@ Cassiopée est un logiciel consacré à l'hydraulique des rivières avec notamme ## Pré-requis - installation -Cassiopée ne nécessite aucune installation. Il est disponible en ligne à partir d'un navigateur récent (testé sous Firefox, Chrome et Chromium) en se rendant à l'adresse suivante : [https://cassiopee.g-eau.fr](https://cassiopee.g-eau.fr) +Cassiopée ne nécessite aucune installation. Il est disponible en ligne à partir d'un navigateur récent (testé sous Firefox, Edge, Chrome et Chromium) en se rendant à l'adresse suivante : [https://cassiopee.g-eau.fr](https://cassiopee.g-eau.fr). -Des versions hors-ligne sont disponibles (Windows, Linux, macOS, Android) à l'adresse suivante : [https://cassiopee.g-eau.fr/cassiopee-releases/](https://cassiopee.g-eau.fr/cassiopee-releases/) +Des versions hors-ligne sont installables sur les plateformes Windows, Linux, macOS, Android. Voir le détail dans la [section installation](general/installation.md) de la documentation. ## Documentation diff --git a/mkdocs/mkdocs-en.yml b/mkdocs/mkdocs-en.yml index 88ae9eff9..1e1f282b8 100644 --- a/mkdocs/mkdocs-en.yml +++ b/mkdocs/mkdocs-en.yml @@ -25,6 +25,7 @@ markdown_extensions: nav: - Presentation of Cassiopée: - index.md + - general/installation.md - general/principe_fonctionnement.md - general/parametres_application.md - general/raccourcis_clavier.md diff --git a/mkdocs/mkdocs-fr.yml b/mkdocs/mkdocs-fr.yml index 4c31e2e74..8f3d38653 100644 --- a/mkdocs/mkdocs-fr.yml +++ b/mkdocs/mkdocs-fr.yml @@ -25,6 +25,7 @@ markdown_extensions: nav: - Présentation de Cassiopée: - index.md + - general/installation.md - general/principe_fonctionnement.md - general/parametres_application.md - general/raccourcis_clavier.md -- GitLab From 8dc95b3255768823b0c67dd8ba64def49e2889bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 12 Apr 2023 10:59:16 +0200 Subject: [PATCH 233/285] test(e2e): remove Protractor NPM package refs #618 --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index b7cf7d4e8..14c4442a9 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,6 @@ "fs-extra": "^10.1.0", "jasmine-core": "~4.2.0", "jasmine-spec-reporter": "~7.0.0", - "protractor": "~7.0.0", "ts-node": "^10.8.2", "typescript": "~4.7.4", "webpack-dev-server": "^4.9.3" -- GitLab From 415416412e0e0cf997cdcb242cee3c31adff6bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 13 Apr 2023 15:36:42 +0200 Subject: [PATCH 234/285] test(e2e): execution of npm init wdio refs #618 --- package-lock.json | 7595 +++++++++++++++++++++++++++++-- package.json | 10 +- test/pageobjects/login.page.ts | 42 + test/pageobjects/page.ts | 13 + test/pageobjects/secure.page.ts | 17 + test/specs/example.e2e.ts | 15 + wdio.conf.ts | 312 ++ 7 files changed, 7511 insertions(+), 493 deletions(-) create mode 100644 test/pageobjects/login.page.ts create mode 100644 test/pageobjects/page.ts create mode 100644 test/pageobjects/secure.page.ts create mode 100644 test/specs/example.e2e.ts create mode 100644 wdio.conf.ts diff --git a/package-lock.json b/package-lock.json index 38115b303..cfb1cdd76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,6 +65,11 @@ "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/eslint-plugin-tslint": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", + "@wdio/cli": "^8.8.2", + "@wdio/jasmine-framework": "^8.8.2", + "@wdio/local-runner": "^8.8.2", + "@wdio/spec-reporter": "^8.8.0", + "chromedriver": "^111.0.0", "codelyzer": "^6.0.2", "electron": "^19.0.7", "electron-builder": "^23.1.0", @@ -73,9 +78,10 @@ "fs-extra": "^10.1.0", "jasmine-core": "~4.2.0", "jasmine-spec-reporter": "~7.0.0", - "protractor": "~7.0.0", "ts-node": "^10.8.2", "typescript": "~4.7.4", + "wdio-chromedriver-service": "^8.1.1", + "wdio-wait-for": "^3.0.3", "webpack-dev-server": "^4.9.3" } }, @@ -3605,6 +3611,117 @@ "node": ">=8" } }, + "node_modules/@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/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/@jest/types/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/@jest/types/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/@jest/types/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/@jest/types/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/@jest/types/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/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -3883,6 +4000,103 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@puppeteer/browsers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.0.tgz", + "integrity": "sha512-3iB5pWn9Sr55PKKwqFWSWjLsTKCOEhKNI+uV3BZesgXuA3IhsX8I3hW0HI+3ksMIPkh2mVYzKSpvgq3oicjG2Q==", + "dev": true, + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@puppeteer/browsers/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/@puppeteer/browsers/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "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.1.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@schematics/angular": { "version": "14.2.9", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.9.tgz", @@ -3899,6 +4113,12 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "dev": true + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -3920,6 +4140,12 @@ "node": ">=6" } }, + "node_modules/@testim/chrome-version": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.3.tgz", + "integrity": "sha512-g697J3WxV/Zytemz8aTuKjTGYtta9+02kva3C1xc7KXB8GdbfE1akGJIsZLyY/FSh2QrnE+fiB7vmWU3XNcb6A==", + "dev": true + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -4105,6 +4331,12 @@ "@types/node": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "node_modules/@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", @@ -4113,6 +4345,30 @@ "@types/node": "*" } }, + "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/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, "node_modules/@types/jasmine": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", @@ -4177,6 +4433,12 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, "node_modules/@types/pako": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.4.tgz", @@ -4202,7 +4464,8 @@ "version": "0.0.32", "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", "integrity": "sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/@types/qs": { "version": "6.9.7", @@ -4223,7 +4486,8 @@ "version": "3.0.20", "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.20.tgz", "integrity": "sha512-6d8Q5fqS9DWOXEhMDiF6/2FjyHdmP/jSTAUyeQR7QwrFeNmYyzmvGxD5aLIHL445HjWgibs0eAig+KPnbaesXA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/@types/semver": { "version": "7.3.13", @@ -4261,6 +4525,12 @@ "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-hkgzYF+qnIl8uTO8rmUSVSfQ8BIfMXC4yJAF4n8BE758YsKBZvFC4NumnAegj7KmylP0liEZNpb9RRGFMbFejA==" }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, "node_modules/@types/verror": { "version": "1.10.6", "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", @@ -4268,6 +4538,12 @@ "dev": true, "optional": true }, + "node_modules/@types/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", + "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -4291,6 +4567,16 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.43.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", @@ -4496,6 +4782,732 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@wdio/cli": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.8.2.tgz", + "integrity": "sha512-cw0XFom5E/zBFQcBmDk4ki2prPkw/aH6+gD2TBhno7DHlGw8u7X3WazKZYzB7FtCkcmsqp3lDQ5FggnjOa78vQ==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/protocols": "8.8.1", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "async-exit-hook": "^2.0.1", + "chalk": "^5.0.1", + "chokidar": "^3.5.3", + "cli-spinners": "^2.6.1", + "ejs": "^3.1.8", + "execa": "^7.0.0", + "import-meta-resolve": "^2.1.0", + "inquirer": "9.1.5", + "lodash.flattendeep": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.union": "^4.6.0", + "read-pkg-up": "9.1.0", + "recursive-readdir": "^2.2.2", + "webdriverio": "8.8.2", + "yargs": "^17.5.1", + "yarn-install": "^1.0.0" + }, + "bin": { + "wdio": "bin/wdio.js" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/cli/node_modules/ansi-escapes": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.1.0.tgz", + "integrity": "sha512-bQyg9bzRntwR/8b89DOEhGwctcwCrbWW/TuqTQnpqpy5Fz3aovcOTj5i8NJV6AHc8OGNdMaqdxAWww8pz2kiKg==", + "dev": true, + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@wdio/cli/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@wdio/cli/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@wdio/cli/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/cli-width": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz", + "integrity": "sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@wdio/cli/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@wdio/cli/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@wdio/cli/node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@wdio/cli/node_modules/inquirer": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.1.5.tgz", + "integrity": "sha512-3ygAIh8gcZavV9bj6MTdYddG2zPSYswP808fKS46NOwlF0zZljVpnLCHODDqItWJDbDpLb3aouAxGaJbkxoppA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^6.0.0", + "chalk": "^5.2.0", + "cli-cursor": "^4.0.0", + "cli-width": "^4.0.0", + "external-editor": "^3.0.3", + "figures": "^5.0.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^6.1.2", + "run-async": "^2.4.0", + "rxjs": "^7.8.0", + "string-width": "^5.1.2", + "strip-ansi": "^7.0.1", + "through": "^2.3.6", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@wdio/cli/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@wdio/cli/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/ora": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz", + "integrity": "sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/restore-cursor/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/@wdio/cli/node_modules/restore-cursor/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/@wdio/cli/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@wdio/cli/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/type-fest": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.8.0.tgz", + "integrity": "sha512-FVNSzGQz9Th+/9R6Lvv7WIAkstylfHN2/JYxkyhhmKFYh9At2DST8t6L6Lref9eYO8PXFTfG9Sg1Agg0K3vq3Q==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@wdio/config": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", + "integrity": "sha512-gm8gXqpiIR0EU9Blkqmxe+xsEoKS2EXpWrKlx2JXyx3Yf7By0UNsZVZHMSO8lLunzUjYIntpWYpmKmBmnlrnKQ==", + "dev": true, + "dependencies": { + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "decamelize": "^6.0.0", + "deepmerge-ts": "^5.0.0", + "glob": "^9.3.0", + "import-meta-resolve": "^2.1.0", + "read-pkg-up": "^9.1.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/config/node_modules/decamelize": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/config/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@wdio/config/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@wdio/config/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wdio/globals": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.8.2.tgz", + "integrity": "sha512-uwImTbqbFlHezAl4qtdXMZtZQo22bhENmt6eQ0pJwevtO1U53ZB4x9uDOYtSym8xKCdZILu46uI/THDm+vm2hA==", + "dev": true, + "engines": { + "node": "^16.13 || >=18" + }, + "optionalDependencies": { + "expect-webdriverio": "^4.0.1", + "webdriverio": "8.8.2" + } + }, + "node_modules/@wdio/jasmine-framework": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/jasmine-framework/-/jasmine-framework-8.8.2.tgz", + "integrity": "sha512-lFp+WDvDvfYABMwyufhAd3AMJoUii5LCOJmNNmoUsJ0YvP327KRNKfOU7Xdh7HQZfe49whRzfytE5hTexeIFlQ==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "expect-webdriverio": "^4.0.1", + "jasmine": "^4.2.1" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/local-runner": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.8.2.tgz", + "integrity": "sha512-7zf7FxjRXqqvrtyzFhWsSXlqw8ldTt/3E6SBvwrn4iS/kL3QzyiVMtZ/ILHfLnIZXvUc5CWNpNJ1WWejYmbNWA==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/logger": "8.6.6", + "@wdio/repl": "8.6.6", + "@wdio/runner": "8.8.2", + "@wdio/types": "8.8.0", + "async-exit-hook": "^2.0.1", + "split2": "^4.1.0", + "stream-buffers": "^3.0.2" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/logger": { + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", + "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "dev": true, + "dependencies": { + "chalk": "^5.1.2", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/logger/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@wdio/protocols": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.8.1.tgz", + "integrity": "sha512-nDaycUcm/ATLxcjim0fJyRiezXyyj4ZCq+Xf0S2Cubc0k7+DceFBt7KIMsernNVh2pelzFHEEwxh4DLaqQ71Wg==", + "dev": true + }, + "node_modules/@wdio/repl": { + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.6.6.tgz", + "integrity": "sha512-vyJzqHJ5yOmfVyk5WWo6pRsJ2xhgWl3DVIBdDNR0wKrtFcm/g1jnB+pNf6Eb7NhCDh3oGul25bmhAwWDoxcFYA==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/reporter": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.8.0.tgz", + "integrity": "sha512-qbbLj5ZqtrHOs2sN/wHen+agIUA1EHB48HRyb17wQapZItmIE16D8ctxAISx7yQ6RpjZYPp+zYhUJ20DFpJhGg==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "diff": "^5.0.0", + "object-inspect": "^1.12.0", + "supports-color": "9.3.1" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/reporter/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@wdio/reporter/node_modules/supports-color": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.3.1.tgz", + "integrity": "sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@wdio/runner": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.8.2.tgz", + "integrity": "sha512-k7gkfhZesnN2dJMzEg+oRQA3a9pEWJSRm7AlidmvQnQkcSC3JzvTtCCqoLaBTxScktOCOUahQ9H+Lf8z/P5Cag==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "deepmerge-ts": "^5.0.0", + "expect-webdriverio": "^4.0.1", + "gaze": "^1.1.2", + "webdriver": "8.8.2", + "webdriverio": "8.8.2" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/spec-reporter": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.8.0.tgz", + "integrity": "sha512-ZbW0w8ugXIZ7niYCY9rWWm1oxcrH/ceyQl6nBldARvB0IOroleS5hNtp+dd97Y+OxHv/2AD6MQ4yCmS+ukLEgg==", + "dev": true, + "dependencies": { + "@wdio/reporter": "8.8.0", + "@wdio/types": "8.8.0", + "chalk": "^5.1.2", + "easy-table": "^1.2.0", + "pretty-ms": "^7.0.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/spec-reporter/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@wdio/types": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.8.0.tgz", + "integrity": "sha512-Ai6yIlwWB32FUfvQKCqSa6nSyHIhSF5BOU9OfE7I2XYkLAJTxu8B6NORHQ+rgoppHSWc4D2V9r21y3etF8AGnQ==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/utils": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", + "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "dev": true, + "dependencies": { + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "import-meta-resolve": "^2.2.0", + "p-iteration": "^1.1.8" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -4769,7 +5781,8 @@ "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.3.0" } @@ -5086,6 +6099,107 @@ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, + "node_modules/archiver": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/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/archiver-utils/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/archiver-utils/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/archiver/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/archiver/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", @@ -5191,7 +6305,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5218,7 +6333,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5300,7 +6416,8 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "safer-buffer": "~2.1.0" } @@ -5309,7 +6426,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "devOptional": true, + "optional": true, "engines": { "node": ">=0.8" } @@ -5427,11 +6544,24 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": "*" } @@ -5440,7 +6570,19 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "devOptional": true + "optional": true, + "peer": true + }, + "node_modules/axios": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", + "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } }, "node_modules/axobject-query": { "version": "2.0.2", @@ -5590,7 +6732,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "tweetnacl": "^0.14.3" } @@ -5644,7 +6787,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "minimist": "^1.2.0" }, @@ -5853,7 +6997,8 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "https-proxy-agent": "^2.2.1" } @@ -5862,7 +7007,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "es6-promisify": "^5.0.0" }, @@ -5874,7 +7020,8 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -5883,7 +7030,8 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -6104,6 +7252,181 @@ "node": ">= 0.8" } }, + "node_modules/cac": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", + "integrity": "sha512-hq4rxE3NT5PlaEiVV39Z45d6MoFcQZG5dsgJqtAUeOz3408LEQAElToDkf9i5IYSCOmK0If/81dLg7nKxqPR0w==", + "dev": true, + "dependencies": { + "camelcase-keys": "^3.0.0", + "chalk": "^1.1.3", + "indent-string": "^3.0.0", + "minimist": "^1.2.0", + "read-pkg-up": "^1.0.1", + "suffix": "^0.1.0", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cac/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/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/cac/node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cac/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/cac/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/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/cac/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/cacache": { "version": "16.1.2", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", @@ -6132,6 +7455,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "dev": true, + "engines": { + "node": ">=14.16" + } + }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -6211,6 +7543,28 @@ "node": ">=6" } }, + "node_modules/camelcase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", + "integrity": "sha512-U4E6A6aFyYnNW+tDt5/yIUKQURKXe3WMFPfX4FxrQFcwZ/R08AUk1xWcUtlr7oq6CV07Ji+aa69V2g7BSpblnQ==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001431", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", @@ -6230,7 +7584,8 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/cfb": { "version": "1.2.2", @@ -6363,6 +7718,36 @@ "node": ">=10" } }, + "node_modules/chrome-launcher": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", + "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -6371,6 +7756,75 @@ "node": ">=6.0" } }, + "node_modules/chromedriver": { + "version": "111.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-111.0.0.tgz", + "integrity": "sha512-XavNYNBBfKIrT8Oi/ywJ0DoOOU+jHF5bQWTkqStFsAXvfCV9VzYN3J+TGAvZdrpXeoixqPRGUxQ2yZhD2iowdQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@testim/chrome-version": "^1.1.3", + "axios": "^1.2.1", + "compare-versions": "^5.0.1", + "extract-zip": "^2.0.1", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^1.1.0", + "tcp-port-used": "^1.0.1" + }, + "bin": { + "chromedriver": "bin/chromedriver" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/chromedriver/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/chromedriver/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chromium-bidi": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", + "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", + "dev": true, + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "node_modules/chromium-pickle-js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", @@ -6681,6 +8135,41 @@ "node": ">=0.10.0" } }, + "node_modules/compare-versions": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", + "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", + "dev": true + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/compress-commons/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -7036,6 +8525,33 @@ "node": ">=0.8" } }, + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/crc32-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -7195,6 +8711,15 @@ "node": ">=8" } }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -7313,6 +8838,18 @@ "fastparse": "^1.1.2" } }, + "node_modules/css-shorthand-properties": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", + "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", + "dev": true + }, + "node_modules/css-value": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", + "dev": true + }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -8068,7 +9605,8 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0" }, @@ -8105,7 +9643,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -8145,6 +9684,15 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge-ts": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", + "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", + "dev": true, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -8201,7 +9749,8 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "globby": "^5.0.0", "is-path-cwd": "^1.0.0", @@ -8219,7 +9768,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "array-uniq": "^1.0.1" }, @@ -8231,7 +9781,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8241,7 +9792,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8261,7 +9813,8 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "array-union": "^1.0.1", "arrify": "^1.0.0", @@ -8278,7 +9831,8 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8286,20 +9840,12 @@ "node": "*" } }, - "node_modules/del/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/del/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -8365,6 +9911,61 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, + "node_modules/devtools": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.8.2.tgz", + "integrity": "sha512-iD/Xr5rMjx+VD08akiAuiMR5EhWKj9i489rcDm2vdC9iB8u8HY51s9FbmnIrN5OstYma0x2qOF2zKxM/muJTtw==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/logger": "8.6.6", + "@wdio/protocols": "8.8.1", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "chrome-launcher": "^0.15.0", + "edge-paths": "^3.0.5", + "import-meta-resolve": "^2.1.0", + "puppeteer-core": "19.8.5", + "query-selector-shadow-dom": "^1.0.0", + "ua-parser-js": "^1.0.1", + "uuid": "^9.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1124027", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1124027.tgz", + "integrity": "sha512-OT2sdgQn4llM9/tVcCvoty733KFFIlXVvESceJsfazhmg/dF7C5e3Z8cIN8jNwIikixuE5rufGtD1cvKHXfOcQ==", + "dev": true + }, + "node_modules/devtools/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/devtools/node_modules/which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/dfa": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", @@ -8380,6 +9981,15 @@ "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-compare": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", @@ -8675,16 +10285,51 @@ "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "optionalDependencies": { + "wcwidth": "^1.0.1" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, + "node_modules/edge-paths": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", + "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", + "dev": true, + "dependencies": { + "@types/which": "^2.0.1", + "which": "^2.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/shirshak55" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -9107,6 +10752,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -9189,13 +10860,15 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/es6-promisify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "es6-promise": "^4.0.3" } @@ -10406,11 +12079,45 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">= 0.8.0" } }, + "node_modules/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect-webdriverio": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.1.3.tgz", + "integrity": "sha512-tn7kMH/WVrVwwzPaCXMuFYiGXx15LwpxwkJkC/WmF6xptcqW7kaEZco7sxHjtEXpKV7QVGsfY1Z0PcwW4gj5OA==", + "dev": true, + "dependencies": { + "expect": "^29.4.0", + "jest-matcher-utils": "^29.4.0" + }, + "engines": { + "node": ">=16 || >=18 || >=20" + }, + "optionalDependencies": { + "@wdio/globals": "^8.2.4", + "webdriverio": "^8.2.4" + } + }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -10520,7 +12227,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/external-editor": { "version": "3.1.0", @@ -10880,11 +12588,21 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": "*" } @@ -10903,6 +12621,15 @@ "node": ">= 6" } }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "dev": true, + "engines": { + "node": ">= 14.17" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -10945,6 +12672,12 @@ "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", "dev": true }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -11079,9 +12812,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -11130,7 +12863,8 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0" } @@ -11311,6 +13045,18 @@ "delegate": "^3.1.2" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -11426,7 +13172,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=4" } @@ -11436,7 +13183,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -11449,7 +13197,8 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11465,7 +13214,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/has": { "version": "1.0.3", @@ -11683,9 +13433,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "node_modules/http-deceiver": { @@ -11868,7 +13618,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -11879,6 +13630,19 @@ "npm": ">=1.3.7" } }, + "node_modules/http2-wrapper": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", + "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -12025,7 +13789,8 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/immutable": { "version": "4.1.0", @@ -12055,6 +13820,16 @@ "node": ">=4" } }, + "node_modules/import-meta-resolve": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", + "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -12195,12 +13970,12 @@ "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==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -12222,6 +13997,15 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -12246,6 +14030,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -12395,6 +14193,15 @@ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -12434,7 +14241,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -12443,7 +14251,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "is-path-inside": "^1.0.0" }, @@ -12455,7 +14264,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "path-is-inside": "^1.0.1" }, @@ -12518,6 +14328,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "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", @@ -12571,11 +14390,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -12588,6 +14427,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "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", @@ -12600,6 +14460,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", @@ -12616,6 +14489,20 @@ "node": ">=8" } }, + "node_modules/is2": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" + }, + "engines": { + "node": ">=v0.10.0" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -12642,7 +14529,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -12949,11 +14837,368 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">= 6.9.x" } }, + "node_modules/jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/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/jest-diff/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/jest-diff/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/jest-diff/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/jest-diff/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/jest-diff/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/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/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/jest-matcher-utils/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/jest-matcher-utils/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/jest-matcher-utils/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/jest-matcher-utils/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/jest-matcher-utils/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/jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/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/jest-message-util/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/jest-message-util/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/jest-message-util/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/jest-message-util/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/jest-message-util/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/jest-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/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/jest-util/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/jest-util/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/jest-util/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/jest-util/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/jest-util/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/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -13016,7 +15261,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/jsdoc-type-pratt-parser": { "version": "3.1.0", @@ -13053,7 +15299,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -13070,7 +15317,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "devOptional": true + "optional": true }, "node_modules/json5": { "version": "2.2.1", @@ -13113,7 +15360,8 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -13128,25 +15376,28 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/jsprim/node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "devOptional": true, "engines": [ "node >=0.6.0" - ] + ], + "optional": true, + "peer": true }, "node_modules/jsprim/node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "devOptional": true, "engines": [ "node >=0.6.0" ], + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -13157,7 +15408,8 @@ "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -13169,7 +15421,8 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/karma-source-map-support": { "version": "1.4.0", @@ -13232,12 +15485,36 @@ "node": ">= 8" } }, + "node_modules/ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, "node_modules/lazy-val": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "dev": true }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, "node_modules/less": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", @@ -13367,16 +15644,70 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "immediate": "~3.0.5" } }, + "node_modules/lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -13414,17 +15745,71 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==", + "dev": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true + }, + "node_modules/lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", + "dev": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -13624,6 +16009,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/map-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", @@ -13641,6 +16035,12 @@ "node": ">= 12" } }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true + }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -13811,6 +16211,18 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -13975,6 +16387,12 @@ "node": ">= 8" } }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -13986,6 +16404,12 @@ "node": ">=10" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "node_modules/moment-mini": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", @@ -14219,6 +16643,26 @@ "dev": true, "optional": true }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -14329,6 +16773,21 @@ "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -14566,7 +17025,8 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": "*" } @@ -14871,6 +17331,15 @@ "node": ">=6" } }, + "node_modules/p-iteration": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", + "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -15057,6 +17526,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -15157,7 +17635,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/path-key": { "version": "3.1.1", @@ -15172,6 +17651,40 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.4.tgz", + "integrity": "sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==", + "dev": true, + "dependencies": { + "lru-cache": "^9.0.0", + "minipass": "^5.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz", + "integrity": "sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -15237,7 +17750,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -15255,6 +17769,14 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -16012,6 +18534,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/primeicons": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", @@ -16095,7 +18658,8 @@ "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", "deprecated": "We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "@types/q": "^0.0.32", "@types/selenium-webdriver": "^3.0.0", @@ -16125,7 +18689,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -16134,7 +18699,8 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -16143,7 +18709,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16153,7 +18720,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -16169,7 +18737,8 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -16180,7 +18749,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=8" } @@ -16189,7 +18759,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -16201,7 +18772,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16213,13 +18785,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/protractor/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16239,7 +18813,8 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", "integrity": "sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "exit": "^0.1.2", "glob": "^7.0.6", @@ -16253,13 +18828,15 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/protractor/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16271,7 +18848,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -16281,7 +18859,8 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -16290,7 +18869,8 @@ "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "source-map": "^0.5.6" } @@ -16299,7 +18879,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-regex": "^2.0.0" }, @@ -16311,7 +18892,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.8.0" } @@ -16320,7 +18902,8 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -16334,7 +18917,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=8" } @@ -16343,7 +18927,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -16358,7 +18943,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -16370,13 +18956,15 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/protractor/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -16398,7 +18986,8 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -16419,6 +19008,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/proxy-middleware": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", @@ -16434,11 +19029,18 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "optional": true }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/pump": { "version": "3.0.0", @@ -16458,11 +19060,83 @@ "node": ">=6" } }, + "node_modules/puppeteer-core": { + "version": "19.8.5", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.8.5.tgz", + "integrity": "sha512-zoGhim/oBQbkND6h4Xz4X7l5DkWVH9wH7z0mVty5qa/c0P1Yad47t/npVtt2xS10BiQwzztWKx7Pa2nJ5yykdw==", + "dev": true, + "dependencies": { + "@puppeteer/browsers": "0.4.0", + "chromium-bidi": "0.4.6", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/puppeteer-core/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -16482,6 +19156,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-selector-shadow-dom": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", + "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -16501,6 +19181,18 @@ } ] }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/quote-stream": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", @@ -16573,6 +19265,12 @@ "node": ">=0.10.0" } }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -16581,14 +19279,6 @@ "pify": "^2.3.0" } }, - "node_modules/read-cache/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/read-config-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", @@ -16636,6 +19326,147 @@ "node": ">=10" } }, + "node_modules/read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -16650,6 +19481,15 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -16661,6 +19501,40 @@ "node": ">=8.10.0" } }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/recursive-readdir/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/recursive-readdir/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/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -16903,7 +19777,8 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -16934,7 +19809,8 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -16948,7 +19824,8 @@ "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.6" } @@ -16957,7 +19834,8 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -16971,7 +19849,8 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "devOptional": true, + "optional": true, + "peer": true, "bin": { "uuid": "bin/uuid" } @@ -16996,7 +19875,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/requirejs": { "version": "2.3.6", @@ -17032,6 +19912,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -17085,6 +19971,21 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/resq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", + "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^2.0.1" + } + }, + "node_modules/resq/node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", + "dev": true + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -17115,6 +20016,12 @@ "node": ">=0.10.0" } }, + "node_modules/rgb2hex": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", + "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", + "dev": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -17232,9 +20139,9 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "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==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dependencies": { "tslib": "^2.1.0" } @@ -17329,7 +20236,8 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "https-proxy-agent": "^2.2.1" }, @@ -17341,7 +20249,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "es6-promisify": "^5.0.0" }, @@ -17353,7 +20262,8 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -17362,7 +20272,8 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -17466,7 +20377,8 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "jszip": "^3.1.3", "rimraf": "^2.5.4", @@ -17481,7 +20393,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17491,7 +20404,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -17511,7 +20425,8 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17523,7 +20438,8 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -17535,7 +20451,8 @@ "version": "0.0.30", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "os-tmpdir": "~1.0.1" }, @@ -17787,7 +20704,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -18131,6 +21049,15 @@ "node": "*" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -18152,7 +21079,8 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -18184,6 +21112,27 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/stat-mode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", @@ -18407,6 +21356,91 @@ "node": ">= 0.8" } }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stdin-discarder/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/stdin-discarder/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/stdin-discarder/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", @@ -18477,6 +21511,18 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -18583,6 +21629,15 @@ "node": "*" } }, + "node_modules/suffix": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", + "integrity": "sha512-j5uf6MJtMCfC4vBe5LFktSe4bGyNTBk7I2Kdri0jeLrcv5B9pWfxVa5JQpoxgtR8vaVB7bVxsWgnfQbX5wkhAA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -18655,6 +21710,81 @@ "node": ">=10" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "dev": true, + "dependencies": { + "debug": "4.3.1", + "is2": "^2.0.6" + } + }, + "node_modules/tcp-port-used/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -18919,6 +22049,12 @@ "node": ">=0.6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "node_modules/traverse": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", @@ -19213,7 +22349,8 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -19225,7 +22362,8 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/type": { "version": "1.2.0", @@ -19312,6 +22450,25 @@ "node": ">=4.2.0" } }, + "node_modules/ua-parser-js": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -19340,6 +22497,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -19624,6 +22791,60 @@ "defaults": "^1.0.3" } }, + "node_modules/wdio-chromedriver-service": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/wdio-chromedriver-service/-/wdio-chromedriver-service-8.1.1.tgz", + "integrity": "sha512-pN3GiOkTIMnalfq4PJAHdX95pDp1orHnTY8W1fIbd6ok81ba97UjerTgS7lUDRUh1p0MAm35Ww0uc0/9wzB7SA==", + "dev": true, + "dependencies": { + "@wdio/logger": "^8.1.0", + "fs-extra": "^11.1.0", + "split2": "^4.1.0", + "tcp-port-used": "^1.0.2" + }, + "engines": { + "node": "^16.13 || >=18" + }, + "peerDependencies": { + "@wdio/types": "^7.0.0 || ^8.0.0-alpha.219", + "chromedriver": "*", + "webdriverio": "^7.0.0 || ^8.0.0-alpha.219" + }, + "peerDependenciesMeta": { + "@wdio/types": { + "optional": true + }, + "chromedriver": { + "optional": true + }, + "webdriverio": { + "optional": false + } + } + }, + "node_modules/wdio-chromedriver-service/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/wdio-wait-for": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/wdio-wait-for/-/wdio-wait-for-3.0.3.tgz", + "integrity": "sha512-y/n7tpExl54SOwbk27Ngz9ch4qP+250OhL6yYrxB5GLL5jZWcechTBbSJwOZNTUT6jZomoPFT9t77NFpqdJsig==", + "dev": true, + "engines": { + "node": "^16.13 || >=18" + } + }, "node_modules/web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -19633,11 +22854,34 @@ "node": ">= 8" } }, + "node_modules/webdriver": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.8.2.tgz", + "integrity": "sha512-ug+7n0JgRTLG5pGyD53VKValSLFcr0oll1QelH1Gueh/umt3Ipu+SDV+v+lyCZY6CKasCsv80W8oZfpLBj1ClQ==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@types/ws": "^8.5.3", + "@wdio/config": "8.8.0", + "@wdio/logger": "8.6.6", + "@wdio/protocols": "8.8.1", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "deepmerge-ts": "^5.0.0", + "got": "^12.1.0", + "ky": "^0.33.0", + "ws": "^8.8.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, "node_modules/webdriver-js-extender": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "@types/selenium-webdriver": "^3.0.0", "selenium-webdriver": "^3.0.1" @@ -19650,7 +22894,8 @@ "version": "12.1.8", "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.8.tgz", "integrity": "sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "adm-zip": "^0.4.9", "chalk": "^1.1.1", @@ -19675,7 +22920,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -19684,7 +22930,8 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -19693,7 +22940,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -19703,7 +22951,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -19719,7 +22968,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -19739,13 +22989,15 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/webdriver-manager/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -19757,7 +23009,8 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -19769,7 +23022,8 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "devOptional": true, + "optional": true, + "peer": true, "bin": { "semver": "bin/semver" } @@ -19778,7 +23032,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-regex": "^2.0.0" }, @@ -19790,11 +23045,329 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.8.0" } }, + "node_modules/webdriver/node_modules/@sindresorhus/is": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", + "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/webdriver/node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/webdriver/node_modules/cacheable-request": { + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.9.tgz", + "integrity": "sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "^4.0.1", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.2", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/webdriver/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriver/node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriver/node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/webdriver/node_modules/got": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", + "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/webdriver/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/webdriver/node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/webdriver/node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriver/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriver/node_modules/normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriver/node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/webdriver/node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dev": true, + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriverio": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.8.2.tgz", + "integrity": "sha512-H3h+sHLg9hfQCPLvpd30hi/ZW4lLy73m4zrZ5kJyuuUf38SZFLcfXD3W1RGig88RQ/75Ui164ugwHasTMiQEgw==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/logger": "8.6.6", + "@wdio/protocols": "8.8.1", + "@wdio/repl": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "archiver": "^5.0.0", + "aria-query": "^5.0.0", + "css-shorthand-properties": "^1.1.1", + "css-value": "^0.0.1", + "devtools": "8.8.2", + "devtools-protocol": "^0.0.1124027", + "grapheme-splitter": "^1.0.2", + "import-meta-resolve": "^2.1.0", + "is-plain-obj": "^4.1.0", + "lodash.clonedeep": "^4.5.0", + "lodash.zip": "^4.2.0", + "minimatch": "^9.0.0", + "puppeteer-core": "19.8.5", + "query-selector-shadow-dom": "^1.0.0", + "resq": "^1.9.1", + "rgb2hex": "0.2.5", + "serialize-error": "^8.0.0", + "webdriver": "8.8.2" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/webdriverio/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/webdriverio/node_modules/deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/webdriverio/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriverio/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/webdriverio/node_modules/minimatch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webdriverio/node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriverio/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, "node_modules/webpack": { "version": "5.75.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", @@ -20083,6 +23656,16 @@ "node": ">=12" } }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -20113,11 +23696,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "devOptional": true + "optional": true, + "peer": true + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/wide-align": { "version": "1.1.5", @@ -20278,15 +23897,15 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -20321,7 +23940,8 @@ "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -20334,7 +23954,8 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=4.0" } @@ -20412,6 +24033,117 @@ "node": ">=12" } }, + "node_modules/yarn-install": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yarn-install/-/yarn-install-1.0.0.tgz", + "integrity": "sha512-VO1u181msinhPcGvQTVMnHVOae8zjX/NSksR17e6eXHRveDvHCF5mGjh9hkN8mzyfnCqcBe42LdTs7bScuTaeg==", + "dev": true, + "dependencies": { + "cac": "^3.0.3", + "chalk": "^1.1.3", + "cross-spawn": "^4.0.2" + }, + "bin": { + "yarn-install": "bin/yarn-install.js", + "yarn-remove": "bin/yarn-remove.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yarn-install/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "node_modules/yarn-install/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/yarn-install/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/yarn-install/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/yarn-install/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -20443,6 +24175,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/zone.js": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", @@ -22843,6 +26603,89 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, + "@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" + } + }, + "@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.25.16" + } + }, + "@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.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" + } + }, + "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" + } + }, + "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": "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" + } + } + } + }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -23047,6 +26890,71 @@ "which": "^2.0.2" } }, + "@puppeteer/browsers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.0.tgz", + "integrity": "sha512-3iB5pWn9Sr55PKKwqFWSWjLsTKCOEhKNI+uV3BZesgXuA3IhsX8I3hW0HI+3ksMIPkh2mVYzKSpvgq3oicjG2Q==", + "dev": true, + "requires": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "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.1.1" + } + } + } + }, "@schematics/angular": { "version": "14.2.9", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.9.tgz", @@ -23058,6 +26966,12 @@ "jsonc-parser": "3.1.0" } }, + "@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "dev": true + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -23073,6 +26987,12 @@ "defer-to-connect": "^1.0.1" } }, + "@testim/chrome-version": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.3.tgz", + "integrity": "sha512-g697J3WxV/Zytemz8aTuKjTGYtta9+02kva3C1xc7KXB8GdbfE1akGJIsZLyY/FSh2QrnE+fiB7vmWU3XNcb6A==", + "dev": true + }, "@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -23254,6 +27174,12 @@ "@types/node": "*" } }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", @@ -23262,6 +27188,30 @@ "@types/node": "*" } }, + "@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/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, "@types/jasmine": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", @@ -23326,6 +27276,12 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, "@types/pako": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.4.tgz", @@ -23351,7 +27307,8 @@ "version": "0.0.32", "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", "integrity": "sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==", - "devOptional": true + "optional": true, + "peer": true }, "@types/qs": { "version": "6.9.7", @@ -23372,7 +27329,8 @@ "version": "3.0.20", "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.20.tgz", "integrity": "sha512-6d8Q5fqS9DWOXEhMDiF6/2FjyHdmP/jSTAUyeQR7QwrFeNmYyzmvGxD5aLIHL445HjWgibs0eAig+KPnbaesXA==", - "devOptional": true + "optional": true, + "peer": true }, "@types/semver": { "version": "7.3.13", @@ -23410,6 +27368,12 @@ "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-hkgzYF+qnIl8uTO8rmUSVSfQ8BIfMXC4yJAF4n8BE758YsKBZvFC4NumnAegj7KmylP0liEZNpb9RRGFMbFejA==" }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, "@types/verror": { "version": "1.10.6", "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", @@ -23417,6 +27381,12 @@ "dev": true, "optional": true }, + "@types/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", + "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", + "dev": true + }, "@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -23440,6 +27410,16 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, "@typescript-eslint/eslint-plugin": { "version": "5.43.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", @@ -23548,6 +27528,510 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@wdio/cli": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.8.2.tgz", + "integrity": "sha512-cw0XFom5E/zBFQcBmDk4ki2prPkw/aH6+gD2TBhno7DHlGw8u7X3WazKZYzB7FtCkcmsqp3lDQ5FggnjOa78vQ==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/protocols": "8.8.1", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "async-exit-hook": "^2.0.1", + "chalk": "^5.0.1", + "chokidar": "^3.5.3", + "cli-spinners": "^2.6.1", + "ejs": "^3.1.8", + "execa": "^7.0.0", + "import-meta-resolve": "^2.1.0", + "inquirer": "9.1.5", + "lodash.flattendeep": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.union": "^4.6.0", + "read-pkg-up": "9.1.0", + "recursive-readdir": "^2.2.2", + "webdriverio": "8.8.2", + "yargs": "^17.5.1", + "yarn-install": "^1.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.1.0.tgz", + "integrity": "sha512-bQyg9bzRntwR/8b89DOEhGwctcwCrbWW/TuqTQnpqpy5Fz3aovcOTj5i8NJV6AHc8OGNdMaqdxAWww8pz2kiKg==", + "dev": true, + "requires": { + "type-fest": "^3.0.0" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "cli-width": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz", + "integrity": "sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + }, + "execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dev": true, + "requires": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "inquirer": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.1.5.tgz", + "integrity": "sha512-3ygAIh8gcZavV9bj6MTdYddG2zPSYswP808fKS46NOwlF0zZljVpnLCHODDqItWJDbDpLb3aouAxGaJbkxoppA==", + "dev": true, + "requires": { + "ansi-escapes": "^6.0.0", + "chalk": "^5.2.0", + "cli-cursor": "^4.0.0", + "cli-width": "^4.0.0", + "external-editor": "^3.0.3", + "figures": "^5.0.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^6.1.2", + "run-async": "^2.4.0", + "rxjs": "^7.8.0", + "string-width": "^5.1.2", + "strip-ansi": "^7.0.1", + "through": "^2.3.6", + "wrap-ansi": "^8.1.0" + } + }, + "is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true + }, + "log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "requires": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + } + }, + "mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "ora": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz", + "integrity": "sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==", + "dev": true, + "requires": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "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 + }, + "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" + } + } + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "type-fest": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.8.0.tgz", + "integrity": "sha512-FVNSzGQz9Th+/9R6Lvv7WIAkstylfHN2/JYxkyhhmKFYh9At2DST8t6L6Lref9eYO8PXFTfG9Sg1Agg0K3vq3Q==", + "dev": true + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@wdio/config": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", + "integrity": "sha512-gm8gXqpiIR0EU9Blkqmxe+xsEoKS2EXpWrKlx2JXyx3Yf7By0UNsZVZHMSO8lLunzUjYIntpWYpmKmBmnlrnKQ==", + "dev": true, + "requires": { + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "decamelize": "^6.0.0", + "deepmerge-ts": "^5.0.0", + "glob": "^9.3.0", + "import-meta-resolve": "^2.1.0", + "read-pkg-up": "^9.1.0" + }, + "dependencies": { + "decamelize": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", + "dev": true + }, + "glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + } + }, + "minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true + } + } + }, + "@wdio/globals": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.8.2.tgz", + "integrity": "sha512-uwImTbqbFlHezAl4qtdXMZtZQo22bhENmt6eQ0pJwevtO1U53ZB4x9uDOYtSym8xKCdZILu46uI/THDm+vm2hA==", + "dev": true, + "requires": { + "expect-webdriverio": "^4.0.1", + "webdriverio": "8.8.2" + } + }, + "@wdio/jasmine-framework": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/jasmine-framework/-/jasmine-framework-8.8.2.tgz", + "integrity": "sha512-lFp+WDvDvfYABMwyufhAd3AMJoUii5LCOJmNNmoUsJ0YvP327KRNKfOU7Xdh7HQZfe49whRzfytE5hTexeIFlQ==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "expect-webdriverio": "^4.0.1", + "jasmine": "^4.2.1" + } + }, + "@wdio/local-runner": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.8.2.tgz", + "integrity": "sha512-7zf7FxjRXqqvrtyzFhWsSXlqw8ldTt/3E6SBvwrn4iS/kL3QzyiVMtZ/ILHfLnIZXvUc5CWNpNJ1WWejYmbNWA==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/logger": "8.6.6", + "@wdio/repl": "8.6.6", + "@wdio/runner": "8.8.2", + "@wdio/types": "8.8.0", + "async-exit-hook": "^2.0.1", + "split2": "^4.1.0", + "stream-buffers": "^3.0.2" + } + }, + "@wdio/logger": { + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", + "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "dev": true, + "requires": { + "chalk": "^5.1.2", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + } + } + }, + "@wdio/protocols": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.8.1.tgz", + "integrity": "sha512-nDaycUcm/ATLxcjim0fJyRiezXyyj4ZCq+Xf0S2Cubc0k7+DceFBt7KIMsernNVh2pelzFHEEwxh4DLaqQ71Wg==", + "dev": true + }, + "@wdio/repl": { + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.6.6.tgz", + "integrity": "sha512-vyJzqHJ5yOmfVyk5WWo6pRsJ2xhgWl3DVIBdDNR0wKrtFcm/g1jnB+pNf6Eb7NhCDh3oGul25bmhAwWDoxcFYA==", + "dev": true, + "requires": { + "@types/node": "^18.0.0" + } + }, + "@wdio/reporter": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.8.0.tgz", + "integrity": "sha512-qbbLj5ZqtrHOs2sN/wHen+agIUA1EHB48HRyb17wQapZItmIE16D8ctxAISx7yQ6RpjZYPp+zYhUJ20DFpJhGg==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "diff": "^5.0.0", + "object-inspect": "^1.12.0", + "supports-color": "9.3.1" + }, + "dependencies": { + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true + }, + "supports-color": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.3.1.tgz", + "integrity": "sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==", + "dev": true + } + } + }, + "@wdio/runner": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.8.2.tgz", + "integrity": "sha512-k7gkfhZesnN2dJMzEg+oRQA3a9pEWJSRm7AlidmvQnQkcSC3JzvTtCCqoLaBTxScktOCOUahQ9H+Lf8z/P5Cag==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "deepmerge-ts": "^5.0.0", + "expect-webdriverio": "^4.0.1", + "gaze": "^1.1.2", + "webdriver": "8.8.2", + "webdriverio": "8.8.2" + } + }, + "@wdio/spec-reporter": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.8.0.tgz", + "integrity": "sha512-ZbW0w8ugXIZ7niYCY9rWWm1oxcrH/ceyQl6nBldARvB0IOroleS5hNtp+dd97Y+OxHv/2AD6MQ4yCmS+ukLEgg==", + "dev": true, + "requires": { + "@wdio/reporter": "8.8.0", + "@wdio/types": "8.8.0", + "chalk": "^5.1.2", + "easy-table": "^1.2.0", + "pretty-ms": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + } + } + }, + "@wdio/types": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.8.0.tgz", + "integrity": "sha512-Ai6yIlwWB32FUfvQKCqSa6nSyHIhSF5BOU9OfE7I2XYkLAJTxu8B6NORHQ+rgoppHSWc4D2V9r21y3etF8AGnQ==", + "dev": true, + "requires": { + "@types/node": "^18.0.0" + } + }, + "@wdio/utils": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", + "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "dev": true, + "requires": { + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "import-meta-resolve": "^2.2.0", + "p-iteration": "^1.1.8" + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -23794,7 +28278,8 @@ "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "devOptional": true + "optional": true, + "peer": true }, "agent-base": { "version": "6.0.2", @@ -24034,6 +28519,93 @@ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, + "archiver": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "dependencies": { + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, "are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", @@ -24130,7 +28702,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "devOptional": true + "optional": true, + "peer": true }, "array.prototype.flat": { "version": "1.3.1", @@ -24148,7 +28721,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "devOptional": true + "optional": true, + "peer": true }, "asar": { "version": "3.2.0", @@ -24208,7 +28782,8 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "safer-buffer": "~2.1.0" } @@ -24217,7 +28792,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "devOptional": true + "optional": true }, "ast-transform": { "version": "0.0.0", @@ -24296,17 +28871,36 @@ "postcss-value-parser": "^4.2.0" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "devOptional": true + "optional": true, + "peer": true }, "aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "devOptional": true + "optional": true, + "peer": true + }, + "axios": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", + "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } }, "axobject-query": { "version": "2.0.2", @@ -24418,7 +29012,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "tweetnacl": "^0.14.3" } @@ -24465,7 +29060,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "minimist": "^1.2.0" } @@ -24642,7 +29238,8 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "https-proxy-agent": "^2.2.1" }, @@ -24651,7 +29248,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "es6-promisify": "^5.0.0" } @@ -24660,7 +29258,8 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ms": "^2.1.1" } @@ -24669,7 +29268,8 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -24838,6 +29438,144 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, + "cac": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", + "integrity": "sha512-hq4rxE3NT5PlaEiVV39Z45d6MoFcQZG5dsgJqtAUeOz3408LEQAElToDkf9i5IYSCOmK0If/81dLg7nKxqPR0w==", + "dev": true, + "requires": { + "camelcase-keys": "^3.0.0", + "chalk": "^1.1.3", + "indent-string": "^3.0.0", + "minimist": "^1.2.0", + "read-pkg-up": "^1.0.1", + "suffix": "^0.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "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" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, "cacache": { "version": "16.1.2", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", @@ -24863,6 +29601,12 @@ "unique-filename": "^1.1.1" } }, + "cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "dev": true + }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -24920,6 +29664,24 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, + "camelcase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", + "integrity": "sha512-U4E6A6aFyYnNW+tDt5/yIUKQURKXe3WMFPfX4FxrQFcwZ/R08AUk1xWcUtlr7oq6CV07Ji+aa69V2g7BSpblnQ==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "dev": true + } + } + }, "caniuse-lite": { "version": "1.0.30001431", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", @@ -24929,7 +29691,8 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "devOptional": true + "optional": true, + "peer": true }, "cfb": { "version": "1.2.2", @@ -25029,11 +29792,78 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, + "chrome-launcher": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", + "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", + "dev": true, + "requires": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, + "chromedriver": { + "version": "111.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-111.0.0.tgz", + "integrity": "sha512-XavNYNBBfKIrT8Oi/ywJ0DoOOU+jHF5bQWTkqStFsAXvfCV9VzYN3J+TGAvZdrpXeoixqPRGUxQ2yZhD2iowdQ==", + "dev": true, + "requires": { + "@testim/chrome-version": "^1.1.3", + "axios": "^1.2.1", + "compare-versions": "^5.0.1", + "extract-zip": "^2.0.1", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^1.1.0", + "tcp-port-used": "^1.0.1" + }, + "dependencies": { + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "chromium-bidi": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", + "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", + "dev": true, + "requires": { + "mitt": "3.0.0" + } + }, "chromium-pickle-js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", @@ -25268,6 +30098,37 @@ "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", "dev": true }, + "compare-versions": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", + "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", + "dev": true + }, + "compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -25536,6 +30397,29 @@ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" }, + "crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -25658,6 +30542,15 @@ } } }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "requires": { + "node-fetch": "2.6.7" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -25734,6 +30627,18 @@ "fastparse": "^1.1.2" } }, + "css-shorthand-properties": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", + "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", + "dev": true + }, + "css-value": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", + "dev": true + }, "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -26353,7 +31258,8 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0" } @@ -26379,7 +31285,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "devOptional": true + "optional": true, + "peer": true }, "decompress-response": { "version": "3.3.0", @@ -26410,6 +31317,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "deepmerge-ts": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", + "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", + "dev": true + }, "default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -26451,7 +31364,8 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "globby": "^5.0.0", "is-path-cwd": "^1.0.0", @@ -26466,7 +31380,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "array-uniq": "^1.0.1" } @@ -26475,7 +31390,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -26485,7 +31401,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -26499,7 +31416,8 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "array-union": "^1.0.1", "arrify": "^1.0.0", @@ -26513,22 +31431,18 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "brace-expansion": "^1.1.7" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "devOptional": true - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -26580,6 +31494,51 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, + "devtools": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.8.2.tgz", + "integrity": "sha512-iD/Xr5rMjx+VD08akiAuiMR5EhWKj9i489rcDm2vdC9iB8u8HY51s9FbmnIrN5OstYma0x2qOF2zKxM/muJTtw==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/logger": "8.6.6", + "@wdio/protocols": "8.8.1", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "chrome-launcher": "^0.15.0", + "edge-paths": "^3.0.5", + "import-meta-resolve": "^2.1.0", + "puppeteer-core": "19.8.5", + "query-selector-shadow-dom": "^1.0.0", + "ua-parser-js": "^1.0.1", + "uuid": "^9.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true + }, + "which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "devtools-protocol": { + "version": "0.0.1124027", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1124027.tgz", + "integrity": "sha512-OT2sdgQn4llM9/tVcCvoty733KFFIlXVvESceJsfazhmg/dF7C5e3Z8cIN8jNwIikixuE5rufGtD1cvKHXfOcQ==", + "dev": true + }, "dfa": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", @@ -26592,6 +31551,12 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, + "diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true + }, "dir-compare": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", @@ -26827,16 +31792,43 @@ "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "wcwidth": "^1.0.1" + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, + "edge-paths": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", + "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", + "dev": true, + "requires": { + "@types/which": "^2.0.1", + "which": "^2.0.2" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -27167,6 +32159,31 @@ "unbox-primitive": "^1.0.2" } }, + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -27239,13 +32256,15 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "devOptional": true + "optional": true, + "peer": true }, "es6-promisify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "es6-promise": "^4.0.3" } @@ -28049,7 +33068,33 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "devOptional": true + "optional": true, + "peer": true + }, + "expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + } + }, + "expect-webdriverio": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.1.3.tgz", + "integrity": "sha512-tn7kMH/WVrVwwzPaCXMuFYiGXx15LwpxwkJkC/WmF6xptcqW7kaEZco7sxHjtEXpKV7QVGsfY1Z0PcwW4gj5OA==", + "dev": true, + "requires": { + "@wdio/globals": "^8.2.4", + "expect": "^29.4.0", + "jest-matcher-utils": "^29.4.0", + "webdriverio": "^8.2.4" + } }, "express": { "version": "4.18.2", @@ -28144,7 +33189,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "devOptional": true + "optional": true, + "peer": true }, "external-editor": { "version": "3.1.0", @@ -28433,11 +33479,21 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "devOptional": true + "optional": true, + "peer": true }, "form-data": { "version": "4.0.0", @@ -28450,6 +33506,12 @@ "mime-types": "^2.1.12" } }, + "form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "dev": true + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -28476,6 +33538,12 @@ "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", "dev": true }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -28576,9 +33644,9 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -28609,7 +33677,8 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0" } @@ -28750,6 +33819,15 @@ "delegate": "^3.1.2" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -28846,13 +33924,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "devOptional": true + "optional": true, + "peer": true }, "har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -28862,7 +33942,8 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -28874,7 +33955,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "devOptional": true + "optional": true, + "peer": true } } }, @@ -29045,9 +34127,9 @@ "dev": true }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "http-deceiver": { @@ -29179,13 +34261,24 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, + "http2-wrapper": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", + "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + } + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -29272,7 +34365,8 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "devOptional": true + "optional": true, + "peer": true }, "immutable": { "version": "4.1.0", @@ -29295,6 +34389,12 @@ } } }, + "import-meta-resolve": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", + "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "dev": true + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -29404,12 +34504,12 @@ "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==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -29425,6 +34525,12 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, + "ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -29440,6 +34546,17 @@ "has-tostringtag": "^1.0.0" } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -29538,6 +34655,12 @@ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -29562,13 +34685,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", - "devOptional": true + "optional": true, + "peer": true }, "is-path-in-cwd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "is-path-inside": "^1.0.0" }, @@ -29577,7 +34702,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "path-is-inside": "^1.0.1" } @@ -29620,6 +34746,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -29652,17 +34784,49 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "devOptional": true + "optional": true, + "peer": true }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -29672,6 +34836,16 @@ "call-bind": "^1.0.2" } }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", @@ -29685,6 +34859,17 @@ "is-docker": "^2.0.0" } }, + "is2": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -29705,7 +34890,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "devOptional": true + "optional": true, + "peer": true }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -29799,15 +34985,458 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "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" - } - }, + "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" + } + }, + "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" + } + } + } + }, + "jalhyd": { + "version": "file:jalhyd", + "requires": { + "@types/base-64": "^1.0.0", + "@types/jasmine": "^4.0.3", + "@types/lodash": "^4.14.191", + "@types/node": "^18.0.3", + "@typescript-eslint/eslint-plugin": "^5.30.6", + "@typescript-eslint/parser": "^5.30.6", + "base-64": "^1.0.0", + "buffer": "^6.0.3", + "eslint": "^8.19.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-jsdoc": "^39.3.3", + "eslint-plugin-prefer-arrow": "^1.2.3", + "find": "^0.3.0", + "jasmine": "^4.2.1", + "jasmine-core": "^4.2.0", + "jasmine-node": "^3.0.0", + "jasmine-ts": "^0.4.0", + "replace-in-file": "^6.3.5", + "requirejs": "^2.3.6", + "rimraf": "^3.0.2", + "ts-node": "^10.8.2", + "typedoc": "^0.23.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } + } + }, + "jasmine": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.5.0.tgz", + "integrity": "sha512-9olGRvNZyADIwYL9XBNBst5BTU/YaePzuddK+YRslc7rI9MdTIE4r3xaBKbv2GEmzYYUfMOdTR8/i6JfLZaxSQ==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "jasmine-core": "^4.5.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "jasmine-core": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz", + "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==", + "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" + } + } + } + }, + "jasmine-core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.2.0.tgz", + "integrity": "sha512-OcFpBrIhnbmb9wfI8cqPSJ50pv3Wg4/NSgoZIqHzIwO/2a9qivJWzv8hUvaREIMYYJBas6AvfXATFdVuzzCqVw==", + "dev": true + }, + "jasmine-growl-reporter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-2.0.0.tgz", + "integrity": "sha512-RYwVfPaGgxQQSHDOt6jQ99/KAkFQ/Fiwg/AzBS+uO9A4UhGhxb7hwXaUUSU/Zs0MxBoFNqmIRC+7P4/+5O3lXg==", + "dev": true, + "requires": { + "growl": "^1.10.5" + } + }, + "jasmine-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-3.0.0.tgz", + "integrity": "sha512-vUa5Q7bQYwHHqi6FlJYndiKqZp+d+c3MKe0QUMwwrC4JRmoRV3zkg0buxB/uQ6qLh0NO34TNstpAnvaZ6xGlAA==", + "dev": true, + "requires": { + "coffeescript": "~1.12.7", + "gaze": "~1.1.2", + "jasmine-growl-reporter": "~2.0.0", + "jasmine-reporters": "~1.0.0", + "mkdirp": "~0.3.5", + "requirejs": "~2.3.6", + "underscore": "~1.9.1", + "walkdir": "~0.0.12" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", + "dev": true + }, + "underscore": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", + "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==", + "dev": true + } + } + }, + "jasmine-reporters": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-1.0.2.tgz", + "integrity": "sha512-KrMRwzykkIKfkXr5UhCs/4BRJpws4VmNOeHIVKX8EBa9lYysVik3phkKrJCnCUE2lUCZDIA4rAmFrDgw546IzA==", + "dev": true, + "requires": { + "mkdirp": "~0.3.5" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", + "dev": true + } + } + }, + "jasmine-spec-reporter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", + "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", + "dev": true, + "requires": { + "colors": "1.4.0" + } + }, + "jasmine-ts": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jasmine-ts/-/jasmine-ts-0.4.0.tgz", + "integrity": "sha512-bIAWJKUwxfuZfGI1ctEbny7+dsyFzsN0eLzOokxh0qIUCofai2WUEKoe3MMllkGEBXJzbEVYr2IyhJBv4j7SBA==", + "dev": true, + "requires": { + "yargs": "^17.0.1" + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", + "optional": true, + "peer": true + }, + "jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.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" + } + }, + "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" + } + }, + "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": "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" + } + } + } + }, + "jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true + }, + "jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.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" + } + }, + "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" + } + }, + "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": "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" + } + } + } + }, + "jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "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" + } + }, + "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": "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" + } + } + } + }, + "jest-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "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" + } + }, + "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": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29819,183 +35448,6 @@ } } }, - "jalhyd": { - "version": "file:jalhyd", - "requires": { - "@types/base-64": "^1.0.0", - "@types/jasmine": "^4.0.3", - "@types/lodash": "^4.14.191", - "@types/node": "^18.0.3", - "@typescript-eslint/eslint-plugin": "^5.30.6", - "@typescript-eslint/parser": "^5.30.6", - "base-64": "^1.0.0", - "buffer": "^6.0.3", - "eslint": "^8.19.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-jsdoc": "^39.3.3", - "eslint-plugin-prefer-arrow": "^1.2.3", - "find": "^0.3.0", - "jasmine": "^4.2.1", - "jasmine-core": "^4.2.0", - "jasmine-node": "^3.0.0", - "jasmine-ts": "^0.4.0", - "replace-in-file": "^6.3.5", - "requirejs": "^2.3.6", - "rimraf": "^3.0.2", - "ts-node": "^10.8.2", - "typedoc": "^0.23.7", - "typescript": "^4.7.4" - }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - } - } - }, - "jasmine": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.5.0.tgz", - "integrity": "sha512-9olGRvNZyADIwYL9XBNBst5BTU/YaePzuddK+YRslc7rI9MdTIE4r3xaBKbv2GEmzYYUfMOdTR8/i6JfLZaxSQ==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "jasmine-core": "^4.5.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "jasmine-core": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz", - "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==", - "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" - } - } - } - }, - "jasmine-core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.2.0.tgz", - "integrity": "sha512-OcFpBrIhnbmb9wfI8cqPSJ50pv3Wg4/NSgoZIqHzIwO/2a9qivJWzv8hUvaREIMYYJBas6AvfXATFdVuzzCqVw==", - "dev": true - }, - "jasmine-growl-reporter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-2.0.0.tgz", - "integrity": "sha512-RYwVfPaGgxQQSHDOt6jQ99/KAkFQ/Fiwg/AzBS+uO9A4UhGhxb7hwXaUUSU/Zs0MxBoFNqmIRC+7P4/+5O3lXg==", - "dev": true, - "requires": { - "growl": "^1.10.5" - } - }, - "jasmine-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-3.0.0.tgz", - "integrity": "sha512-vUa5Q7bQYwHHqi6FlJYndiKqZp+d+c3MKe0QUMwwrC4JRmoRV3zkg0buxB/uQ6qLh0NO34TNstpAnvaZ6xGlAA==", - "dev": true, - "requires": { - "coffeescript": "~1.12.7", - "gaze": "~1.1.2", - "jasmine-growl-reporter": "~2.0.0", - "jasmine-reporters": "~1.0.0", - "mkdirp": "~0.3.5", - "requirejs": "~2.3.6", - "underscore": "~1.9.1", - "walkdir": "~0.0.12" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", - "dev": true - }, - "underscore": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", - "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==", - "dev": true - } - } - }, - "jasmine-reporters": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-1.0.2.tgz", - "integrity": "sha512-KrMRwzykkIKfkXr5UhCs/4BRJpws4VmNOeHIVKX8EBa9lYysVik3phkKrJCnCUE2lUCZDIA4rAmFrDgw546IzA==", - "dev": true, - "requires": { - "mkdirp": "~0.3.5" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", - "dev": true - } - } - }, - "jasmine-spec-reporter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", - "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", - "dev": true, - "requires": { - "colors": "1.4.0" - } - }, - "jasmine-ts": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/jasmine-ts/-/jasmine-ts-0.4.0.tgz", - "integrity": "sha512-bIAWJKUwxfuZfGI1ctEbny7+dsyFzsN0eLzOokxh0qIUCofai2WUEKoe3MMllkGEBXJzbEVYr2IyhJBv4j7SBA==", - "dev": true, - "requires": { - "yargs": "^17.0.1" - } - }, - "jasminewd2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", - "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", - "devOptional": true - }, "jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -30045,7 +35497,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "devOptional": true + "optional": true, + "peer": true }, "jsdoc-type-pratt-parser": { "version": "3.1.0", @@ -30073,7 +35526,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "devOptional": true + "optional": true, + "peer": true }, "json-schema-traverse": { "version": "1.0.0", @@ -30090,7 +35544,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "devOptional": true + "optional": true }, "json5": { "version": "2.2.1", @@ -30122,7 +35576,8 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -30134,19 +35589,22 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "devOptional": true + "optional": true, + "peer": true }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "devOptional": true + "optional": true, + "peer": true }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -30159,7 +35617,8 @@ "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -30171,7 +35630,8 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "devOptional": true + "optional": true, + "peer": true } } }, @@ -30222,12 +35682,27 @@ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" }, + "ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "dev": true + }, "lazy-val": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "dev": true }, + "lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, "less": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", @@ -30311,16 +35786,68 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "immediate": "~3.0.5" } }, + "lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "marky": "^1.2.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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==" }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + } + } + }, "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -30349,17 +35876,71 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true + }, + "lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", + "dev": true + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -30502,6 +36083,12 @@ "ssri": "^9.0.0" } }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + }, "map-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", @@ -30513,6 +36100,12 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", "integrity": "sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==" }, + "marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true + }, "matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -30647,6 +36240,12 @@ "mime-db": "1.52.0" } }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -30764,11 +36363,23 @@ "yallist": "^4.0.0" } }, + "mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "moment-mini": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", @@ -30957,6 +36568,15 @@ "dev": true, "optional": true }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -31040,6 +36660,18 @@ "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -31229,7 +36861,8 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "devOptional": true + "optional": true, + "peer": true }, "object-assign": { "version": "4.1.1", @@ -31439,6 +37072,12 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, + "p-iteration": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", + "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -31578,6 +37217,12 @@ "lines-and-columns": "^1.1.6" } }, + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true + }, "parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -31666,7 +37311,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "devOptional": true + "optional": true, + "peer": true }, "path-key": { "version": "3.1.1", @@ -31678,6 +37324,30 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.4.tgz", + "integrity": "sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==", + "dev": true, + "requires": { + "lru-cache": "^9.0.0", + "minipass": "^5.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz", + "integrity": "sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==", + "dev": true + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + } + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -31729,7 +37399,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "devOptional": true + "optional": true, + "peer": true }, "picocolors": { "version": "1.0.0", @@ -31741,6 +37412,11 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -32178,6 +37854,34 @@ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" }, + "pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "requires": { + "parse-ms": "^2.1.0" + } + }, "primeicons": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", @@ -32240,7 +37944,8 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "@types/q": "^0.0.32", "@types/selenium-webdriver": "^3.0.0", @@ -32263,19 +37968,22 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "devOptional": true + "optional": true, + "peer": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "devOptional": true + "optional": true, + "peer": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -32285,7 +37993,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -32298,7 +38007,8 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -32309,13 +38019,15 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true + "optional": true, + "peer": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-regex": "^5.0.1" } @@ -32326,7 +38038,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "color-name": "~1.1.4" } @@ -32335,13 +38048,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true + "optional": true, + "peer": true }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -32355,7 +38070,8 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", "integrity": "sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "exit": "^0.1.2", "glob": "^7.0.6", @@ -32366,13 +38082,15 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==", - "devOptional": true + "optional": true, + "peer": true }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "brace-expansion": "^1.1.7" } @@ -32381,19 +38099,22 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==", - "devOptional": true + "optional": true, + "peer": true }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "devOptional": true + "optional": true, + "peer": true }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "source-map": "^0.5.6" } @@ -32402,7 +38123,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-regex": "^2.0.0" } @@ -32411,13 +38133,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "devOptional": true + "optional": true, + "peer": true }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -32428,13 +38152,15 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true + "optional": true, + "peer": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "color-convert": "^2.0.1" } @@ -32443,7 +38169,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-regex": "^5.0.1" } @@ -32454,13 +38181,15 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "devOptional": true + "optional": true, + "peer": true }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -32479,7 +38208,8 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -32496,6 +38226,12 @@ "ipaddr.js": "1.9.1" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "proxy-middleware": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", @@ -32508,11 +38244,18 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "optional": true }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "devOptional": true + "optional": true, + "peer": true }, "pump": { "version": "3.0.0", @@ -32529,11 +38272,60 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "puppeteer-core": { + "version": "19.8.5", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.8.5.tgz", + "integrity": "sha512-zoGhim/oBQbkND6h4Xz4X7l5DkWVH9wH7z0mVty5qa/c0P1Yad47t/npVtt2xS10BiQwzztWKx7Pa2nJ5yykdw==", + "dev": true, + "requires": { + "@puppeteer/browsers": "0.4.0", + "chromium-bidi": "0.4.6", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "dependencies": { + "devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "devOptional": true + "optional": true, + "peer": true }, "qs": { "version": "6.11.0", @@ -32543,11 +38335,23 @@ "side-channel": "^1.0.4" } }, + "query-selector-shadow-dom": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", + "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, "quote-stream": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", @@ -32606,19 +38410,18 @@ } } }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "requires": { "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } } }, "read-config-file": { @@ -32661,6 +38464,94 @@ "npm-normalize-package-bin": "^1.0.1" } }, + "read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" + }, + "dependencies": { + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "dev": true, + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -32675,6 +38566,15 @@ "util-deprecate": "~1.0.1" } }, + "readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "requires": { + "minimatch": "^5.1.0" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -32683,6 +38583,36 @@ "picomatch": "^2.2.1" } }, + "recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "requires": { + "minimatch": "^3.0.5" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -32868,7 +38798,8 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -32896,7 +38827,8 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -32907,13 +38839,15 @@ "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "devOptional": true + "optional": true, + "peer": true }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -32923,7 +38857,8 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "devOptional": true + "optional": true, + "peer": true } } }, @@ -32941,7 +38876,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "devOptional": true + "optional": true, + "peer": true }, "requirejs": { "version": "2.3.6", @@ -32964,6 +38900,12 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -33007,6 +38949,23 @@ "lowercase-keys": "^1.0.0" } }, + "resq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", + "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1" + }, + "dependencies": { + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", + "dev": true + } + } + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -33027,6 +38986,12 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, + "rgb2hex": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", + "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -33111,9 +39076,9 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "requires": { "tslib": "^2.1.0" } @@ -33171,7 +39136,8 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "https-proxy-agent": "^2.2.1" }, @@ -33180,7 +39146,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "es6-promisify": "^5.0.0" } @@ -33189,7 +39156,8 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ms": "^2.1.1" } @@ -33198,7 +39166,8 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -33284,7 +39253,8 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "jszip": "^3.1.3", "rimraf": "^2.5.4", @@ -33296,7 +39266,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -33306,7 +39277,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -33320,7 +39292,8 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "brace-expansion": "^1.1.7" } @@ -33329,7 +39302,8 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -33338,7 +39312,8 @@ "version": "0.0.30", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "os-tmpdir": "~1.0.1" } @@ -33550,7 +39525,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "devOptional": true + "optional": true, + "peer": true }, "setprototypeof": { "version": "1.2.0", @@ -33830,6 +39806,12 @@ "through": "2" } }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true + }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -33848,7 +39830,8 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -33869,6 +39852,23 @@ "minipass": "^3.1.1" } }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "stat-mode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", @@ -34042,6 +40042,64 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, + "requires": { + "bl": "^5.0.0" + }, + "dependencies": { + "bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "requires": { + "internal-slot": "^1.0.4" + } + }, + "stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "dev": true + }, "stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", @@ -34100,6 +40158,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -34170,6 +40237,12 @@ "normalize-path": "^3.0.0" } }, + "suffix": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", + "integrity": "sha512-j5uf6MJtMCfC4vBe5LFktSe4bGyNTBk7I2Kdri0jeLrcv5B9pWfxVa5JQpoxgtR8vaVB7bVxsWgnfQbX5wkhAA==", + "dev": true + }, "sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -34221,6 +40294,73 @@ "yallist": "^4.0.0" } }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "dev": true, + "requires": { + "debug": "4.3.1", + "is2": "^2.0.6" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, "temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -34421,6 +40561,12 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "traverse": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", @@ -34649,7 +40795,8 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "safe-buffer": "^5.0.1" } @@ -34658,7 +40805,8 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "devOptional": true + "optional": true, + "peer": true }, "type": { "version": "1.2.0", @@ -34717,6 +40865,12 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" }, + "ua-parser-js": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "dev": true + }, "uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -34736,6 +40890,16 @@ "which-boxed-primitive": "^1.0.2" } }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -34966,17 +41130,190 @@ "defaults": "^1.0.3" } }, + "wdio-chromedriver-service": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/wdio-chromedriver-service/-/wdio-chromedriver-service-8.1.1.tgz", + "integrity": "sha512-pN3GiOkTIMnalfq4PJAHdX95pDp1orHnTY8W1fIbd6ok81ba97UjerTgS7lUDRUh1p0MAm35Ww0uc0/9wzB7SA==", + "dev": true, + "requires": { + "@wdio/logger": "^8.1.0", + "fs-extra": "^11.1.0", + "split2": "^4.1.0", + "tcp-port-used": "^1.0.2" + }, + "dependencies": { + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "wdio-wait-for": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/wdio-wait-for/-/wdio-wait-for-3.0.3.tgz", + "integrity": "sha512-y/n7tpExl54SOwbk27Ngz9ch4qP+250OhL6yYrxB5GLL5jZWcechTBbSJwOZNTUT6jZomoPFT9t77NFpqdJsig==", + "dev": true + }, "web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "dev": true }, + "webdriver": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.8.2.tgz", + "integrity": "sha512-ug+7n0JgRTLG5pGyD53VKValSLFcr0oll1QelH1Gueh/umt3Ipu+SDV+v+lyCZY6CKasCsv80W8oZfpLBj1ClQ==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@types/ws": "^8.5.3", + "@wdio/config": "8.8.0", + "@wdio/logger": "8.6.6", + "@wdio/protocols": "8.8.1", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "deepmerge-ts": "^5.0.0", + "got": "^12.1.0", + "ky": "^0.33.0", + "ws": "^8.8.0" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", + "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.1" + } + }, + "cacheable-request": { + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.9.tgz", + "integrity": "sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "^4.0.1", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.2", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true + }, + "got": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", + "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", + "dev": true, + "requires": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true + }, + "mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true + }, + "normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "dev": true + }, + "p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true + }, + "responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dev": true, + "requires": { + "lowercase-keys": "^3.0.0" + } + } + } + }, "webdriver-js-extender": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "@types/selenium-webdriver": "^3.0.0", "selenium-webdriver": "^3.0.1" @@ -34986,7 +41323,8 @@ "version": "12.1.8", "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.8.tgz", "integrity": "sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "adm-zip": "^0.4.9", "chalk": "^1.1.1", @@ -35005,19 +41343,22 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "devOptional": true + "optional": true, + "peer": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "devOptional": true + "optional": true, + "peer": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -35027,7 +41368,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -35040,7 +41382,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -35054,13 +41397,15 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true + "optional": true, + "peer": true }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "brace-expansion": "^1.1.7" } @@ -35069,7 +41414,8 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -35078,13 +41424,15 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "devOptional": true + "optional": true, + "peer": true }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-regex": "^2.0.0" } @@ -35093,10 +41441,122 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "devOptional": true + "optional": true, + "peer": true + } + } + }, + "webdriverio": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.8.2.tgz", + "integrity": "sha512-H3h+sHLg9hfQCPLvpd30hi/ZW4lLy73m4zrZ5kJyuuUf38SZFLcfXD3W1RGig88RQ/75Ui164ugwHasTMiQEgw==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/logger": "8.6.6", + "@wdio/protocols": "8.8.1", + "@wdio/repl": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "archiver": "^5.0.0", + "aria-query": "^5.0.0", + "css-shorthand-properties": "^1.1.1", + "css-value": "^0.0.1", + "devtools": "8.8.2", + "devtools-protocol": "^0.0.1124027", + "grapheme-splitter": "^1.0.2", + "import-meta-resolve": "^2.1.0", + "is-plain-obj": "^4.1.0", + "lodash.clonedeep": "^4.5.0", + "lodash.zip": "^4.2.0", + "minimatch": "^9.0.0", + "puppeteer-core": "19.8.5", + "query-selector-shadow-dom": "^1.0.0", + "resq": "^1.9.1", + "rgb2hex": "0.2.5", + "serialize-error": "^8.0.0", + "webdriver": "8.8.2" + }, + "dependencies": { + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + }, + "deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + } + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "minimatch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, "webpack": { "version": "5.75.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", @@ -35291,6 +41751,16 @@ "iconv-lite": "0.6.3" } }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -35312,11 +41782,38 @@ "is-symbol": "^1.0.3" } }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "devOptional": true + "optional": true, + "peer": true + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } }, "wide-align": { "version": "1.1.5", @@ -35436,9 +41933,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "requires": {} }, "xlsx": { @@ -35459,7 +41956,8 @@ "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -35469,7 +41967,8 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "devOptional": true + "optional": true, + "peer": true } } }, @@ -35528,6 +42027,94 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, + "yarn-install": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yarn-install/-/yarn-install-1.0.0.tgz", + "integrity": "sha512-VO1u181msinhPcGvQTVMnHVOae8zjX/NSksR17e6eXHRveDvHCF5mGjh9hkN8mzyfnCqcBe42LdTs7bScuTaeg==", + "dev": true, + "requires": { + "cac": "^3.0.3", + "chalk": "^1.1.3", + "cross-spawn": "^4.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "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" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } + }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -35550,6 +42137,30 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true }, + "zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "zone.js": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", diff --git a/package.json b/package.json index 14c4442a9..5f9625d2d 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,8 @@ "viz": "tsviz -recursive src/ nghyd_class_diagram.png", "webapp-nocompile": "\"node_modules/.bin/http-server\" dist", "webapp": "npm run build-no-pdf && npm run webapp-nocompile", - "service-worker-version": "./scripts/update-service-worker-config.sh" + "service-worker-version": "./scripts/update-service-worker-config.sh", + "wdio": "wdio run ./wdio.conf.ts" }, "private": true, "dependencies": { @@ -94,6 +95,11 @@ "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/eslint-plugin-tslint": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", + "@wdio/cli": "^8.8.2", + "@wdio/jasmine-framework": "^8.8.2", + "@wdio/local-runner": "^8.8.2", + "@wdio/spec-reporter": "^8.8.0", + "chromedriver": "^111.0.0", "codelyzer": "^6.0.2", "electron": "^19.0.7", "electron-builder": "^23.1.0", @@ -104,6 +110,8 @@ "jasmine-spec-reporter": "~7.0.0", "ts-node": "^10.8.2", "typescript": "~4.7.4", + "wdio-chromedriver-service": "^8.1.1", + "wdio-wait-for": "^3.0.3", "webpack-dev-server": "^4.9.3" } } diff --git a/test/pageobjects/login.page.ts b/test/pageobjects/login.page.ts new file mode 100644 index 000000000..b117fb0d6 --- /dev/null +++ b/test/pageobjects/login.page.ts @@ -0,0 +1,42 @@ +import { ChainablePromiseElement } from 'webdriverio'; + +import Page from './page'; + +/** + * sub page containing specific selectors and methods for a specific page + */ +class LoginPage extends Page { + /** + * define selectors using getter methods + */ + public get inputUsername () { + return $('#username'); + } + + public get inputPassword () { + return $('#password'); + } + + public get btnSubmit () { + return $('button[type="submit"]'); + } + + /** + * a method to encapsule automation code to interact with the page + * e.g. to login using username and password + */ + public async login (username: string, password: string) { + await this.inputUsername.setValue(username); + await this.inputPassword.setValue(password); + await this.btnSubmit.click(); + } + + /** + * overwrite specific options to adapt it to page object + */ + public open () { + return super.open('login'); + } +} + +export default new LoginPage(); diff --git a/test/pageobjects/page.ts b/test/pageobjects/page.ts new file mode 100644 index 000000000..fc8be3339 --- /dev/null +++ b/test/pageobjects/page.ts @@ -0,0 +1,13 @@ +/** +* main page object containing all methods, selectors and functionality +* that is shared across all page objects +*/ +export default class Page { + /** + * Opens a sub page of the page + * @param path path of the sub page (e.g. /path/to/page.html) + */ + public open (path: string) { + return browser.url(`https://the-internet.herokuapp.com/${path}`) + } +} diff --git a/test/pageobjects/secure.page.ts b/test/pageobjects/secure.page.ts new file mode 100644 index 000000000..35b7dca15 --- /dev/null +++ b/test/pageobjects/secure.page.ts @@ -0,0 +1,17 @@ +import { ChainablePromiseElement } from 'webdriverio'; + +import Page from './page'; + +/** + * sub page containing specific selectors and methods for a specific page + */ +class SecurePage extends Page { + /** + * define selectors using getter methods + */ + public get flashAlert () { + return $('#flash'); + } +} + +export default new SecurePage(); diff --git a/test/specs/example.e2e.ts b/test/specs/example.e2e.ts new file mode 100644 index 000000000..4f6453e7d --- /dev/null +++ b/test/specs/example.e2e.ts @@ -0,0 +1,15 @@ +import LoginPage from '../pageobjects/login.page'; +import SecurePage from '../pageobjects/secure.page'; + +describe('My Login application', () => { + it('should login with valid credentials', async () => { + await LoginPage.open(); + + await LoginPage.login('tomsmith', 'SuperSecretPassword!'); + await expect(SecurePage.flashAlert).toBeExisting(); + await expect(SecurePage.flashAlert).toHaveTextContaining( + 'You logged into a secure area!'); + }); +}); + + diff --git a/wdio.conf.ts b/wdio.conf.ts new file mode 100644 index 000000000..a891a4ab4 --- /dev/null +++ b/wdio.conf.ts @@ -0,0 +1,312 @@ +import type { Options } from '@wdio/types' + +export const config: Options.Testrunner = { + // + // ==================== + // Runner Configuration + // ==================== + // WebdriverIO supports running e2e tests as well as unit and component tests. + runner: 'local', + autoCompileOpts: { + autoCompile: true, + tsNodeOpts: { + project: './test/tsconfig.json', + transpileOnly: true + } + }, + + + // + // ================== + // Specify Test Files + // ================== + // Define which test specs should run. The pattern is relative to the directory + // of the configuration file being run. + // + // The specs are defined as an array of spec files (optionally using wildcards + // that will be expanded). The test for each spec file will be run in a separate + // worker process. In order to have a group of spec files run in the same worker + // process simply enclose them in an array within the specs array. + // + // If you are calling `wdio` from an NPM script (see https://docs.npmjs.com/cli/run-script), + // then the current working directory is where your `package.json` resides, so `wdio` + // will be called from there. + // + specs: [ + './test/specs/**/*.ts' + ], + // Patterns to exclude. + exclude: [ + // 'path/to/excluded/files' + ], + // + // ============ + // Capabilities + // ============ + // Define your capabilities here. WebdriverIO can run multiple capabilities at the same + // time. Depending on the number of capabilities, WebdriverIO launches several test + // sessions. Within your capabilities you can overwrite the spec and exclude options in + // order to group specific specs to a specific capability. + // + // First, you can define how many instances should be started at the same time. Let's + // say you have 3 different capabilities (Chrome, Firefox, and Safari) and you have + // set maxInstances to 1; wdio will spawn 3 processes. Therefore, if you have 10 spec + // files and you set maxInstances to 10, all spec files will get tested at the same time + // and 30 processes will get spawned. The property handles how many capabilities + // from the same test should run tests. + // + maxInstances: 10, + // + // If you have trouble getting all important capabilities together, check out the + // Sauce Labs platform configurator - a great tool to configure your capabilities: + // https://saucelabs.com/platform/platform-configurator + // + capabilities: [{ + + // maxInstances can get overwritten per capability. So if you have an in-house Selenium + // grid with only 5 firefox instances available you can make sure that not more than + // 5 instances get started at a time. + maxInstances: 5, + // + browserName: 'chrome', + acceptInsecureCerts: true + // If outputDir is provided WebdriverIO can capture driver session logs + // it is possible to configure which logTypes to include/exclude. + // excludeDriverLogs: ['*'], // pass '*' to exclude all driver session logs + // excludeDriverLogs: ['bugreport', 'server'], + }], + // + // =================== + // Test Configurations + // =================== + // Define all options that are relevant for the WebdriverIO instance here + // + // Level of logging verbosity: trace | debug | info | warn | error | silent + logLevel: 'info', + // + // Set specific log levels per logger + // loggers: + // - webdriver, webdriverio + // - @wdio/browserstack-service, @wdio/devtools-service, @wdio/sauce-service + // - @wdio/mocha-framework, @wdio/jasmine-framework + // - @wdio/local-runner + // - @wdio/sumologic-reporter + // - @wdio/cli, @wdio/config, @wdio/utils + // Level of logging verbosity: trace | debug | info | warn | error | silent + // logLevels: { + // webdriver: 'info', + // '@wdio/appium-service': 'info' + // }, + // + // If you only want to run your tests until a specific amount of tests have failed use + // bail (default is 0 - don't bail, run all tests). + bail: 0, + // + // Set a base URL in order to shorten url command calls. If your `url` parameter starts + // with `/`, the base url gets prepended, not including the path portion of your baseUrl. + // If your `url` parameter starts without a scheme or `/` (like `some/path`), the base url + // gets prepended directly. + baseUrl: 'http://localhost:4200/', + // + // Default timeout for all waitFor* commands. + waitforTimeout: 10000, + // + // Default timeout in milliseconds for request + // if browser driver or grid doesn't send response + connectionRetryTimeout: 120000, + // + // Default request retries count + connectionRetryCount: 3, + // + // Test runner services + // Services take over a specific job you don't want to take care of. They enhance + // your test setup with almost no effort. Unlike plugins, they don't add new + // commands. Instead, they hook themselves up into the test process. + services: ['chromedriver'], + + // Framework you want to run your specs with. + // The following are supported: Mocha, Jasmine, and Cucumber + // see also: https://webdriver.io/docs/frameworks + // + // Make sure you have the wdio adapter package for the specific framework installed + // before running any tests. + framework: 'jasmine', + // + // The number of times to retry the entire specfile when it fails as a whole + // specFileRetries: 1, + // + // Delay in seconds between the spec file retry attempts + // specFileRetriesDelay: 0, + // + // Whether or not retried specfiles should be retried immediately or deferred to the end of the queue + // specFileRetriesDeferred: false, + // + // Test reporter for stdout. + // The only one supported by default is 'dot' + // see also: https://webdriver.io/docs/dot-reporter + reporters: ['spec'], + + + + // + // Options to be passed to Jasmine. + jasmineOpts: { + // Jasmine default timeout + defaultTimeoutInterval: 60000, + // + // The Jasmine framework allows interception of each assertion in order to log the state of the application + // or website depending on the result. For example, it is pretty handy to take a screenshot every time + // an assertion fails. + expectationResultHandler: function(passed, assertion) { + // do something + } + }, + + // + // ===== + // Hooks + // ===== + // WebdriverIO provides several hooks you can use to interfere with the test process in order to enhance + // it and to build services around it. You can either apply a single function or an array of + // methods to it. If one of them returns with a promise, WebdriverIO will wait until that promise got + // resolved to continue. + /** + * Gets executed once before all workers get launched. + * @param {Object} config wdio configuration object + * @param {Array.<Object>} capabilities list of capabilities details + */ + // onPrepare: function (config, capabilities) { + // }, + /** + * Gets executed before a worker process is spawned and can be used to initialise specific service + * for that worker as well as modify runtime environments in an async fashion. + * @param {String} cid capability id (e.g 0-0) + * @param {[type]} caps object containing capabilities for session that will be spawn in the worker + * @param {[type]} specs specs to be run in the worker process + * @param {[type]} args object that will be merged with the main configuration once worker is initialized + * @param {[type]} execArgv list of string arguments passed to the worker process + */ + // onWorkerStart: function (cid, caps, specs, args, execArgv) { + // }, + /** + * Gets executed just after a worker process has exited. + * @param {String} cid capability id (e.g 0-0) + * @param {Number} exitCode 0 - success, 1 - fail + * @param {[type]} specs specs to be run in the worker process + * @param {Number} retries number of retries used + */ + // onWorkerEnd: function (cid, exitCode, specs, retries) { + // }, + /** + * Gets executed just before initialising the webdriver session and test framework. It allows you + * to manipulate configurations depending on the capability or spec. + * @param {Object} config wdio configuration object + * @param {Array.<Object>} capabilities list of capabilities details + * @param {Array.<String>} specs List of spec file paths that are to be run + * @param {String} cid worker id (e.g. 0-0) + */ + // beforeSession: function (config, capabilities, specs, cid) { + // }, + /** + * Gets executed before test execution begins. At this point you can access to all global + * variables like `browser`. It is the perfect place to define custom commands. + * @param {Array.<Object>} capabilities list of capabilities details + * @param {Array.<String>} specs List of spec file paths that are to be run + * @param {Object} browser instance of created browser/device session + */ + // before: function (capabilities, specs) { + // }, + /** + * Runs before a WebdriverIO command gets executed. + * @param {String} commandName hook command name + * @param {Array} args arguments that command would receive + */ + // beforeCommand: function (commandName, args) { + // }, + /** + * Hook that gets executed before the suite starts + * @param {Object} suite suite details + */ + // beforeSuite: function (suite) { + // }, + /** + * Function to be executed before a test (in Mocha/Jasmine) starts. + */ + // beforeTest: function (test, context) { + // }, + /** + * Hook that gets executed _before_ a hook within the suite starts (e.g. runs before calling + * beforeEach in Mocha) + */ + // beforeHook: function (test, context) { + // }, + /** + * Hook that gets executed _after_ a hook within the suite starts (e.g. runs after calling + * afterEach in Mocha) + */ + // afterHook: function (test, context, { error, result, duration, passed, retries }) { + // }, + /** + * Function to be executed after a test (in Mocha/Jasmine only) + * @param {Object} test test object + * @param {Object} context scope object the test was executed with + * @param {Error} result.error error object in case the test fails, otherwise `undefined` + * @param {Any} result.result return object of test function + * @param {Number} result.duration duration of test + * @param {Boolean} result.passed true if test has passed, otherwise false + * @param {Object} result.retries informations to spec related retries, e.g. `{ attempts: 0, limit: 0 }` + */ + // afterTest: function(test, context, { error, result, duration, passed, retries }) { + // }, + + + /** + * Hook that gets executed after the suite has ended + * @param {Object} suite suite details + */ + // afterSuite: function (suite) { + // }, + /** + * Runs after a WebdriverIO command gets executed + * @param {String} commandName hook command name + * @param {Array} args arguments that command would receive + * @param {Number} result 0 - command success, 1 - command error + * @param {Object} error error object if any + */ + // afterCommand: function (commandName, args, result, error) { + // }, + /** + * Gets executed after all tests are done. You still have access to all global variables from + * the test. + * @param {Number} result 0 - test pass, 1 - test fail + * @param {Array.<Object>} capabilities list of capabilities details + * @param {Array.<String>} specs List of spec file paths that ran + */ + // after: function (result, capabilities, specs) { + // }, + /** + * Gets executed right after terminating the webdriver session. + * @param {Object} config wdio configuration object + * @param {Array.<Object>} capabilities list of capabilities details + * @param {Array.<String>} specs List of spec file paths that ran + */ + // afterSession: function (config, capabilities, specs) { + // }, + /** + * Gets executed after all workers got shut down and the process is about to exit. An error + * thrown in the onComplete hook will result in the test run failing. + * @param {Object} exitCode 0 - success, 1 - fail + * @param {Object} config wdio configuration object + * @param {Array.<Object>} capabilities list of capabilities details + * @param {<Object>} results object containing test results + */ + // onComplete: function(exitCode, config, capabilities, results) { + // }, + /** + * Gets executed when a refresh happens. + * @param {String} oldSessionId session ID of the old session + * @param {String} newSessionId session ID of the new session + */ + // onReload: function(oldSessionId, newSessionId) { + // } +} -- GitLab From d1dbb22f4cc0222b2bb9f48ca7d5018a78fd771a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 13 Apr 2023 16:45:00 +0200 Subject: [PATCH 235/285] test(e2e): add headless parameter to wdio configuration refs #618 --- wdio.conf.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wdio.conf.ts b/wdio.conf.ts index a891a4ab4..e17de0a7e 100644 --- a/wdio.conf.ts +++ b/wdio.conf.ts @@ -62,7 +62,10 @@ export const config: Options.Testrunner = { // https://saucelabs.com/platform/platform-configurator // capabilities: [{ - + 'goog:chromeOptions': { + args: ['--headless'], + }, + // maxInstances can get overwritten per capability. So if you have an in-house Selenium // grid with only 5 firefox instances available you can make sure that not more than // 5 instances get started at a time. -- GitLab From 9cf7d68d0b91a24eb9d8c12ec3aac9a97ea72ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 08:44:44 +0200 Subject: [PATCH 236/285] test(e2e): install jscodeshift @wdio/codemod refs #618 --- package-lock.json | 3912 +++++++++++++++++++++++++++++++++++++++++++-- package.json | 4 +- 2 files changed, 3776 insertions(+), 140 deletions(-) diff --git a/package-lock.json b/package-lock.json index cfb1cdd76..98cf0980e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "@ngx-matomo/tracker": "^3.0.0", "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", + "@wdio/codemod": "^0.12.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", "core-js": "^3.23.3", @@ -33,6 +34,7 @@ "he": "^1.2.0", "http-server": "^14.1.1", "jalhyd": "file:./jalhyd", + "jscodeshift": "^0.14.0", "katex": "^0.16.0", "material-design-icons": "^3.0.1", "mathjax": "^3.2.2", @@ -950,9 +952,9 @@ "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -1080,16 +1082,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", + "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -1158,12 +1161,25 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -1181,11 +1197,11 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -1203,18 +1219,31 @@ } }, "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==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "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" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -1257,15 +1286,29 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -1321,9 +1364,9 @@ } }, "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==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "engines": { "node": ">=6.9.0" } @@ -1369,9 +1412,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1701,6 +1744,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz", + "integrity": "sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", @@ -1726,6 +1783,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -1820,6 +1891,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", + "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", @@ -1972,6 +2057,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", + "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-flow": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", @@ -2046,13 +2146,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -2292,6 +2392,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", + "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", @@ -2417,6 +2534,22 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/preset-flow": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.21.4.tgz", + "integrity": "sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-flow-strip-types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -2432,6 +2565,136 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz", + "integrity": "sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-typescript": "^7.21.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.21.0.tgz", + "integrity": "sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/register/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/@babel/runtime": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", @@ -2457,18 +2720,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2477,12 +2740,13 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", "dependencies": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -2490,9 +2754,9 @@ } }, "node_modules/@babel/traverse/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==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2503,9 +2767,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -5225,6 +5489,278 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@wdio/codemod": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@wdio/codemod/-/codemod-0.12.0.tgz", + "integrity": "sha512-OJKr096kz1QbxpbVhwWY/pijBIO5mgj4ZxZhKB5EMXKUYnRXsZukxFCDErbnUv++mgfOAH9EvC1msprjBVfEMg==", + "dependencies": { + "camelcase": "^6.3.0", + "jscodeshift": "^0.13.1", + "lodash.flattendeep": "^4.4.0", + "param-case": "^3.0.4" + } + }, + "node_modules/@wdio/codemod/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@wdio/codemod/node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@wdio/codemod/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/codemod/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@wdio/codemod/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@wdio/codemod/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==" + }, + "node_modules/@wdio/codemod/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@wdio/codemod/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/jscodeshift": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", + "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.4", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@wdio/codemod/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "dependencies": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@wdio/codemod/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wdio/codemod/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@wdio/config": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", @@ -6262,6 +6798,30 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -6311,6 +6871,14 @@ "node": ">=0.10.0" } }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", @@ -6431,6 +6999,14 @@ "node": ">=0.8" } }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ast-transform": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", @@ -6512,6 +7088,17 @@ "node": ">= 4.0.0" } }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.13", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", @@ -6593,6 +7180,14 @@ "ast-types-flow": "0.0.7" } }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/babel-loader": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", @@ -6688,11 +7283,39 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/base-64": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -7455,6 +8078,25 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -7840,6 +8482,96 @@ "node": ">=8" } }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -8055,6 +8787,18 @@ "node": ">=0.8.0" } }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -8141,6 +8885,11 @@ "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", "dev": true }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "node_modules/compress-commons": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", @@ -8360,6 +9109,14 @@ "url": "https://github.com/sponsors/mesqueeb" } }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/copy-webpack-plugin": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", @@ -9649,6 +10406,14 @@ "node": ">=0.10.0" } }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -9745,6 +10510,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", @@ -10249,6 +11026,15 @@ "dottojs": "bin/dot-packer" } }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/dotenv": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", @@ -12085,6 +12871,131 @@ "node": ">= 0.8.0" } }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/expect": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", @@ -12230,6 +13141,18 @@ "optional": true, "peer": true }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -12265,6 +13188,54 @@ "node": ">=0.6.0" } }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -12569,6 +13540,14 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/flow-parser": { + "version": "0.203.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.203.1.tgz", + "integrity": "sha512-Nw2M8MPP/Zb+yhvmPDEjzkCXLtgyWGKXZjAYOVftm+wIf3xd4FKa7nRI9v67rODs0WzxMbPc8IPs/7o/dyxo/Q==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -12597,6 +13576,14 @@ "is-callable": "^1.1.3" } }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -12658,6 +13645,17 @@ "url": "https://www.patreon.com/infusion" } }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -12859,6 +13857,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -13310,6 +14316,64 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/hdr-histogram-js": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", @@ -14014,6 +15078,17 @@ "node": ">= 0.10" } }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -14088,6 +15163,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -14123,6 +15203,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -14138,6 +15229,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -14152,6 +15256,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -14304,14 +15419,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-plain-object/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -14478,6 +15585,14 @@ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -14525,6 +15640,14 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -15264,6 +16387,102 @@ "optional": true, "peer": true }, + "node_modules/jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/jscodeshift/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jscodeshift/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jscodeshift/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==" + }, + "node_modules/jscodeshift/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jscodeshift/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jsdoc-type-pratt-parser": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", @@ -15777,8 +16996,7 @@ "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", @@ -15908,6 +17126,14 @@ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", "dev": true }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -16009,6 +17235,14 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -16024,6 +17258,17 @@ "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", "dev": true }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/marked": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", @@ -16393,6 +17638,18 @@ "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", "dev": true }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -16496,6 +17753,27 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -16636,6 +17914,15 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "optional": true }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -16643,6 +17930,37 @@ "dev": true, "optional": true }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-dir/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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-dir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -17040,6 +18358,84 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "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", @@ -17073,6 +18469,17 @@ "node": ">= 0.4" } }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -17091,6 +18498,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object.values": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", @@ -17498,6 +18916,15 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -17609,6 +19036,14 @@ "node": ">= 0.8" } }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -17798,6 +19233,14 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "engines": { + "node": ">= 6" + } + }, "node_modules/piscina": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", @@ -17873,6 +19316,14 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -19501,6 +20952,39 @@ "node": ">=8.10.0" } }, + "node_modules/recast": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "dependencies": { + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/recast/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==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/recursive-readdir": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", @@ -19569,6 +21053,18 @@ "@babel/runtime": "^7.8.4" } }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", @@ -19643,6 +21139,22 @@ "jsesc": "bin/jsesc" } }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/replace-in-file": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", @@ -19926,6 +21438,12 @@ "node": ">=8" } }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, "node_modules/resolve-url-loader": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", @@ -19998,6 +21516,14 @@ "node": ">=8" } }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -20151,6 +21677,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dependencies": { + "ret": "~0.1.10" + } + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -20700,6 +22234,39 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "devOptional": true }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -20868,6 +22435,186 @@ "npm": ">= 3.0.0" } }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -20942,6 +22689,19 @@ "webpack": "^5.72.1" } }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -20959,6 +22719,12 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -21049,6 +22815,17 @@ "node": "*" } }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -21234,6 +23011,94 @@ "node": ">= 0.8.0" } }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/static-module": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", @@ -21785,6 +23650,17 @@ } } }, + "node_modules/temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -21795,6 +23671,56 @@ "fs-extra": "^10.0.0" } }, + "node_modules/temp/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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/temp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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/temp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/terser": { "version": "5.14.2", "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", @@ -22021,6 +23947,28 @@ "node": ">=4" } }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -22030,6 +23978,20 @@ "node": ">=6" } }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -22580,6 +24542,28 @@ "node": ">= 0.8.0" } }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -22619,6 +24603,50 @@ "node": ">= 0.8" } }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "engines": { + "node": ">=0.10.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", @@ -22652,6 +24680,12 @@ "punycode": "^2.1.0" } }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, "node_modules/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", @@ -22669,6 +24703,14 @@ "node": ">=4" } }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", @@ -23896,6 +25938,16 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "node_modules/ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", @@ -24751,9 +26803,9 @@ "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "requires": { "@babel/highlight": "^7.18.6" } @@ -24850,16 +26902,17 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", + "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" } }, @@ -24906,12 +26959,24 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "dependencies": { + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + } } }, "@babel/helper-hoist-variables": { @@ -24923,11 +26988,11 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "requires": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" } }, "@babel/helper-module-imports": { @@ -24939,18 +27004,30 @@ } }, "@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==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "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/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + }, + "dependencies": { + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + } } }, "@babel/helper-optimise-call-expression": { @@ -24978,15 +27055,28 @@ } }, "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "dependencies": { + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + } } }, "@babel/helper-simple-access": { @@ -25024,9 +27114,9 @@ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@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==" + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==" }, "@babel/helper-wrap-function": { "version": "7.19.0", @@ -25060,9 +27150,9 @@ } }, "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==" + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -25266,6 +27356,14 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, + "@babel/plugin-syntax-flow": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz", + "integrity": "sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, "@babel/plugin-syntax-import-assertions": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", @@ -25282,6 +27380,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-jsx": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -25346,6 +27452,14 @@ "@babel/helper-plugin-utils": "^7.14.5" } }, + "@babel/plugin-syntax-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", + "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, "@babel/plugin-transform-arrow-functions": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", @@ -25438,6 +27552,15 @@ "@babel/helper-plugin-utils": "^7.18.6" } }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", + "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-flow": "^7.18.6" + } + }, "@babel/plugin-transform-for-of": { "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", @@ -25482,13 +27605,13 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" } }, "@babel/plugin-transform-modules-systemjs": { @@ -25631,6 +27754,17 @@ "@babel/helper-plugin-utils": "^7.18.9" } }, + "@babel/plugin-transform-typescript": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", + "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + } + }, "@babel/plugin-transform-unicode-escapes": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", @@ -25737,6 +27871,16 @@ } } }, + "@babel/preset-flow": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.21.4.tgz", + "integrity": "sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-flow-strip-types": "^7.21.0" + } + }, "@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -25749,6 +27893,99 @@ "esutils": "^2.0.2" } }, + "@babel/preset-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz", + "integrity": "sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-typescript": "^7.21.3" + } + }, + "@babel/register": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.21.0.tgz", + "integrity": "sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==", + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, "@babel/runtime": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", @@ -25768,36 +28005,37 @@ } }, "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", "requires": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" } }, "@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==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -25807,9 +28045,9 @@ } }, "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -27816,6 +30054,217 @@ } } }, + "@wdio/codemod": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@wdio/codemod/-/codemod-0.12.0.tgz", + "integrity": "sha512-OJKr096kz1QbxpbVhwWY/pijBIO5mgj4ZxZhKB5EMXKUYnRXsZukxFCDErbnUv++mgfOAH9EvC1msprjBVfEMg==", + "requires": { + "camelcase": "^6.3.0", + "jscodeshift": "^0.13.1", + "lodash.flattendeep": "^4.4.0", + "param-case": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "requires": { + "tslib": "^2.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.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==", + "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==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "jscodeshift": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", + "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", + "requires": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.4", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "requires": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, "@wdio/config": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", @@ -28668,6 +31117,21 @@ } } }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -28705,6 +31169,11 @@ "optional": true, "peer": true }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" + }, "array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", @@ -28794,6 +31263,11 @@ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "optional": true }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" + }, "ast-transform": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", @@ -28858,6 +31332,11 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, "autoprefixer": { "version": "10.4.13", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", @@ -28911,6 +31390,12 @@ "ast-types-flow": "0.0.7" } }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "requires": {} + }, "babel-loader": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", @@ -28985,6 +31470,30 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, "base-64": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", @@ -29601,6 +32110,22 @@ "unique-filename": "^1.1.1" } }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, "cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -29876,6 +32401,78 @@ "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", "dev": true }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -30036,6 +32633,15 @@ "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==", "dev": true }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -30104,6 +32710,11 @@ "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", "dev": true }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "compress-commons": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", @@ -30286,6 +32897,11 @@ "is-what": "^3.14.1" } }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" + }, "copy-webpack-plugin": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", @@ -31288,6 +33904,11 @@ "optional": true, "peer": true }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -31360,6 +33981,15 @@ "object-keys": "^1.1.1" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", @@ -31759,6 +34389,15 @@ "integrity": "sha512-/nt74Rm+PcfnirXGEdhZleTwGC2LMnuKTeeTIlI82xb5loBBoXNYzr2ezCroPSMtilK8EZIfcNZwOcHN+ib1Lg==", "dev": true }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "dotenv": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", @@ -33071,6 +35710,107 @@ "optional": true, "peer": true }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, "expect": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", @@ -33192,6 +35932,15 @@ "optional": true, "peer": true }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -33220,6 +35969,44 @@ } } }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, "extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -33474,6 +36261,11 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "flow-parser": { + "version": "0.203.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.203.1.tgz", + "integrity": "sha512-Nw2M8MPP/Zb+yhvmPDEjzkCXLtgyWGKXZjAYOVftm+wIf3xd4FKa7nRI9v67rODs0WzxMbPc8IPs/7o/dyxo/Q==" + }, "follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -33488,6 +36280,11 @@ "is-callable": "^1.1.3" } }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -33527,6 +36324,14 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "requires": { + "map-cache": "^0.2.2" + } + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -33673,6 +36478,11 @@ "get-intrinsic": "^1.1.1" } }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -34025,6 +36835,53 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "hdr-histogram-js": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", @@ -34536,6 +37393,14 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -34589,6 +37454,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -34612,6 +37482,14 @@ "has": "^1.0.3" } }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -34621,11 +37499,29 @@ "has-tostringtag": "^1.0.0" } }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -34727,13 +37623,6 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - } } }, "is-regex": { @@ -34851,6 +37740,11 @@ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -34886,6 +37780,11 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -35500,6 +38399,77 @@ "optional": true, "peer": true }, + "jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "requires": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.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==", + "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==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.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==", + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "jsdoc-type-pratt-parser": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", @@ -35908,8 +38878,7 @@ "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" }, "lodash.isplainobject": { "version": "4.0.6", @@ -36007,6 +38976,14 @@ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", "dev": true }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -36083,6 +39060,11 @@ "ssri": "^9.0.0" } }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -36095,6 +39077,14 @@ "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", "dev": true }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "requires": { + "object-visit": "^1.0.0" + } + }, "marked": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", @@ -36369,6 +39359,15 @@ "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", "dev": true }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -36453,6 +39452,24 @@ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -36561,6 +39578,15 @@ } } }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -36568,6 +39594,33 @@ "dev": true, "optional": true }, + "node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "requires": { + "minimatch": "^3.0.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -36870,6 +39923,67 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "devOptional": true }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -36891,6 +40005,14 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "requires": { + "isobject": "^3.0.0" + } + }, "object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -36903,6 +40025,14 @@ "object-keys": "^1.1.1" } }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "requires": { + "isobject": "^3.0.1" + } + }, "object.values": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", @@ -37198,6 +40328,15 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -37291,6 +40430,11 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" + }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -37432,6 +40576,11 @@ "pinkie": "^2.0.0" } }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + }, "piscina": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", @@ -37495,6 +40644,11 @@ } } }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==" + }, "postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -38583,6 +41737,32 @@ "picomatch": "^2.2.1" } }, + "recast": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "requires": { + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "dependencies": { + "ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "requires": { + "tslib": "^2.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, "recursive-readdir": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", @@ -38644,6 +41824,15 @@ "@babel/runtime": "^7.8.4" } }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, "regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", @@ -38699,6 +41888,16 @@ } } }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" + }, "replace-in-file": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", @@ -38911,6 +42110,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" + }, "resolve-url-loader": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", @@ -38975,6 +42179,11 @@ "signal-exit": "^3.0.2" } }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -39088,6 +42297,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "requires": { + "ret": "~0.1.10" + } + }, "safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -39521,6 +42738,32 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "devOptional": true }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -39656,6 +42899,151 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -39707,6 +43095,18 @@ "source-map-js": "^1.0.2" } }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -39723,6 +43123,11 @@ } } }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -39806,6 +43211,14 @@ "through": "2" } }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, "split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -39945,6 +43358,76 @@ } } }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, "static-module": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", @@ -40361,6 +43844,54 @@ } } }, + "temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "requires": { + "rimraf": "~2.6.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, "temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -40542,12 +44073,41 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -40960,6 +44520,24 @@ "qs": "^6.4.0" } }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -40993,6 +44571,42 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==" + } + } + }, "update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -41010,6 +44624,11 @@ "punycode": "^2.1.0" } }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" + }, "url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", @@ -41024,6 +44643,11 @@ "prepend-http": "^2.0.0" } }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, "utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", @@ -41932,6 +45556,16 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", diff --git a/package.json b/package.json index 5f9625d2d..faa6dfc19 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "@ngx-matomo/tracker": "^3.0.0", "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", - "ng2-charts": "^4.1.1", + "@wdio/codemod": "^0.12.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", "core-js": "^3.23.3", @@ -64,10 +64,12 @@ "he": "^1.2.0", "http-server": "^14.1.1", "jalhyd": "file:./jalhyd", + "jscodeshift": "^0.14.0", "katex": "^0.16.0", "material-design-icons": "^3.0.1", "mathjax": "^3.2.2", "mermaid": "^9.1.3", + "ng2-charts": "^4.1.1", "ngx-markdown": "^14.0.1", "ngx-material-file-input": "^4.0.0", "ngx-webstorage-service": "^5.0.0", -- GitLab From 994f1dcd620f3ae471ac3effdc1f2db6593d3bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 09:05:32 +0200 Subject: [PATCH 237/285] test(e2e): transform e2e folder refs #618 --- e2e/app.e2e-spec.ts | 3 +- e2e/app.po.ts | 4 +- e2e/bief-empty-fields.e2e-spec.ts | 5 +- e2e/calc-all-examples.e2e-spec.ts | 21 +- e2e/calculate-all-params.e2e-spec.ts | 7 +- e2e/calculate-button-validation.e2e-spec.ts | 69 ++++--- e2e/calculate-linked-params.e2e-spec.ts | 45 +++-- e2e/calculator.po.ts | 179 +++++++++--------- e2e/check-translations.e2e-spec.ts | 9 +- e2e/cloisons.e2e-spec.ts | 13 +- e2e/clone-all-calc.e2e-spec.ts | 7 +- e2e/clone-calc.e2e-spec.ts | 29 ++- e2e/compute-reset-chained-links.e2e-spec.ts | 49 +++-- e2e/cote-amont-aval-bief.e2e-spec.ts | 37 ++-- e2e/courbe-remous-empty-fields.e2e-spec.ts | 5 +- e2e/diagramme-modules.e2e-spec.ts | 13 +- e2e/documentation.e2e-spec.ts | 30 ++- e2e/duplicate-results.e2e-spec.ts | 9 +- e2e/examples-empty-fields.e2e-spec.ts | 61 +++--- e2e/lechapt-calmon.e2e-spec.ts | 21 +- e2e/link-parallel-devices.e2e-spec.ts | 9 +- e2e/link-to-deleted-module.e2e-spec.ts | 25 ++- e2e/linked-parameter-section-type.e2e-spec.ts | 7 +- e2e/list.e2e-spec.ts | 3 +- e2e/list.po.ts | 20 +- e2e/load-linked-params.e2e-spec.ts | 21 +- e2e/load-malformed-files.e2e-spec.ts | 27 ++- e2e/load-save-session.e2e-spec.ts | 59 +++--- e2e/navbar.po.ts | 42 ++-- e2e/navigate-through-calculators.e2e-spec.ts | 3 +- e2e/notes.e2e-spec.ts | 55 +++--- e2e/ouvrages-empty-fields.e2e-spec.ts | 35 ++-- e2e/pab-cloisons-empty-fields.e2e-spec.ts | 19 +- e2e/pab.e2e-spec.ts | 121 ++++++------ e2e/parallel-structures.e2e-spec.ts | 5 +- e2e/predam-empty-fields.e2e-spec.ts | 33 ++-- e2e/predam-log.e2e-spec.ts | 7 +- e2e/preferences.e2e-spec.ts | 23 ++- e2e/preferences.po.ts | 31 ++- e2e/pressure-loss-empty-fields.e2e-spec.ts | 7 +- e2e/pressure-loss.e2e-spec.ts | 15 +- e2e/regime-uniforme-empty-fields.e2e-spec.ts | 5 +- e2e/remous.e2e-spec.ts | 35 ++-- e2e/reset-param-mode.e2e-spec.ts | 39 ++-- e2e/reset-results.e2e-spec.ts | 27 ++- e2e/section-empty-fields.e2e-spec.ts | 5 +- e2e/select-default-value.e2e-spec.ts | 9 +- e2e/sidenav.po.ts | 31 ++- e2e/solveur.e2e-spec.ts | 127 ++++++------- e2e/translation.e2e-spec.ts | 27 ++- e2e/util.po.ts | 12 +- e2e/valeurs-erronees.e2e-spec.ts | 23 ++- e2e/variable-param-cancel.e2e-spec.ts | 7 +- 53 files changed, 734 insertions(+), 796 deletions(-) diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts index 660387982..c96c25ca8 100644 --- a/e2e/app.e2e-spec.ts +++ b/e2e/app.e2e-spec.ts @@ -1,5 +1,4 @@ import { AppPage } from "./app.po"; -import { browser } from "protractor"; /** * Start app @@ -13,7 +12,7 @@ describe("ngHyd − start page", () => { it("when app starts, user should be redirected to /list page", async () => { await page.navigateTo(); - const url = await browser.driver.getCurrentUrl(); + const url = await browser.getUrl(); expect(url).toContain("/list"); }); }); diff --git a/e2e/app.po.ts b/e2e/app.po.ts index 308423637..494a18afd 100644 --- a/e2e/app.po.ts +++ b/e2e/app.po.ts @@ -1,7 +1,5 @@ -import { browser } from "protractor"; - export class AppPage { navigateTo() { - return browser.get("/"); + return browser.url("/"); } } diff --git a/e2e/bief-empty-fields.e2e-spec.ts b/e2e/bief-empty-fields.e2e-spec.ts index 391c45238..bf33f257a 100644 --- a/e2e/bief-empty-fields.e2e-spec.ts +++ b/e2e/bief-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -21,14 +20,14 @@ describe("Check fields are empty in 'up/downstream elevations of a reach' calcul // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("", async () => { // open "up/downstream elevations of a reach" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(21); - await browser.sleep(200); + await browser.pause(200); expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], [true, true, true, true, true, true, true, true, true, true])) diff --git a/e2e/calc-all-examples.e2e-spec.ts b/e2e/calc-all-examples.e2e-spec.ts index 570e5f19c..8f228a167 100644 --- a/e2e/calc-all-examples.e2e-spec.ts +++ b/e2e/calc-all-examples.e2e-spec.ts @@ -1,6 +1,5 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; @@ -31,7 +30,7 @@ describe("ngHyd − example sessions −", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); // for each calculator let lastExampleFound = true; @@ -40,29 +39,29 @@ describe("ngHyd − example sessions −", () => { if (i == 0) { // start page await navbar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); } else { // empty session await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sideNav.clickNewSessionButton(); - await browser.sleep(1000); + await browser.pause(1000); } - const examples = await element.all(by.css("#examples-list .load-example")); - await browser.sleep(200); + const examples = await $$("#examples-list .load-example"); + await browser.pause(200); if (examples.length > i) { // click example #i - await examples[i].click(); - await browser.sleep(200); + await (await examples.i).click(); + await browser.pause(200); const nbModules = await navbar.getCalculatorEntriesCount(); - await browser.sleep(200); + await browser.pause(200); for (let j = 0; j < nbModules; j++) { // select module await navbar.openNthCalculator(j); - await browser.sleep(50); + await browser.pause(50); // calculate module await calcPage.getCalculateButton().click(); // check results diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index f19c2f7d0..83882f4e7 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -2,7 +2,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; -import { browser, element, by } from "protractor"; import { testedCalcTypes } from "./tested_calctypes"; import { scrollPageToTop } from "./util.po"; @@ -25,7 +24,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); // increase timeout to avoid "Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL" message jasmine.DEFAULT_TIMEOUT_INTERVAL = 10 * 60 * 1000; // 10 min @@ -63,7 +62,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { if (ct === 30 && i > 0) { // prevents "Element is not clickable at point" await scrollPageToTop(); - const inputLink = element(by.css("#pb-data-results-selector .drs-item a")); + const inputLink = $("#pb-data-results-selector .drs-item a"); await inputLink.click(); } // grab input again because calculating the module just refreshed all the fieldsets @@ -71,7 +70,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // click "calc" mode button for this parameter await calcPage.setParamMode(input, "cal"); // check that only 1 button is in "calc" state - const nbParamsCalc = await calcPage.getCheckedCalcModeButtons().count(); + const nbParamsCalc = await calcPage.getCheckedCalcModeButtons().length; expect(nbParamsCalc).toBe(1); // check that "compute" button is active const calcButton = await calcPage.checkCalcButtonEnabled(true); diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index 0f472f43e..ee17d4f6d 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; describe("Calculate button - ", () => { @@ -21,46 +20,46 @@ describe("Calculate button - ", () => { await prefPage.navigateTo(); // disable evil option "empty fields on module creation" await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("check button status only depends on calculator (no link between calculators)", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open PAB: chute calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open PAB: dimensions await listPage.clickMenuEntryForCalcType(5); - await browser.sleep(200); + await browser.pause(200); // fill width field with invalid data const inputW = calcPage.getInputById("W"); - await inputW.clear(); - await browser.sleep(20); - await inputW.sendKeys("-1"); - await browser.sleep(200); + await inputW.clearValue(); + await browser.pause(20); + await inputW.setValue("-1"); + await browser.pause(200); // check that "compute" button is inactive await calcPage.checkCalcButtonEnabled(false); // back to PAB: chute await navBar.clickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // check that "compute" button is active await calcPage.checkCalcButtonEnabled(true); // back to PAB: dimensions await navBar.clickCalculatorTab(1); - await browser.sleep(200); + await browser.pause(200); // check that "compute" button is inactive await calcPage.checkCalcButtonEnabled(false); @@ -70,25 +69,25 @@ describe("Calculate button - ", () => { it("invalid data in Q input", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open prébarrages calculator await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // Q input - const inputQ = element(by.id("Q")); - await inputQ.clear(); - await browser.sleep(200); - await inputQ.sendKeys("-1"); - await browser.sleep(200); + const inputQ = $("#Q"); + await inputQ.clearValue(); + await browser.pause(200); + await inputQ.setValue("-1"); + await browser.pause(200); await calcPage.checkCalcButtonEnabled(false); // upstream item // look for g element with id starting by "flowchart-amont-" // Mermaid changed the way ids are generated, it preprends "flowchart-" and appends a number to the id given in the graph description - const upstream = element(by.css("g[id^='flowchart-amont-']")); + const upstream = $("g[id^='flowchart-amont-']"); // should be displayed in error expect(await upstream.getAttribute('class')).toContain("node-highlighted-error"); // upstream item is now selected by default (was 'node-error') }); @@ -96,28 +95,28 @@ describe("Calculate button - ", () => { it("add basin, invalid data in Q input", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open prébarrages calculator await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // "add basin" button - const addBasinBtn = element(by.id("add-basin")); + const addBasinBtn = $("#add-basin"); await addBasinBtn.click(); - await browser.sleep(200); + await browser.pause(200); // upstream item - const upstream = element(by.css("g[id^='flowchart-amont-']")); // Mermaid generated id + const upstream = $("g[id^='flowchart-amont-']"); // Mermaid generated id await upstream.click(); - await browser.sleep(200); + await browser.pause(200); // invalid data in Q input - const inputQ = element(by.id("Q")); - await inputQ.clear(); - await browser.sleep(200); - await inputQ.sendKeys("-1"); - await browser.sleep(200); + const inputQ = $("#Q"); + await inputQ.clearValue(); + await browser.pause(200); + await inputQ.setValue("-1"); + await browser.pause(200); // calculate button disabled ? await calcPage.checkCalcButtonEnabled(false); @@ -126,10 +125,10 @@ describe("Calculate button - ", () => { expect(await upstream.getAttribute('class')).toContain("node-highlighted-error"); // upstream item is now selected by default (was 'node-error') // valid data in Q input - await inputQ.clear(); - await browser.sleep(200); - await inputQ.sendKeys("1"); - await browser.sleep(200); + await inputQ.clearValue(); + await browser.pause(200); + await inputQ.setValue("1"); + await browser.pause(200); // calculate button still disabled ? (the basin is not connected to anything) await calcPage.checkCalcButtonEnabled(false); diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index f87d9b168..0f26d5a0d 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -2,7 +2,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser, by } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; @@ -40,7 +39,7 @@ describe("ngHyd − calculate with linked parameters", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); async function computeAndCheckPresenceOfResults() { @@ -231,12 +230,12 @@ describe("ngHyd − calculate with linked parameters", () => { // load session file await navBar.clickNewCalculatorButton(); await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-multivar-link.json"); - await browser.sleep(500); - expect(await navBar.getAllCalculatorTabs().count()).toBe(2); + await browser.pause(500); + expect(await navBar.getAllCalculatorTabs().length).toBe(2); // calculate await navBar.clickCalculatorTab(0); @@ -249,16 +248,16 @@ describe("ngHyd − calculate with linked parameters", () => { // check that there are 6 parameters columns in the variated results table : // Q, Z2, Z1, + 4 for device #1 - expect(await calcPage.getAllVariatedResultsTableHeaders().count()).toBe(7); + expect(await calcPage.getAllVariatedResultsTableHeaders().length).toBe(7); // check that number of rows in the variated results table equals number of variated values const varRows = calcPage.getAllVariatedResultsRows(); - const nbRows = await varRows.count(); + const nbRows = await varRows.length; expect(nbRows).toBe(191); // boundaries are included // check that all parameters have values for all iterations (Z2 might miss some if repeat strategy is not applied) const lastRow = varRows.get(nbRows - 1); - const tds = await lastRow.all(by.css("td")); + const tds = await lastRow.$$("td"); tds.forEach((td) => { expect(td.getText()).not.toBe(""); }); @@ -268,16 +267,16 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); // load session await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-pab-chain-nghyd-329.json"); - await browser.sleep(200); - expect(await navBar.getAllCalculatorTabs().count()).toBe(3); + await browser.pause(200); + expect(await navBar.getAllCalculatorTabs().length).toBe(3); // calculate PAB-Dimensions await navBar.clickCalculatorTab(2); - await browser.sleep(200); + await browser.pause(200); // click "compute" button const calcButton = calcPage.getCalculateButton(); await calcButton.click(); @@ -293,11 +292,11 @@ describe("ngHyd − calculate with linked parameters", () => { // click PAB-Nombre tab await navBar.clickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // go back to PAB-Dimensions await navBar.clickCalculatorTab(2); - await browser.sleep(200); + await browser.pause(200); // check that ERR is not present in Volume line of results table frt = calcPage.getFixedResultsTable(); @@ -310,9 +309,9 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − a link target parameter should not be able to link to another parameter", async () => { // create 1st PAB-Chute await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // upstream water level should not have link mode (only one calculator) const Z1_1 = calcPage.getInputById("Z1"); @@ -320,20 +319,20 @@ describe("ngHyd − calculate with linked parameters", () => { // create 2nd PAB-Chute await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // back to 1st calculator await navBar.clickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // upstream water level should have link mode (now there are 2 calculators) expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(true); // back to 2nd calculator await navBar.clickCalculatorTab(1); - await browser.sleep(200); + await browser.pause(200); // link upstream water level in 2nd calculator to upstream water level in 1st one const Z1_2 = calcPage.getInputById("Z1"); @@ -341,7 +340,7 @@ describe("ngHyd − calculate with linked parameters", () => { // back to 1st calculator await navBar.clickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // upstream water level should not have link mode (already a link target) expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(false); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index d7552190a..7e2074d14 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -1,14 +1,13 @@ -import { by, element, ElementFinder, browser, protractor, ElementArrayFinder, Key } from "protractor"; import { scrollPageToTop, scrollToElement } from "./util.po"; export class CalculatorPage { getInputLabels() { - return element.all(by.css("ngparam-input input:not([disabled]) label")); + return $$("ngparam-input input:not([disabled]) label"); } getParamInputs() { - return element.all(by.css("ngparam-input input.form-control")); + return $$("ngparam-input input.form-control"); } async getParamInputsHavingCalcMode() { @@ -23,28 +22,28 @@ export class CalculatorPage { } getHeader1() { - return element(by.css("h1")); + return $("h1"); } /** * return all selects in the calculator which id is in the form "select_*" */ getAllCalculatorSelects(): ElementArrayFinder { - return element.all(by.css("mat-select[id^=select_]")); // all mat-select with id starting with "select_" + return $$("mat-select[id^=select_]"); // all mat-select with id starting with "select_" } /** * get the option count of a select */ async getMatselectOptionCount(select: string | ElementFinder) { - const sel = select instanceof ElementFinder ? select : element(by.id(select)); + const sel = select instanceof ElementFinder ? select : $(`#${select}`); await scrollToElement(sel); - if (await sel.isPresent() && await sel.isDisplayed()) { + if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); - const options = element.all(by.css(".cdk-overlay-container mat-option")); - await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown - return await options.count(); + const options = $$(".cdk-overlay-container mat-option"); + // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown + return await options.length; } } @@ -52,19 +51,19 @@ export class CalculatorPage { * get the text of the all given select options */ async getMatselectOptionsText(select: string | ElementFinder): Promise<string[]> { - const sel = select instanceof ElementFinder ? select : element(by.id(select)); + const sel = select instanceof ElementFinder ? select : $(`#${select}`); await scrollToElement(sel); - if (await sel.isPresent() && await sel.isDisplayed()) { + if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); - const options = element.all(by.css(".cdk-overlay-container mat-option span")); + const options = $$(".cdk-overlay-container mat-option span"); let res = []; - const nopt = await options.count(); + const nopt = await options.length; for (let o = 0; o < nopt; o++) { const opt = options.get(o); res.push(await opt.getText()) } - await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown + // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown return res; } @@ -75,7 +74,7 @@ export class CalculatorPage { */ async getSelectCurrentOption(select: ElementFinder): Promise<ElementFinder> { const id = await select.getAttribute("id"); - return element(by.css("mat-select#" + id + " div[id^=mat-select-value-]")) + return $("mat-select#" + id + " div[id^=mat-select-value-]"); } /** @@ -83,25 +82,25 @@ export class CalculatorPage { */ async getMatselectCurrentOptionText(select: ElementFinder): Promise<string> { const currentOption = await this.getSelectCurrentOption(select); - return await currentOption.element(by.css("span span")).getText(); + return await currentOption.$("span span").getText(); } getSelectById(id: string) { - return element(by.id(id)); + return $(`#${id}`); } async isMatSelectPresent(id: string) { - const sel: ElementFinder = element(by.css("mat-select#" + id)); - return await sel.isPresent(); + const sel: ElementFinder = $("mat-select#" + id); + return await sel.isExisting(); } async getSelectValueText(select: ElementFinder) { - return await select.element(by.css(".mat-select-value-text > span")).getText(); + return await select.$(".mat-select-value-text > span").getText(); } async isSelectEmpty(select: ElementFinder) { try { - const text = select.element(by.css(".mat-select-value-text > span")); + const text = select.$(".mat-select-value-text > span"); await text.getAttribute("outerHTML"); // await anything trigger the error return false; } catch (e) { // should be NoSuchElementError @@ -110,51 +109,51 @@ export class CalculatorPage { } getInputById(id: string) { - return element(by.id(id)); + return $(`#${id}`); } getSaveSessionButton() { - return element(by.css("dialog-save-session button[type=submit]")); + return $("dialog-save-session button[type=submit]"); } getCalculateButton() { - return element(by.css("button#trigger-calculate")); + return $("button#trigger-calculate"); } getGeneratePabButton() { - return element(by.css("button#generate-pab")); + return $("button#generate-pab"); } getCheckedCalcModeButtons() { - return element.all(by.css(`mat-button-toggle.radio_cal[ng-reflect-checked="true"]`)); + return $$(`mat-button-toggle.radio_cal[ng-reflect-checked="true"]`); } getAddStructureButton() { - return element(by.css("fieldset-container.structure-fieldsetcontainer .hyd-window-btns button.add-structure")); + return $("structure-fieldset-container .hyd-window-btns button.add-structure"); } getCopyStructureButton() { - return element(by.css("fieldset-container.structure-fieldsetcontainer .hyd-window-btns button.copy-structure")); + return $("structure-fieldset-container .hyd-window-btns button.copy-structure"); } getAllLinkButtons() { - return element.all(by.css("mat-button-toggle.radio_link")); + return $$("mat-button-toggle.radio_link"); } getPabResultsTable() { - return element(by.css(".pab-results-table-inner-container table")); + return $(".pab-results-table-inner-container table"); } getVariatedResultsTable() { - return element(by.css(".var-results-inner-container table")); + return $(".var-results-inner-container table"); } getAllVariatedResultsTableHeaders() { - return element.all(by.css("fixedvar-results var-results table thead th")); + return $$("fixedvar-results var-results table thead th"); } getAllVariatedResultsRows() { - return element.all(by.css("fixedvar-results var-results table tbody tr")); + return $$("fixedvar-results var-results table tbody tr"); } // scrollTo(elt: ElementFinder) { @@ -164,42 +163,42 @@ export class CalculatorPage { // } getFixedResultsTable() { - return element(by.css(".fixed-results-inner-container table")); + return $(".fixed-results-inner-container table"); } getAllFixedResultsRows() { - return element.all(by.css("fixed-results table tbody tr")); + return $$("fixed-results table tbody tr"); } /** return nth <tr> of given <table>, starting at 1 */ getNthRow(table: ElementFinder, n: number) { - return table.element(by.css("tbody > tr:nth-of-type(" + n + ")")); + return table.$("tbody > tr:nth-of-type(" + n + ")"); } /** return nth <td> of given <tr>, starting at 1 */ getNthColumn(tr: ElementFinder, n: number) { - return tr.element(by.css("td:nth-of-type(" + n + ")")); + return tr.$("td:nth-of-type(" + n + ")"); } async isNgParamPresent(id: string) { - const inp: ElementFinder = element(by.css("ngparam-input input#" + id)); - return await inp.isPresent(); + const inp: ElementFinder = $("ngparam-input input#" + id); + return await inp.isExisting(); } async inputHasCalcModeButton(input: ElementFinder) { // get parent (div.container) const container = await this.findParentContainer(input); // find radio buttons - const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_cal > button")); - return await button.isPresent(); + const button: ElementFinder = container.$("mat-button-toggle.radio_cal > button"); + return await button.isExisting(); } async inputHasLinkModeButton(input: ElementFinder) { // get parent (div.container) const container = await this.findParentContainer(input); // find radio buttons - const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_link > button")); - return await button.isPresent(); + const button: ElementFinder = container.$("mat-button-toggle.radio_link > button"); + return await button.isExisting(); } /** @@ -209,8 +208,8 @@ export class CalculatorPage { // get parent (div.container) const container = await this.findParentContainer(input); // find fixed radio button - const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_fix")); - return await button.getAttribute("ng-reflect-checked") === "true"; + const button: ElementFinder = container.$("mat-button-toggle.radio_fix"); + return (await button.getAttribute("ng-reflect-checked")) === "true"; } /** @@ -220,8 +219,8 @@ export class CalculatorPage { // get parent (div.container) const container = await this.findParentContainer(input); // find calc radio button - const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_cal")); - return await button.getAttribute("ng-reflect-checked") === "true"; + const button: ElementFinder = container.$("mat-button-toggle.radio_cal"); + return (await button.getAttribute("ng-reflect-checked")) === "true"; } /** @@ -231,33 +230,29 @@ export class CalculatorPage { // get parent (div.container) const container = await this.findParentContainer(input); // find calc radio button - const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_link")); - return await button.getAttribute("ng-reflect-checked") === "true"; + const button: ElementFinder = container.$("mat-button-toggle.radio_link"); + return (await button.getAttribute("ng-reflect-checked")) === "true"; } async hasResults() { - return ( - await this.presentAndVisible("fixedvar-results fixed-results > .fixed-results-container") - || - await this.presentAndVisible("fixedvar-results results-chart > chart-results-container") - || - await this.presentAndVisible("section-results fixed-results > .fixed-results-container") - || - await this.presentAndVisible("remous-results #main-chart") - || - await this.presentAndVisible("pab-results pab-results-table") - || - await this.presentAndVisible("pb-results pb-results-table") - || - await this.presentAndVisible("macrorugo-compound-results macrorugo-compound-results-table") - || - await this.presentAndVisible("jet-results .fixed-results-container") - ); + return ((await this.presentAndVisible("fixedvar-results fixed-results > .fixed-results-container")) + || + (await this.presentAndVisible("fixedvar-results results-chart > chart-results-container")) + || + (await this.presentAndVisible("section-results fixed-results > .fixed-results-container")) + || + (await this.presentAndVisible("remous-results #main-chart")) + || + (await this.presentAndVisible("pab-results pab-results-table")) + || + (await this.presentAndVisible("pb-results pb-results-table")) + || + (await this.presentAndVisible("macrorugo-compound-results macrorugo-compound-results-table")) || (await this.presentAndVisible("jet-results .fixed-results-container"))); } async presentAndVisible(selector: string): Promise<boolean> { - const elt = element(by.css(selector)); - return await elt.isPresent() && await elt.isDisplayed(); + const elt = $(selector); + return (await elt.isExisting()) && (await elt.isDisplayed()); } /** @@ -274,13 +269,13 @@ export class CalculatorPage { invalidValues.push(""); } - const nbCols = await table.all(by.css("thead th")).count(); - const rows = await table.all(by.css("tbody tr")); + const nbCols = await table.$$("thead th").length; + const rows = await table.$$("tbody tr"); for (const row of rows) { for (let i = 0; i < nbCols; i++) { // get i_th column of n_th row - const val = await row.element(by.css("td:nth-of-type(" + (i + 1) + ")")).getText(); + const val = await row.$("td:nth-of-type(" + (i + 1) + ")").getText(); // console.log(`TABLE VAL ${n}/${i}=>`, val); ok = ok && !invalidValues.includes(val); } @@ -299,38 +294,38 @@ export class CalculatorPage { ok = true; // check fixed results const frt = this.getFixedResultsTable(); - if (await frt.isPresent() && await frt.isDisplayed()) { - ok = ok && await this.allRowsHaveValidResults(frt); + if ((await frt.isExisting()) && (await frt.isDisplayed())) { + ok = ok && (await this.allRowsHaveValidResults(frt)); } // check variated results const vrt = this.getVariatedResultsTable(); - if (await vrt.isPresent() && await vrt.isDisplayed()) { - ok = ok && await this.allRowsHaveValidResults(vrt); + if ((await vrt.isExisting()) && (await vrt.isDisplayed())) { + ok = ok && (await this.allRowsHaveValidResults(vrt)); } // check PAB results const prt = this.getPabResultsTable(); - if (await prt.isPresent() && await prt.isDisplayed()) { - ok = ok && await this.allRowsHaveValidResults(prt, true); + if ((await prt.isExisting()) && (await prt.isDisplayed())) { + ok = ok && (await this.allRowsHaveValidResults(prt, true)); } } return ok; } async hasLog() { - return await this.nbLogEntries() > 0; + return (await this.nbLogEntries()) > 0; } async nbLogEntries() { - return await element.all(by.css("log-entry")).count(); + return await $$("log-entry").length; } async clickSaveCalcButton() { await scrollPageToTop(); - return await element(by.css("#save-calc")).click(); + return await $("#save-calc").click(); } async clickCloneCalcButton() { - const cloneButton = element(by.css("#clone-calc")); + const cloneButton = $("#clone-calc"); return await cloneButton.click(); } @@ -344,8 +339,8 @@ export class CalculatorPage { // find parent element of elt having class "container" async findParentContainer(elt: ElementFinder): Promise<ElementFinder> { let i = 8; // garde fous - while ((await elt.getAttribute("class") !== "container") && (i >= 0)) { - elt = elt.element(by.xpath("..")); + while (((await elt.getAttribute("class")) !== "container") && (i >= 0)) { + elt = elt.$(".."); i--; } return elt; @@ -359,15 +354,15 @@ export class CalculatorPage { // get parent (div.container) const container = await this.findParentContainer(elt); // find radio buttons - const button = container.element(by.css("mat-button-toggle.radio_" + mode + " > button")); + const button = container.$("mat-button-toggle.radio_" + mode + " > button"); await scrollPageToTop(); // sometimes button slides behind navbar and click() fails await button.click(); // for "var" mode, close the modal if (mode === "var") { - await browser.sleep(500); // wait for the modal to appear + await browser.pause(500); // wait for the modal to appear //await element(by.css("dialog-edit-param-values .mat-dialog-actions button")).click(); // clique "annuler" et non "valider" : - await element(by.css("dialog-edit-param-values .mat-dialog-actions button.mat-warn")).click(); - await browser.sleep(500); // wait for the navbar to reappear after modal dismissal + await $("dialog-edit-param-values .mat-dialog-actions button.mat-warn").click(); + await browser.pause(500); // wait for the navbar to reappear after modal dismissal } } @@ -378,7 +373,7 @@ export class CalculatorPage { // get parent (div.container) const container = await this.findParentContainer(elt) as ElementFinder; // find <select> - const select = container.element(by.css("param-link mat-select")); + const select = container.$("param-link mat-select"); return select; } @@ -414,8 +409,8 @@ export class CalculatorPage { if (!hasDot && !hasExponent && !isN) { keys = "." + keys; } - if (!isOb && await i.getAttribute("disabled") === null) { - await i.sendKeys(keys); + if (!isOb && (await i.getAttribute("disabled")) === null) { + await i.setValue(keys); } } }); @@ -456,7 +451,7 @@ export class CalculatorPage { * get help button related to calculator */ getCalculatorHelpButton() { - return element(by.css("#help-calc")); + return $("#help-calc"); } /** diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index df1c7282e..cd0493c6f 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -2,7 +2,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; -import { browser } from "protractor"; import { SideNav } from "./sidenav.po"; import { testedCalcTypes } from "./tested_calctypes"; @@ -39,7 +38,7 @@ describe("ngHyd − check translation of all calculators", () => { beforeAll(async () => { await prefPage.navigateTo(); await prefPage.changeLanguage(i); - await browser.sleep(200); + await browser.pause(200); await navBar.clickNewCalculatorButton(); }); @@ -78,13 +77,13 @@ describe("ngHyd − check translation of all calculators", () => { } // check absence of "*** message not found" in whole DOM - expect(await browser.getPageSource()).not.toContain("*** message not found", "missing translations found"); + expect(await browser.getSource()).not.toContain("*** message not found", "missing translations found"); // empty session await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sideNav.clickNewSessionButton(); - browser.sleep(200); + browser.pause(200); }); } }); diff --git a/e2e/cloisons.e2e-spec.ts b/e2e/cloisons.e2e-spec.ts index f08cac6a0..f372175d1 100644 --- a/e2e/cloisons.e2e-spec.ts +++ b/e2e/cloisons.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; -import { browser } from "protractor"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; @@ -25,7 +24,7 @@ describe("ngHyd − cloisons", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when all parent Nub parameters are linked, Structure parameter modes should be alterable without problem", async () => { @@ -33,10 +32,10 @@ describe("ngHyd − cloisons", () => { // 1. create target module for linked parameters await listPage.clickMenuEntryForCalcType(10); // Cloisons - await browser.sleep(300); + await browser.pause(300); // 2. create module to test await calcPage.clickCloneCalcButton(); - await browser.sleep(300); + await browser.pause(300); // 3. link every parameter except Structure ones await calcPage.setParamMode(calcPage.getInputById("calc_Q"), "link"); @@ -45,14 +44,14 @@ describe("ngHyd − cloisons", () => { await calcPage.setParamMode(calcPage.getInputById("BB"), "link"); await calcPage.setParamMode(calcPage.getInputById("PB"), "link"); await calcPage.setParamMode(calcPage.getInputById("DH"), "link"); - await browser.sleep(300); + await browser.pause(300); // 4. change LoiDebit await changeSelectValue(calcPage.getSelectById("select_loidebit"), 1); - await browser.sleep(300); + await browser.pause(300); // 5. check number of inputs in CALC mode - expect(await calcPage.getCheckedCalcModeButtons().count()).toBe(1); + expect(await calcPage.getCheckedCalcModeButtons().length).toBe(1); // 6. try calculating the module await calcPage.getCalculateButton().click(); diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index 9c454e864..f8a588fec 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { testedCalcTypes } from "./tested_calctypes"; import { scrollPageToTop } from "./util.po"; @@ -26,7 +25,7 @@ describe("ngHyd − clone all calculators with all possible <select> values", () // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); describe("", () => { @@ -56,10 +55,10 @@ describe("ngHyd − clone all calculators with all possible <select> values", () // clone calculator await scrollPageToTop(); await calcPage.clickCloneCalcButton(); - await browser.sleep(300); + await browser.pause(300); // check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().count()).toBe(2); + expect(await navbar.getAllCalculatorTabs().length).toBe(2); // @TODO check <select> values diff --git a/e2e/clone-calc.e2e-spec.ts b/e2e/clone-calc.e2e-spec.ts index 68be69080..1fcb7dd4f 100644 --- a/e2e/clone-calc.e2e-spec.ts +++ b/e2e/clone-calc.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue, scrollPageToTop } from "./util.po"; @@ -25,26 +24,26 @@ describe("ngHyd − clone a calculator", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when cloning a calculator, the clone should have the same values for all parameters", async () => { await navbar.clickNewCalculatorButton(); // 1. create target modules for linked parameter await listPage.clickMenuEntryForCalcType(3); // Régime uniforme - await browser.sleep(500); + await browser.pause(500); const debitRU = calcPage.getInputById("calc_Q"); // "Débit" is calculated by default await calcPage.setParamMode(debitRU, "fix"); - await browser.sleep(500); + await browser.pause(500); await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(4); // Courbe de remous - await browser.sleep(500); + await browser.pause(500); // 2. create source module to clone await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); // Section paramétrée - await browser.sleep(500); + await browser.pause(500); // 3. change and store source parameter values const sourceValues = { @@ -52,26 +51,26 @@ describe("ngHyd − clone a calculator", () => { Ks: 42 }; await changeSelectValue(calcPage.getSelectById("select_section"), 3); // mode "parabolique" - await calcPage.getInputById("k").clear(); - await calcPage.getInputById("k").sendKeys(sourceValues["k"]); - await calcPage.getInputById("Ks").clear(); - await calcPage.getInputById("Ks").sendKeys(sourceValues["Ks"]); + await calcPage.getInputById("k").clearValue(); + await calcPage.getInputById("k").setValue(sourceValues["k"]); + await calcPage.getInputById("Ks").clearValue(); + await calcPage.getInputById("Ks").setValue(sourceValues["Ks"]); // link "Débit" to "Courbe de remous" const debitSP = calcPage.getInputById("Q"); await calcPage.setParamMode(debitSP, "link"); - await browser.sleep(500); + await browser.pause(500); await changeSelectValue(calcPage.getSelectById("linked_Q"), 1); // "Courbe de remous" - await browser.sleep(500); + await browser.pause(500); // otherwise clickCloneCalcButton() fails with "Element is not clickable at point" await scrollPageToTop(); await calcPage.clickCloneCalcButton(); - await browser.sleep(500); + await browser.pause(500); // 4. check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().count()).toBe(4); + expect(await navbar.getAllCalculatorTabs().length).toBe(4); await navbar.clickCalculatorTab(3); // n°3 should be the latest - await browser.sleep(500); + await browser.pause(500); // 5. compare values Object.keys(sourceValues).forEach(async (k) => { diff --git a/e2e/compute-reset-chained-links.e2e-spec.ts b/e2e/compute-reset-chained-links.e2e-spec.ts index 9f402a179..6152104ec 100644 --- a/e2e/compute-reset-chained-links.e2e-spec.ts +++ b/e2e/compute-reset-chained-links.e2e-spec.ts @@ -2,7 +2,6 @@ import { AppPage } from "./app.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; /** @@ -31,12 +30,12 @@ describe("ngHyd − compute then reset chained results − ", () => { // load session file await startPage.navigateTo(); await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-cascade-params.json"); - await browser.sleep(500); - expect(await navbar.getAllCalculatorTabs().count()).toBe(3); + await browser.pause(500); + expect(await navbar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module await navbar.clickCalculatorTabForUid("Y2l2Y3"); @@ -61,8 +60,8 @@ describe("ngHyd − compute then reset chained results − ", () => { await navbar.clickCalculatorTabForUid("ZTFxeW"); // modify an input that is not linked - await calcPage.getInputById("Ks").clear(); - await calcPage.getInputById("Ks").sendKeys("42"); + await calcPage.getInputById("Ks").clearValue(); + await calcPage.getInputById("Ks").setValue("42"); // other 2 modules should still have their results for (let i = 1; i < 3; i++) { @@ -75,8 +74,8 @@ describe("ngHyd − compute then reset chained results − ", () => { await navbar.clickCalculatorTabForUid("ZTFxeW"); // modify input that is linked - await calcPage.getInputById("LargeurBerge").clear(); - await calcPage.getInputById("LargeurBerge").sendKeys("2.6"); + await calcPage.getInputById("LargeurBerge").clearValue(); + await calcPage.getInputById("LargeurBerge").setValue("2.6"); // check all 3 modules for absence of results for (let i = 0; i < 3; i++) { @@ -90,12 +89,12 @@ describe("ngHyd − compute then reset chained results − ", () => { // load session file await startPage.navigateTo(); await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-cascade-results.json"); - await browser.sleep(500); - expect(await navbar.getAllCalculatorTabs().count()).toBe(3); + await browser.pause(500); + expect(await navbar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module (PAB Dimensions) await navbar.clickCalculatorTabForUid("eHh5YX"); @@ -115,8 +114,8 @@ describe("ngHyd − compute then reset chained results − ", () => { await navbar.clickCalculatorTabForUid("MGg5OH"); // modify any input (for ex. "Ks") - await calcPage.getInputById("Ks").clear(); - await calcPage.getInputById("Ks").sendKeys("42"); + await calcPage.getInputById("Ks").clearValue(); + await calcPage.getInputById("Ks").setValue("42"); // check all 3 modules for absence of results for (let i = 0; i < 3; i++) { @@ -130,20 +129,20 @@ describe("ngHyd − compute then reset chained results − ", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); // start page await navbar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // load session file await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-results-invalidation.json"); - await browser.sleep(500); - expect(await navbar.getAllCalculatorTabs().count()).toBe(2); + await browser.pause(500); + expect(await navbar.getAllCalculatorTabs().length).toBe(2); // get down-most module (Ouvrages) await navbar.clickCalculatorTabForUid("amd2OG"); @@ -158,8 +157,8 @@ describe("ngHyd − compute then reset chained results − ", () => { await navbar.clickCalculatorTabForUid("aTgwMm"); // modify an input that is not linked - await calcPage.getInputById("Z2").clear(); - await calcPage.getInputById("Z2").sendKeys("101.8"); + await calcPage.getInputById("Z2").clearValue(); + await calcPage.getInputById("Z2").setValue("101.8"); // the down-most module should still have its results await navbar.clickCalculatorTabForUid("amd2OG"); @@ -178,8 +177,8 @@ describe("ngHyd − compute then reset chained results − ", () => { // modify an input that is linked await navbar.clickCalculatorTabForUid("aTgwMm"); - await calcPage.getInputById("0_ZDV").clear(); - await calcPage.getInputById("0_ZDV").sendKeys("101"); + await calcPage.getInputById("0_ZDV").clearValue(); + await calcPage.getInputById("0_ZDV").setValue("101"); // the down-most module should not have its results anymore await navbar.clickCalculatorTabForUid("amd2OG"); diff --git a/e2e/cote-amont-aval-bief.e2e-spec.ts b/e2e/cote-amont-aval-bief.e2e-spec.ts index 1c73805f0..294151d0f 100644 --- a/e2e/cote-amont-aval-bief.e2e-spec.ts +++ b/e2e/cote-amont-aval-bief.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po" import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; @@ -20,36 +19,38 @@ describe("ngHyd − up/downstream elevations of a reach", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("check hydraulic details availability - flow calculation", async () => { // open "up/downstream elevations of a reach" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(21); - await browser.sleep(200); + await browser.pause(200); // set upstream flow in calculate mode - const flowCalcBtn = element(by.xpath("//field-set[4]/mat-card-content/param-field-line[1]/div/div[2]/mat-button-toggle-group/mat-button-toggle[3]")); + const flowCalcBtn = $( + "//field-set[4]/mat-card-content/param-field-line[1]/div/div[2]/mat-button-toggle-group/mat-button-toggle[3]" + ); await flowCalcBtn.click(); // check details buttons are disabled - const upDetailsBtn = element(by.id("generate-sp-aval")); + const upDetailsBtn = $("#generate-sp-aval"); expect(upDetailsBtn.isEnabled()).toBe(false); - const downDetailsBtn = element(by.id("generate-sp-amont")); + const downDetailsBtn = $("#generate-sp-amont"); expect(downDetailsBtn.isEnabled()).toBe(false); // set value to upstream water elevation so that flow calculation leads to no error const upWEinput = calcPage.getInputById("Z1"); - await upWEinput.clear(); - await upWEinput.sendKeys("100.664"); + await upWEinput.clearValue(); + await upWEinput.setValue("100.664"); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(2000); + await browser.pause(2000); // check details buttons are enabled expect(upDetailsBtn.isEnabled()).toBe(true); @@ -57,7 +58,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // click upstream hydraulic details button await upDetailsBtn.click(); - await browser.sleep(500); + await browser.pause(500); // a second calculator should be created let calcs = navBar.getAllCalculatorTabs(); @@ -66,7 +67,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // click downstream hydraulic details button await navBar.openNthCalculator(0); await upDetailsBtn.click(); - await browser.sleep(500); + await browser.pause(500); // a third calculator should be created calcs = navBar.getAllCalculatorTabs(); @@ -77,18 +78,18 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // open "up/downstream elevations of a reach" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(21); - await browser.sleep(200); + await browser.pause(200); // check details buttons status - const upDetailsBtn = element(by.id("generate-sp-aval")); + const upDetailsBtn = $("#generate-sp-aval"); expect(upDetailsBtn.isEnabled()).toBe(true); - const downDetailsBtn = element(by.id("generate-sp-amont")); + const downDetailsBtn = $("#generate-sp-amont"); expect(downDetailsBtn.isEnabled()).toBe(false); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(2000); + await browser.pause(2000); // check details buttons are enabled expect(upDetailsBtn.isEnabled()).toBe(true); @@ -96,7 +97,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // click upstream hydraulic details button await upDetailsBtn.click(); - await browser.sleep(500); + await browser.pause(500); // a second calculator should be created let calcs = navBar.getAllCalculatorTabs(); @@ -105,7 +106,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // click downstream hydraulic details button await navBar.openNthCalculator(0); await upDetailsBtn.click(); - await browser.sleep(500); + await browser.pause(500); // a third calculator should be created calcs = navBar.getAllCalculatorTabs(); diff --git a/e2e/courbe-remous-empty-fields.e2e-spec.ts b/e2e/courbe-remous-empty-fields.e2e-spec.ts index 4674b1c5c..35dbdf61b 100644 --- a/e2e/courbe-remous-empty-fields.e2e-spec.ts +++ b/e2e/courbe-remous-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -21,14 +20,14 @@ describe("Check fields are empty in 'backwater curves' calculator when created w // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("", async () => { // open "backwater curves" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(4); - await browser.sleep(200); + await browser.pause(200); expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], [true, true, true, true, true, true, true, true, true, true])) diff --git a/e2e/diagramme-modules.e2e-spec.ts b/e2e/diagramme-modules.e2e-spec.ts index 87a6c8d0a..a10251f05 100644 --- a/e2e/diagramme-modules.e2e-spec.ts +++ b/e2e/diagramme-modules.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { SideNav } from "./sidenav.po"; @@ -40,23 +39,23 @@ describe("modules diagram", () => { // open predam calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // open modules diagram await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sideNav.clickDiagramButton(); - await browser.sleep(200); + await browser.pause(200); // click first module - const nodes = element.all(by.css("g.node.default")); + const nodes = $$("g.node.default"); const node0 = nodes.get(0); const n0id = removeMermaidIdFormat(await node0.getAttribute("id")); await node0.click(); - await browser.sleep(200); + await browser.pause(200); // check calculator is open - const url = await browser.driver.getCurrentUrl(); + const url = await browser.getUrl(); expect(url).toContain("/#/calculator/" + n0id); }); }); diff --git a/e2e/documentation.e2e-spec.ts b/e2e/documentation.e2e-spec.ts index a3a4f14d8..b1e8d50cc 100644 --- a/e2e/documentation.e2e-spec.ts +++ b/e2e/documentation.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; describe("documentation − ", () => { @@ -22,45 +21,42 @@ describe("documentation − ", () => { async function checkMathjaxInHelp(lang: number) { // change language setup await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.changeLanguage(lang); - await browser.sleep(200); + await browser.pause(200); // start page await navbar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open "fish ladder: fall" calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // click help await calcPage.getCalculatorHelpButton().click(); - await browser.sleep(200); + await browser.pause(200); - browser.getAllWindowHandles().then(async (handles) => { + browser.getWindowHandles().then(async (handles) => { const old = browser.ignoreSynchronization - browser.ignoreSynchronization = true; // deprecated but the only solution to work in the newly opened tab // switch to help tab - browser.switchTo().window(handles[1]).then(async () => { - await browser.sleep(200); + browser.switchToWindow(handles[1]).then(async () => { + await browser.pause(200); // check Mathjax element is present - expect(await element(by.css("mjx-container")).isPresent()).toBe(true); + expect(await $("mjx-container").isExisting()).toBe(true); }).then(async () => { // close help tab // await browser.close(); // await browser.sleep(200); // switch back to calculator (required to avoid failure of next language test) - await browser.switchTo().window(handles[0]); - await browser.sleep(200); + await browser.switchToWindow(handles[0]); + await browser.pause(200); // browser.ignoreSynchronization = false; }).then(async () => { // switch back to calculator (required to avoid failure of next language test) - await browser.switchTo().window(handles[0]); - await browser.sleep(200); - // browser.ignoreSynchronization = false; - browser.ignoreSynchronization = old; + await browser.switchToWindow(handles[0]); + await browser.pause(200); }); }); } diff --git a/e2e/duplicate-results.e2e-spec.ts b/e2e/duplicate-results.e2e-spec.ts index bc2032048..aed31aaec 100644 --- a/e2e/duplicate-results.e2e-spec.ts +++ b/e2e/duplicate-results.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po" import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; @@ -20,16 +19,16 @@ describe("ngHyd − check that results are not duplicated", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("in 'baffle fishway: setup' calculator", async () => { // open baffle fishway setup calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(28); - await browser.sleep(200); + await browser.pause(200); // run calculation const calcButton = calcPage.getCalculateButton(); @@ -37,7 +36,7 @@ describe("ngHyd − check that results are not duplicated", () => { // check result count const fixRows = calcPage.getAllFixedResultsRows(); - const nbRows = await fixRows.count(); + const nbRows = await fixRows.length; console.log(nbRows); expect(nbRows).toBe(24); // boundaries are included }); diff --git a/e2e/examples-empty-fields.e2e-spec.ts b/e2e/examples-empty-fields.e2e-spec.ts index dd59b1a13..eb6b8c32a 100644 --- a/e2e/examples-empty-fields.e2e-spec.ts +++ b/e2e/examples-empty-fields.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" @@ -21,24 +20,24 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when a standard fish ladder calculator is created", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open 1st example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[0].click(); - await browser.sleep(50); + const examples = await $$("#examples-list .load-example"); + await (await examples)[0].click(); + await browser.pause(50); // select wall module await navBar.openNthCalculator(4); - await browser.sleep(50); + await browser.pause(50); // check fields are not empty const inputIds = ["Z1", "LB", "PB", "0_L", "0_CdWSL"]; @@ -49,30 +48,30 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on it("calculated parameter initial value when discharge law is modified", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open 1st example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[0].click(); - await browser.sleep(50); + const examples = await $$("#examples-list .load-example"); + await (await examples)[0].click(); + await browser.pause(50); // select wall module await navBar.openNthCalculator(4); - await browser.sleep(50); + await browser.pause(50); // modify 1st structure discharge law const dischargeSelect = calcPage.getSelectById("select_loidebit"); await changeSelectValue(dischargeSelect, 1); - await browser.sleep(200); + await browser.pause(200); // open initial dialog - const initDlgButton = element(by.className("param-computed-more")); + const initDlgButton = $(".param-computed-more"); await initDlgButton.click(); - await browser.sleep(200); + await browser.pause(200); // check input value is not null const input = calcPage.getInputById("initval-input"); - const underlyingInput = input.element(by.id("0_h1")); + const underlyingInput = input.$("#0_h1"); const txt = await underlyingInput.getAttribute("value"); expect(txt === "").toEqual(false); }); @@ -92,48 +91,48 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when calculation is run on a generated fish ladder calculator", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open 1st example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[0].click(); - await browser.sleep(50); + const examples = await $$("#examples-list .load-example"); + await (await examples)[0].click(); + await browser.pause(50); // select wall module await navBar.openNthCalculator(4); - await browser.sleep(50); + await browser.pause(50); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); // click "generate PAB" button const genButton = calcPage.getGeneratePabButton(); await genButton.click(); - await browser.sleep(200); + await browser.pause(200); // write "6" in basin count input const nbBassins = calcPage.getInputById("generatePabNbBassins"); - await nbBassins.sendKeys("6"); - await browser.sleep(50); + await nbBassins.setValue("6"); + await browser.pause(50); // click "Generate PAB" - await element(by.css("dialog-generate-pab button#do-generate")).click(); - await browser.sleep(1000); + await $("dialog-generate-pab button#do-generate").click(); + await browser.pause(1000); // calculate PAB const calcButtonPAB = calcPage.getCalculateButton(); await calcButtonPAB.click(); - await browser.sleep(200); + await browser.pause(200); // check that result is not empty const hasResults = await calcPage.hasResults(); diff --git a/e2e/lechapt-calmon.e2e-spec.ts b/e2e/lechapt-calmon.e2e-spec.ts index 70ee97d0a..7a0f68ddd 100644 --- a/e2e/lechapt-calmon.e2e-spec.ts +++ b/e2e/lechapt-calmon.e2e-spec.ts @@ -1,5 +1,4 @@ import { ListPage } from "./list.po"; -import { browser, by } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; @@ -25,19 +24,19 @@ describe("Lechapt&Calmon - ", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); async function setup() { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open Lechapt-Calmon (pressure loss) calculator await listPage.clickMenuEntryForCalcType(35); - await browser.sleep(200); + await browser.pause(200); } it("when material is modified, results should change", async () => { @@ -46,28 +45,28 @@ describe("Lechapt&Calmon - ", () => { // select last material type const materialSelect = calcPage.getSelectById("select_material"); await changeSelectValue(materialSelect, 8); - await browser.sleep(200); + await browser.pause(200); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); // store total pressure loss result const res1 = calcPage.getAllFixedResultsRows().get(4); - const pl1 = await res1.all(by.css("td")).get(1).getText(); + const pl1 = await res1.$$("td")[1].getText(); // select first material type await changeSelectValue(materialSelect, 0); - await browser.sleep(200); + await browser.pause(200); // run calculation await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); // compare total pressure loss result with first calculaiotn const res2 = calcPage.getAllFixedResultsRows().get(4); - const pl2 = await res2.all(by.css("td")).get(1).getText(); + const pl2 = await res2.$$("td")[1].getText(); expect(pl1).not.toEqual(pl2); }); diff --git a/e2e/link-parallel-devices.e2e-spec.ts b/e2e/link-parallel-devices.e2e-spec.ts index 768c320af..845ccfdad 100644 --- a/e2e/link-parallel-devices.e2e-spec.ts +++ b/e2e/link-parallel-devices.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; @@ -21,14 +20,14 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when creating Parallel Structures, devices should be linkable to one another", async () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(8); await calcPage.getAddStructureButton().click(); - const nb1 = await calcPage.getAllLinkButtons().count(); + const nb1 = await calcPage.getAllLinkButtons().length; expect(nb1).toBe(8); // link buttons on children but not on parent }); @@ -36,7 +35,7 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); await calcPage.getAddStructureButton().click(); - const nb2 = await calcPage.getAllLinkButtons().count(); + const nb2 = await calcPage.getAllLinkButtons().length; expect(nb2).toBe(6); // link buttons on children but not on parent }); @@ -44,7 +43,7 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(9); await calcPage.getAddStructureButton().click(); - const nb3 = await calcPage.getAllLinkButtons().count(); + const nb3 = await calcPage.getAllLinkButtons().length; expect(nb3).toBe(6); // link buttons on children but not on parent }); }); diff --git a/e2e/link-to-deleted-module.e2e-spec.ts b/e2e/link-to-deleted-module.e2e-spec.ts index 380f97354..da428de98 100644 --- a/e2e/link-to-deleted-module.e2e-spec.ts +++ b/e2e/link-to-deleted-module.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -23,27 +22,27 @@ describe("linked parameter - ", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); await navBar.clickNewCalculatorButton(); }); it("delete linked module", async () => { // open "channel flow with hydraulic structures" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[1].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[1].click(); + await browser.pause(500); // select "up/downstream elevations of a reach" tab await navBar.clickCalculatorTab(1); - await browser.sleep(500); + await browser.pause(500); // close "solver" calculator await navBar.middleClickCalculatorTab(3); // reselect "up/downstream elevations of a reach" tab await navBar.clickCalculatorTab(1); - await browser.sleep(500); + await browser.pause(500); // close second "parallel structures" calculator await navBar.middleClickCalculatorTab(2); @@ -59,20 +58,20 @@ describe("linked parameter - ", () => { it("delete linked module and duplicate remaining one", async () => { // open "fish ladder: fall" calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // clone calculator await calcPage.clickCloneCalcButton(); - await browser.sleep(200); + await browser.pause(200); // set DH in link mode let inpDH = calcPage.getInputById("DH"); await calcPage.setParamMode(inpDH, "link"); - await browser.sleep(200); + await browser.pause(200); // close 1st calculator await navBar.middleClickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // check DH input is in "fixed" state in remaining calculator (not the aim of this test) inpDH = calcPage.getInputById("DH"); @@ -83,11 +82,11 @@ describe("linked parameter - ", () => { // clone calculator await calcPage.clickCloneCalcButton(); - await browser.sleep(200); + await browser.pause(200); // select 1st tab await navBar.clickCalculatorTab(0); - await browser.sleep(500); + await browser.pause(500); // check DH input is in "calc" mode inpDH = calcPage.getInputById("DH"); diff --git a/e2e/linked-parameter-section-type.e2e-spec.ts b/e2e/linked-parameter-section-type.e2e-spec.ts index 36dce48fa..e663ff009 100644 --- a/e2e/linked-parameter-section-type.e2e-spec.ts +++ b/e2e/linked-parameter-section-type.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser } from "protractor"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; @@ -22,7 +21,7 @@ describe("linked parameter in calculator with section - ", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("modify section type", async () => { @@ -31,12 +30,12 @@ describe("linked parameter in calculator with section - ", () => { // open first "parametric section" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); - await browser.sleep(200); + await browser.pause(200); // open second "parametric section" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); - await browser.sleep(200); + await browser.pause(200); // set Q parameter to linked mode const inputQ = calcPage.getInputById("Q"); diff --git a/e2e/list.e2e-spec.ts b/e2e/list.e2e-spec.ts index 2b2679a5c..c89367c94 100644 --- a/e2e/list.e2e-spec.ts +++ b/e2e/list.e2e-spec.ts @@ -1,5 +1,4 @@ import { ListPage } from "./list.po"; -import { element, by } from "protractor"; /** * Show calculators list (home page) @@ -19,7 +18,7 @@ describe("ngHyd − list page", () => { it("when list is open, link to doc should be well-formed (2-letter language code)", async () => { await page.navigateTo(); - const docLink = element(by.css("a#header-doc")); + const docLink = $("a#header-doc"); const href = await docLink.getAttribute("href"); const re = new RegExp("assets/docs/[a-z]{2}/index.html"); expect(re.test(href)).toBe(true); diff --git a/e2e/list.po.ts b/e2e/list.po.ts index 52c574577..7d09d78bc 100644 --- a/e2e/list.po.ts +++ b/e2e/list.po.ts @@ -1,24 +1,22 @@ -import { browser, by, element } from "protractor"; - export class ListPage { navigateTo() { - return browser.get("/#/list"); + return browser.url("/#/list"); } getThemesCards() { - return element.all(by.css("mat-card.compute-nodes-theme")); + return $$("mat-card.compute-nodes-theme"); } async getThemesCardsLength() { - return await this.getThemesCards().count(); + return await this.getThemesCards().length; } getCalculatorsMenuEntries() { - return element.all(by.css("mat-card.compute-nodes-theme button.theme-calculator")); + return $$("mat-card.compute-nodes-theme button.theme-calculator"); } async getCalculatorsMenuLength() { - return await this.getCalculatorsMenuEntries().count(); + return await this.getCalculatorsMenuEntries().length; } async getAvailableCalcTypes() { @@ -38,18 +36,18 @@ export class ListPage { async clickRandomCalculatorMenuEntry() { const menuEntries = this.getCalculatorsMenuEntries(); - const l = await menuEntries.count(); + const l = await menuEntries.length; const r = Math.min((Math.floor(Math.random() * l)), (l - 1)); - return menuEntries.get(r).click(); + return menuEntries[r].click(); } async clickMenuEntryForCalcType(type: number) { - const but = element(by.css("#create-calc-" + type)); + const but = $("#create-calc-" + type); return but.click(); } async getCalcMenuTextForCalcType(type: number): Promise<string> { - const but = element(by.css("#create-calc-" + type)); + const but = $("#create-calc-" + type); return but.getText(); } } diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index 32d976aff..dbeb39faf 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -1,7 +1,6 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; /** @@ -26,29 +25,29 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // force language to prevent issues due to default browser language await prefPage.navigateTo(); await prefPage.changeLanguage(1); // fr - await browser.sleep(200); + await browser.pause(200); // disable evil option "empty fields on module creation" await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); // start page await navbar.clickNewCalculatorButton(); }); it("when loading session-liens-spaghetti.json, all links should point to the right target", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-liens-spaghetti.json"); - await browser.sleep(500); + await browser.pause(500); - expect(await navbar.getAllCalculatorTabs().count()).toBe(5); + expect(await navbar.getAllCalculatorTabs().length).toBe(5); // 1. check Section paramétrée await navbar.clickCalculatorTab(0); - await browser.sleep(500); + await browser.pause(500); // check target params values const sp_lb = calcPage.getSelectById("linked_LargeurBerge"); @@ -57,7 +56,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // 2. check Passe à macro-rugosités await navbar.clickCalculatorTab(1); - await browser.sleep(500); + await browser.pause(500); // check target params values const mr_zf1 = calcPage.getSelectById("linked_ZF1"); @@ -70,7 +69,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // 3. check Lois d'ouvrages await navbar.clickCalculatorTab(2); - await browser.sleep(500); + await browser.pause(500); // check target params values // const lo_z2 = calcPage.getSelectById("linked_Z2"); @@ -98,7 +97,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // 5. check Déver. dénoyés await navbar.clickCalculatorTab(4); - await browser.sleep(500); + await browser.pause(500); // check target params values // const lo_br = calcPage.getSelectById("linked_BR"); diff --git a/e2e/load-malformed-files.e2e-spec.ts b/e2e/load-malformed-files.e2e-spec.ts index 9204d87b6..f8ad8dc99 100644 --- a/e2e/load-malformed-files.e2e-spec.ts +++ b/e2e/load-malformed-files.e2e-spec.ts @@ -1,6 +1,5 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser, element, by } from "protractor"; import { PreferencesPage } from "./preferences.po"; /** @@ -26,55 +25,55 @@ describe("ngHyd − load malformed session files − ", () => { // force language to prevent issues due to default browser language await prefPage.navigateTo(); await prefPage.changeLanguage(1); // fr - await browser.sleep(200); + await browser.pause(200); await navbar.clickNewCalculatorButton(); }); it("when loading session-bad-syntax.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-bad-syntax.json"); - const err = element(by.css(".file-problem .mat-list-item-content")); + const err = $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); it("when loading session-missing-info.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-missing-info.json"); - const err = element(by.css(".file-problem .mat-list-item-content")); + const err = $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); it("when loading session-empty-modules-list.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-empty-modules-list.json"); - const err = element(by.css(".file-problem .mat-list-item-content")); + const err = $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Le fichier ne contient aucun module"); }); it("when loading session-format-too-old.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-format-too-old.json", false); - const err = element(by.css(".file-problem .mat-list-item-content")); + const err = $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Mauvaise version du format de fichier"); }); }); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index b56572375..7bce10834 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -3,7 +3,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue, expectNumber } from "./util.po"; @@ -43,7 +42,7 @@ async function saveSession(): Promise<string> { deleteDownloadedFile(sessionFile); await calcPage.clickSaveCalcButton(); - await browser.sleep(500); + await browser.pause(500); // cf. protractor.conf.fs, exports.config.capabilities.chromeOptions.prefs.download.default_directory // protractor.conf.fs/exports.config.capabilities.chromeOptions.prefs.download.default_directory DOES NOT WORK ! @@ -60,10 +59,10 @@ async function saveSession(): Promise<string> { if (true) { await calcPage.getSaveSessionButton().click(); } else { - const cancel = element(by.css("dialog-save-session button.mat-primary")); + const cancel = $("dialog-save-session button.mat-primary"); await cancel.click(); } - await browser.sleep(200); + await browser.pause(200); // browser.ignoreSynchronization = false; // await browser.waitForAngularEnabled(true); @@ -88,10 +87,10 @@ async function saveSession(): Promise<string> { async function loadSession(path: string) { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile(path); } @@ -118,41 +117,41 @@ describe("ngHyd − save and load sessions", () => { await startPage.navigateTo(); await loadSession("./session/session-6-calc.test.json"); - await browser.sleep(1000); + await browser.pause(1000); - expect(await navbar.getAllCalculatorTabs().count()).toBe(6); + expect(await navbar.getAllCalculatorTabs().length).toBe(6); }); it("when loading session-optional-params.test.json file from home page, the calculator should be loaded", async () => { await startPage.navigateTo(); await loadSession("./session/session-optional-params.test.json"); - await browser.sleep(200); + await browser.pause(200); - expect(await navbar.getAllCalculatorTabs().count()).toBe(1); + expect(await navbar.getAllCalculatorTabs().length).toBe(1); }); it("when saving a calculator, the current parameter values should be found in the file", async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); // Section paramétrée - await browser.sleep(500); + await browser.pause(500); await changeSelectValue(calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" - await calcPage.getInputById("Ks").clear(); // coefficient de Strickler - await browser.sleep(200); - await calcPage.getInputById("Ks").sendKeys("42"); - await browser.sleep(200); + await calcPage.getInputById("Ks").clearValue(); // coefficient de Strickler + await browser.pause(200); + await calcPage.getInputById("Ks").setValue("42"); + await browser.pause(200); const filename = await saveSession(); - await browser.sleep(500); + await browser.pause(500); const fileContent = fs.readFileSync(filename, { encoding: "utf8" }); - await browser.sleep(200); + await browser.pause(200); expect(fileContent).toContain(`"nodeType":"SectionTrapeze"`); expect(fileContent).toContain(`{"symbol":"Ks","mode":"SINGLE","value":42}`); @@ -161,7 +160,7 @@ describe("ngHyd − save and load sessions", () => { xit("select value must be recovered when loading a session file", async () => { // start page await startPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); const calcTypes = await listPage.getAvailableCalcTypes(); @@ -176,27 +175,27 @@ describe("ngHyd − save and load sessions", () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); // start page await navbar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); } else { // empty session await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickNewSessionButton(); - await browser.sleep(200); + await browser.pause(200); } // open calculator await listPage.clickMenuEntryForCalcType(ct); - await browser.sleep(200); + await browser.pause(200); // detect selects const selects = calcPage.getAllCalculatorSelects(); - const nsel = await selects.count(); + const nsel = await selects.length; for (let s = 0; s < nsel; s++) { // /!\ ElementArrayFinder.each() is ASYNCHRONOUS !! https://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.each const sel = selects.get(s); const selId = await sel.getAttribute("id"); @@ -212,15 +211,15 @@ describe("ngHyd − save and load sessions", () => { // select next select option (optionally looping) const nextInd = (ind + 1) % optionCount; await changeSelectValue(sel, nextInd); - await browser.sleep(200); + await browser.pause(200); // save session const filename = await saveSession(); - await browser.sleep(200); + await browser.pause(200); // load session await loadSession(filename); // bug here : the click on the menu button (top left) takes 40s to take effect and open the side nav!) - await browser.sleep(200); + await browser.pause(200); // the displayed calculator is now the loaded one // check the calculator has been loaded @@ -231,13 +230,13 @@ describe("ngHyd − save and load sessions", () => { // check the same option is in the select const optTxt2 = await calcPage.getMatselectCurrentOptionText(sel2); - await browser.sleep(100); + await browser.pause(100); const ind2 = options.indexOf(optTxt2); expectNumber(`calc ${ct} select ${selId} : opt index`, ind2, nextInd); // close last calculator (the loaded one) await navbar.middleClickCalculatorTab(1); - await browser.sleep(200); + await browser.pause(200); // check last calculator has been closed expectNumber(`calc ${ct} select ${selId} : num calcs(2)`, await navbar.getCalculatorEntriesCount(), 1); diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index 814da4e21..9343ede38 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -1,8 +1,6 @@ -import { browser, Button, by, element, protractor } from "protractor"; - export class Navbar { getAllCalculatorTabs() { - return element.all(by.css("#tabs-container button.calculator-button")); + return $$("#tabs-container button.calculator-button"); } /** @@ -11,14 +9,14 @@ export class Navbar { */ async getCalculatorEntriesCount() { // if dropDown calculators select is visible - const dropDown = element(by.css("mat-select#selectCalculator")); - if (await dropDown.isPresent() && await dropDown.isDisplayed()) { + const dropDown = $("mat-select#selectCalculator"); + if ((await dropDown.isExisting()) && (await dropDown.isDisplayed())) { await dropDown.click(); - const options = element.all(by.css(".cdk-overlay-container mat-option")); - await dropDown.sendKeys(protractor.Key.ESCAPE); // close dropdown - return await options.count(); + const options = $$(".cdk-overlay-container mat-option"); + // FIXME>>>>await dropDown.sendKeys(protractor.Key.ESCAPE); // close dropdown + return await options.length; } else { - return (await element.all(by.css("#tabs-container button.calculator-button"))).length; + return (await $$("#tabs-container button.calculator-button")).length; } } @@ -28,36 +26,36 @@ export class Navbar { */ async openNthCalculator(n: number) { // if dropDown calculators select is visible - const dropDown = element(by.css("mat-select#selectCalculator")); - if (await dropDown.isPresent() && await dropDown.isDisplayed()) { + const dropDown = $("mat-select#selectCalculator"); + if ((await dropDown.isExisting()) && (await dropDown.isDisplayed())) { await dropDown.click(); // 1st option is not necessarly "mat-option-0"... - const options = element.all(by.css(".cdk-overlay-container mat-option")); + const options = $$(".cdk-overlay-container mat-option"); const option = options.get(n); await option.click(); } else { const tabs = this.getAllCalculatorTabs(); - await tabs.get(n).click(); + await (await tabs.n).click(); } } getCalculatorTabForUid(uid: string) { - return element(by.css("#tabs-container button.calculator-button.calculator-uid-" + uid)); + return $("#tabs-container button.calculator-button.calculator-uid-" + uid); } getNewCalculatorButton() { - return element(by.css("#new-calculator")); + return $("#new-calculator"); } getMenuButton() { - return element(by.css("#open-menu")); + return $("#open-menu"); } async clickCalculatorTab(n: number) { const tabs = this.getAllCalculatorTabs(); - await tabs.get(n).click(); + await (await tabs.n).click(); } async clickCalculatorTabForUid(uid: string) { @@ -67,9 +65,9 @@ export class Navbar { async clickRandomCalculatorTab(n: number) { const tabs = this.getAllCalculatorTabs(); - const l = await tabs.count(); + const l = await tabs.length; const r = Math.min((Math.floor(Math.random() * l)), (l - 1)); - await tabs.get(r).click(); + await (await tabs.r).click(); } /** @@ -78,10 +76,10 @@ export class Navbar { */ async middleClickCalculatorTab(n: number, confirmCloseDialog: boolean = true) { const calcTabs = this.getAllCalculatorTabs(); - await browser.actions().click(calcTabs.get(n), Button.MIDDLE).perform(); + // FIXME>>>> await browser.actions().click(calcTabs.get(n), Button.MIDDLE).perform(); if (confirmCloseDialog) { - const btns = element.all(by.css("dialog-confirm-close-calc .mat-dialog-actions button")); - await btns.get(1).click(); + const btns = $$("dialog-confirm-close-calc .mat-dialog-actions button"); + await (await btns)[1].click(); } } diff --git a/e2e/navigate-through-calculators.e2e-spec.ts b/e2e/navigate-through-calculators.e2e-spec.ts index 8383a7493..e7631f47f 100644 --- a/e2e/navigate-through-calculators.e2e-spec.ts +++ b/e2e/navigate-through-calculators.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; -import { browser } from "protractor"; /** * Use navbar buttons to navigate from one open calculator to another @@ -23,7 +22,7 @@ describe("ngHyd − create calculators and navigate among them", () => { for (let i = 0; i < 6; i++) { if (i > 0) { await navbar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); } await listPage.clickRandomCalculatorMenuEntry(); } diff --git a/e2e/notes.e2e-spec.ts b/e2e/notes.e2e-spec.ts index dd0454099..40bf8caa1 100644 --- a/e2e/notes.e2e-spec.ts +++ b/e2e/notes.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { AppPage } from "./app.po"; import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; @@ -19,74 +18,74 @@ describe("check calculator notes", () => { it(" - notes should display properly when opened from a calculator", async () => { await startPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); // open PAB: chute calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // open notes await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickNotesButton(); - await browser.sleep(200); + await browser.pause(200); // input some text - const ta = element(by.css("textarea")); - await ta.clear(); - await ta.sendKeys("azerty123"); - await browser.sleep(200); + const ta = $("textarea"); + await ta.clearValue(); + await ta.setValue("azerty123"); + await browser.pause(200); // reopen calculator await navBar.openNthCalculator(0); - await browser.sleep(200); + await browser.pause(200); // reopen notes await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickNotesButton(); - await browser.sleep(200); + await browser.pause(200); // check text - const md = element(by.css("markdown p")); - await browser.sleep(200); + const md = $("markdown p"); + await browser.pause(200); expect(await md.getText()).toEqual("azerty123"); }); it(" - notes should display properly when opened from modules diagram", async () => { await startPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); // open PAB: chute calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // open notes await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickNotesButton(); - await browser.sleep(200); + await browser.pause(200); // input some text - const ta = element(by.css("textarea")); - await ta.clear(); - await ta.sendKeys("azerty123"); - await browser.sleep(200); + const ta = $("textarea"); + await ta.clearValue(); + await ta.setValue("azerty123"); + await browser.pause(200); // open modules diagram await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickDiagramButton(); - await browser.sleep(200); + await browser.pause(200); // open notes - const notesLink = element(by.css("#show-notes a")); + const notesLink = $("#show-notes a"); notesLink.click(); - await browser.sleep(200); + await browser.pause(200); // check text - const md = element(by.css("markdown p")); - await browser.sleep(200); + const md = $("markdown p"); + await browser.pause(200); expect(await md.getText()).toEqual("azerty123"); }); }); diff --git a/e2e/ouvrages-empty-fields.e2e-spec.ts b/e2e/ouvrages-empty-fields.e2e-spec.ts index 06891af7e..2b7e3620b 100644 --- a/e2e/ouvrages-empty-fields.e2e-spec.ts +++ b/e2e/ouvrages-empty-fields.e2e-spec.ts @@ -1,5 +1,4 @@ import { ListPage } from "./list.po"; -import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; @@ -26,19 +25,19 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); async function setup() { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open structures calculator await listPage.clickMenuEntryForCalcType(8); - await browser.sleep(200); + await browser.pause(200); } it("when a structure calculator is created", async () => { @@ -52,7 +51,7 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // change 1st structure type to rectangular weir const structSelect = calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); - await browser.sleep(200); + await browser.pause(200); // check 1st structure empty fields const inputIds2 = ["Q", "Z1", "Z2", "0_ZDV", "0_L", "0_CdWR"]; @@ -92,18 +91,18 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // change 1st structure type to rectangular weir const structSelect = calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); - await browser.sleep(200); + await browser.pause(200); // copy structure const addStruct = calcPage.getCopyStructureButton(); await addStruct.click(); - await browser.sleep(200); + await browser.pause(200); // change 2nd structure type to rectangular gate - const selects = await element.all(by.css("mat-select#select_structure")); + const selects = await $$("mat-select#select_structure"); const structSelect2 = selects[1]; await changeSelectValue(structSelect2, 5); - await browser.sleep(200); + await browser.pause(200); // check empty fields const inputIds = ["1_ZDV", "1_L", "1_W", "1_CdGR"]; @@ -116,13 +115,13 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // fill const inp = calcPage.getInputById("0_ZDV"); - await inp.clear(); - await inp.sendKeys("1"); + await inp.clearValue(); + await inp.setValue("1"); // copy structure const addStruct = calcPage.getCopyStructureButton(); await addStruct.click(); - await browser.sleep(200); + await browser.pause(200); // check empty fields const inputIds = ["1_ZDV", "1_L", "1_W", "1_CdGR"]; @@ -136,12 +135,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // change 1st structure type to rectangular weir const structSelect = calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); - await browser.sleep(200); + await browser.pause(200); // change discharge law to Larinier const dischargeSelect = calcPage.getSelectById("select_loidebit"); await changeSelectValue(dischargeSelect, 3); - await browser.sleep(200); + await browser.pause(200); // check empty fields const inputIds = ["0_ZDV", "0_L", "0_CdWSL"]; @@ -154,13 +153,13 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // fill const inp = calcPage.getInputById("0_ZDV"); - await inp.clear(); - await inp.sendKeys("1"); + await inp.clearValue(); + await inp.setValue("1"); // copy structure const addStruct = calcPage.getAddStructureButton(); await addStruct.click(); - await browser.sleep(200); + await browser.pause(200); // check empty fields const inputIds = ["1_ZDV", "1_L", "1_W", "1_CdGR"]; diff --git a/e2e/pab-cloisons-empty-fields.e2e-spec.ts b/e2e/pab-cloisons-empty-fields.e2e-spec.ts index 749c1708e..1885d8fe6 100644 --- a/e2e/pab-cloisons-empty-fields.e2e-spec.ts +++ b/e2e/pab-cloisons-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { PreferencesPage } from "./preferences.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; @@ -9,15 +8,15 @@ import { Navbar } from "./navbar.po"; */ async function enableEmptyFieldsOption(prefPage: PreferencesPage) { await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); } async function fillInput(calcPage: CalculatorPage, symbol: string) { const inp = calcPage.getInputById(symbol); - await inp.clear(); - await inp.sendKeys("1"); + await inp.clearValue(); + await inp.setValue("1"); } /** @@ -46,7 +45,7 @@ describe("ngHyd - check the cross walls calculator has empty fields - ", () => { // open cross walls calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await browser.sleep(200); + await browser.pause(200); // fill inputs await fillInput(calcPage, "Z1"); @@ -61,12 +60,12 @@ describe("ngHyd - check the cross walls calculator has empty fields - ", () => { // calculate const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); // click "generate PAB" button const genButton = calcPage.getGeneratePabButton(); await genButton.click(); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyOrFilledFields(["generatePabNbBassins"], [true]); }); @@ -97,7 +96,7 @@ describe("ngHyd - check the cross walls calculator has no empty field - ", () => // open cross walls calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await browser.sleep(200); + await browser.pause(200); // fill inputs await fillInput(calcPage, "Z1"); @@ -112,7 +111,7 @@ describe("ngHyd - check the cross walls calculator has no empty field - ", () => // calculate const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyOrFilledFields(["Z1", "LB", "BB", "PB", "DH", "0_h1", "0_L", "0_CdWSL"], [false, false, false, false, false, false, false, false]); }); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 00e798f1e..2bf3c72b2 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { AppPage } from "./app.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; @@ -32,7 +31,7 @@ describe("ngHyd − Passe à Bassins", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when PAB is created from scratch", async () => { @@ -40,8 +39,8 @@ describe("ngHyd − Passe à Bassins", () => { await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(15); // check that pab-table is present - const innerFieldsets = element.all(by.css(".pab-data-table")); - expect(await innerFieldsets.count()).toBe(1); + const innerFieldsets = $$(".pab-data-table"); + expect(await innerFieldsets.length).toBe(1); // calculate PAB const calcButton = calcPage.getCalculateButton(); @@ -59,11 +58,11 @@ describe("ngHyd − Passe à Bassins", () => { await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); const c_Z1 = calcPage.getInputById("Z1"); - await c_Z1.clear(); - await c_Z1.sendKeys("78.27"); + await c_Z1.clearValue(); + await c_Z1.setValue("78.27"); const c_Z2 = calcPage.getInputById("Z1"); - await c_Z2.clear(); - await c_Z2.sendKeys("74.86"); + await c_Z2.clearValue(); + await c_Z2.setValue("74.86"); // PAB - nombre await navbar.clickNewCalculatorButton(); @@ -73,8 +72,8 @@ describe("ngHyd − Passe à Bassins", () => { const n_DH = calcPage.getInputById("DH"); await calcPage.setParamMode(n_DH, "cal"); const n_N = calcPage.getInputById("N"); - await n_N.clear(); - await n_N.sendKeys("15"); + await n_N.clearValue(); + await n_N.setValue("15"); // PAB - dimensions await navbar.clickNewCalculatorButton(); @@ -82,14 +81,14 @@ describe("ngHyd − Passe à Bassins", () => { const d_V = calcPage.getInputById("V"); await calcPage.setParamMode(d_V, "cal"); const d_Y = calcPage.getInputById("Y"); - await d_Y.clear(); - await d_Y.sendKeys("1.5"); + await d_Y.clearValue(); + await d_Y.setValue("1.5"); const d_L = calcPage.getInputById("L"); - await d_L.clear(); - await d_L.sendKeys("3.100"); + await d_L.clearValue(); + await d_L.setValue("3.100"); const d_W = calcPage.getInputById("W"); - await d_W.clear(); - await d_W.sendKeys("2.5"); + await d_W.clearValue(); + await d_W.setValue("2.5"); // PAB - puissance dissipée (volume) await navbar.clickNewCalculatorButton(); @@ -101,8 +100,8 @@ describe("ngHyd − Passe à Bassins", () => { const p_V = calcPage.getInputById("V"); await calcPage.setParamMode(p_V, "link"); const p_PV = calcPage.getInputById("PV"); - await p_PV.clear(); - await p_PV.sendKeys("150"); + await p_PV.clearValue(); + await p_PV.setValue("150"); // PAB - cloisons await navbar.clickNewCalculatorButton(); @@ -116,8 +115,8 @@ describe("ngHyd − Passe à Bassins", () => { const cl_Z1 = calcPage.getInputById("Z1"); await calcPage.setParamMode(cl_Z1, "link"); const cl_PB = calcPage.getInputById("PB"); - await cl_PB.clear(); - await cl_PB.sendKeys("1.5"); + await cl_PB.clearValue(); + await cl_PB.setValue("1.5"); // calculate Cloisons const calcButtonCl = calcPage.getCalculateButton(); @@ -127,16 +126,16 @@ describe("ngHyd − Passe à Bassins", () => { await scrollPageToTop(); // generate PAB const genButton = calcPage.getGeneratePabButton(); - await genButton.isPresent(); + await genButton.isExisting(); await genButton.isDisplayed(); await genButton.click(); const nbBassins = calcPage.getInputById("generatePabNbBassins"); - await nbBassins.clear(); - await nbBassins.sendKeys("9"); + await nbBassins.clearValue(); + await nbBassins.setValue("9"); // click "Generate" - await element(by.css("dialog-generate-pab button#do-generate")).click(); - await browser.sleep(1000); + await $("dialog-generate-pab button#do-generate").click(); + await browser.pause(1000); // calculate PAB const calcButtonPAB = calcPage.getCalculateButton(); @@ -154,7 +153,7 @@ describe("ngHyd − Passe à Bassins", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("from a Cloisons among many", async () => { @@ -168,14 +167,14 @@ describe("ngHyd − Passe à Bassins", () => { // choose one of them and change its parameters await navbar.clickCalculatorTab(1); const Z1 = calcPage.getInputById("Z1"); - await Z1.clear(); - await Z1.sendKeys("114"); + await Z1.clearValue(); + await Z1.setValue("114"); const LB = calcPage.getInputById("LB"); - await LB.clear(); - await LB.sendKeys("11.5"); + await LB.clearValue(); + await LB.setValue("11.5"); const DH = calcPage.getInputById("DH"); - await DH.clear(); - await DH.sendKeys("0.72"); + await DH.clearValue(); + await DH.setValue("0.72"); // calculate Cloisons const calcButtonCl = calcPage.getCalculateButton(); @@ -188,27 +187,27 @@ describe("ngHyd − Passe à Bassins", () => { await genButton.click(); const debit = calcPage.getInputById("generatePabDebit"); expect(await debit.getAttribute("value")).toBe("0.564"); - await debit.clear(); - await browser.sleep(300); + await debit.clearValue(); + await browser.pause(300); // send "1.6" in 3 movements, because "." triggers an error and Angular can't cope with the subsequent keys - await debit.sendKeys("1"); - await browser.sleep(300); - await debit.sendKeys("."); - await browser.sleep(300); - await debit.sendKeys("6"); - await browser.sleep(300); + await debit.setValue("1"); + await browser.pause(300); + await debit.setValue("."); + await browser.pause(300); + await debit.setValue("6"); + await browser.pause(300); const coteAmont = calcPage.getInputById("generatePabCoteAmont"); expect(await coteAmont.getAttribute("value")).toBe("114"); - await coteAmont.clear(); - await coteAmont.sendKeys("115"); + await coteAmont.clearValue(); + await coteAmont.setValue("115"); const nbBassins = calcPage.getInputById("generatePabNbBassins"); expect(await nbBassins.getAttribute("value")).toBe("6"); - await nbBassins.clear(); - await nbBassins.sendKeys("5"); + await nbBassins.clearValue(); + await nbBassins.setValue("5"); // click "Generate" - await element(by.css("dialog-generate-pab button#do-generate")).click(); - await browser.sleep(1000); + await $("dialog-generate-pab button#do-generate").click(); + await browser.pause(1000); // check parameters values const P_Q = calcPage.getInputById("Q"); @@ -217,8 +216,8 @@ describe("ngHyd − Passe à Bassins", () => { expect(await P_Z2.getAttribute("value")).toBe("111.4"); // check number of basins - const innerFieldsets = element.all(by.css("td.basin_number")); - expect(await innerFieldsets.count()).toBe(5); + const innerFieldsets = $$("td.basin_number"); + expect(await innerFieldsets.length).toBe(5); // calculate PAB const calcButton = calcPage.getCalculateButton(); @@ -234,24 +233,24 @@ describe("ngHyd − Passe à Bassins", () => { await startPage.navigateTo(); // load await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-pab-complete.json"); - await browser.sleep(500); + await browser.pause(500); // check existence of the loaded modules - expect(await navbar.getAllCalculatorTabs().count()).toBe(6); + expect(await navbar.getAllCalculatorTabs().length).toBe(6); // check parameters values await navbar.clickCalculatorTab(5); - await browser.sleep(700); + await browser.pause(700); const P_Q = calcPage.getInputById("Q"); expect(await P_Q.getAttribute("value")).toBe("0.275"); const P_Z2 = calcPage.getInputById("Z2"); expect(await P_Z2.getAttribute("value")).toBe("74.865"); // check number of basins - const innerFieldsets = element.all(by.css("td.basin_number")); - expect(await innerFieldsets.count()).toBe(15); + const innerFieldsets = $$("td.basin_number"); + expect(await innerFieldsets.length).toBe(15); // calculate PAB const calcButton = calcPage.getCalculateButton(); @@ -270,13 +269,13 @@ describe("ngHyd − Passe à Bassins", () => { await startPage.navigateTo(); // load await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-pab-regulee-variee.json"); - await browser.sleep(500); + await browser.pause(500); // check existence of the loaded module - expect(await navbar.getAllCalculatorTabs().count()).toBe(1); + expect(await navbar.getAllCalculatorTabs().length).toBe(1); await navbar.clickCalculatorTab(0); // calculate @@ -287,13 +286,13 @@ describe("ngHyd − Passe à Bassins", () => { expect(hasResults).toBe(true); // check presence of logs - await browser.sleep(300); + await browser.pause(300); expect(await calcPage.nbLogEntries()).toBe(2); // change iteration const pve = calcPage.getSelectById("pab-variating-element"); await changeSelectValue(pve, 3); - await browser.sleep(300); + await browser.pause(300); // check absence of logs expect(await calcPage.nbLogEntries()).toBe(2); }); diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index 0653fbe85..4d257594b 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -21,14 +20,14 @@ describe("Check calculated parameter remains the same when copying a structure", // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("", async () => { // open "fish ladder: cross walls" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await browser.sleep(200); + await browser.pause(200); // check L in first structure calc toggle is not checked const L1 = calcPage.getInputById("0_L"); diff --git a/e2e/predam-empty-fields.e2e-spec.ts b/e2e/predam-empty-fields.e2e-spec.ts index 1c9f5dd98..8c4182b1a 100644 --- a/e2e/predam-empty-fields.e2e-spec.ts +++ b/e2e/predam-empty-fields.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -23,9 +22,9 @@ describe("ngHyd − check that predam fields are empty", () => { beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("on creation", async () => { @@ -33,7 +32,7 @@ describe("ngHyd − check that predam fields are empty", () => { // open predam calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // check upstream inputs await calcPage.checkEmptyInput("Q"); @@ -41,26 +40,26 @@ describe("ngHyd − check that predam fields are empty", () => { await calcPage.checkEmptyInput("Z2"); // check basin 1 inputs - let node = element(by.css("g.node.basin")); + let node = $("g.node.basin"); await node.click(); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyInput("0_S"); await calcPage.checkEmptyInput("0_ZF"); // check walls inputs - const walls = element.all(by.css("g.node.wall")); - expect(walls.count()).toEqual(2); + const walls = $$("g.node.wall"); + expect(walls.length).toEqual(2); await walls.each(async (w) => { await w.click(); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyInput("0_ZDV"); await calcPage.checkEmptyInput("0_L"); }); // check downstream basin inputs - node = element(by.css("g[id^='flowchart-aval-']")); // Mermaid generated id + node = $("g[id^='flowchart-aval-']"); // Mermaid generated id await node.click(); - await browser.sleep(200); + await browser.pause(200); calcPage.checkEmptyInput("Q"); // Z1 is calculated calcPage.checkEmptyInput("Z2"); @@ -70,12 +69,12 @@ describe("ngHyd − check that predam fields are empty", () => { // open predam calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // add basin - const addBasinBtn = element(by.id("add-basin")); + const addBasinBtn = $("#add-basin"); await addBasinBtn.click(); - await browser.sleep(200); + await browser.pause(200); // check "surface" input is empty let inp = calcPage.getInputById("3_S"); @@ -92,14 +91,14 @@ describe("ngHyd − check that predam fields are empty", () => { // open predam calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // add wall - const addWallBtn = element(by.id("add-wall")); + const addWallBtn = $("#add-wall"); await addWallBtn.click(); // connect basins - const connectBasinsBtn = element(by.id("validate-connect-basins")); + const connectBasinsBtn = $("#validate-connect-basins"); await connectBasinsBtn.click(); // check ZDV input is empty diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 7b3a51cf7..102fb8194 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -20,9 +19,9 @@ describe("check that low iteration count leads to log messages", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(100); + await browser.pause(100); }); it("", async () => { @@ -34,7 +33,7 @@ describe("check that low iteration count leads to log messages", () => { // open predam calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // run calculation const calcButton = calcPage.getCalculateButton(); diff --git a/e2e/preferences.e2e-spec.ts b/e2e/preferences.e2e-spec.ts index e7c3d95f3..6b00a4d81 100644 --- a/e2e/preferences.e2e-spec.ts +++ b/e2e/preferences.e2e-spec.ts @@ -1,5 +1,4 @@ import { PreferencesPage } from "./preferences.po"; -import { browser } from "protractor"; /** * Open app preferences, check the default values, the validators, the language change @@ -38,14 +37,14 @@ describe("ngHyd − preferences page", () => { const numericFields = page.getNumericFormFields(); await numericFields.each(async (nf) => { // add a letter after the numerical value - await page.getInputForField(nf).sendKeys("d"); - expect(page.getErrorsForField(nf).isPresent()).toBe(true); + await page.getInputForField(nf).setValue("d"); + expect(page.getErrorsForField(nf).isExisting()).toBe(true); // empty input - await page.getInputForField(nf).clear(); - expect(page.getErrorsForField(nf).isPresent()).toBe(true); + await page.getInputForField(nf).clearValue(); + expect(page.getErrorsForField(nf).isExisting()).toBe(true); // send bad value - await page.getInputForField(nf).sendKeys("50000"); - expect(page.getErrorsForField(nf).isPresent()).toBe(true); + await page.getInputForField(nf).setValue("50000"); + expect(page.getErrorsForField(nf).isExisting()).toBe(true); }); }); @@ -53,18 +52,18 @@ describe("ngHyd − preferences page", () => { const numericFields = page.getNumericFormFields(); await numericFields.each(async (nf) => { // send correct value - await page.getInputForField(nf).clear(); - await page.getInputForField(nf).sendKeys("1"); - expect(page.getErrorsForField(nf).isPresent()).toBe(false); + await page.getInputForField(nf).clearValue(); + await page.getInputForField(nf).setValue("1"); + expect(page.getErrorsForField(nf).isExisting()).toBe(false); }); }); it("when language is changed, language should change", async () => { await page.changeLanguage(0); - await browser.sleep(200); + await browser.pause(200); const val1 = await page.getHeader1().getText(); await page.changeLanguage(1); - await browser.sleep(200); + await browser.pause(200); const val2 = await page.getHeader1().getText(); expect(val1).not.toEqual(val2); }); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 39604b8cb..401b32dca 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -1,33 +1,32 @@ -import { browser, by, element, ElementFinder } from "protractor"; import { changeSelectValue } from "./util.po"; export class PreferencesPage { navigateTo() { - return browser.get("/#/setup"); + return browser.url("/#/setup"); } getHeader1() { - return element(by.css("h1")); + return $("h1"); } getLanguageSelect() { - return element(by.css(`mat-select[data-testid="language-select"]`)); + return $(`mat-select[data-testid="language-select"]`); } getEmptyFieldsCheckbox() { - return element(by.css(`mat-checkbox#cb_emptyFields`)); + return $(`mat-checkbox#cb_emptyFields`); } getInputLabels() { - return element.all(by.css("label.mat-form-field-label")); + return $$("label.mat-form-field-label"); } getNumericFormFields() { - return element.all(by.css(`mat-form-field[data-testclass="numeric-input"]`)); + return $$(`mat-form-field[data-testclass="numeric-input"]`); } getInputForField(ff: ElementFinder) { - return ff.element(by.css("input")); + return ff.$("input"); } /** @@ -35,11 +34,11 @@ export class PreferencesPage { */ getInputFromName(name: string) { const cssSelector: string = `input[name="${name}"]`; - return element(by.css(cssSelector)); + return $(cssSelector); } getErrorsForField(ff: ElementFinder) { - return ff.element(by.css("mat-error")); + return ff.$("mat-error"); } async changeLanguage(index: number) { @@ -49,7 +48,7 @@ export class PreferencesPage { async enableEvilEmptyFields() { const cb = this.getEmptyFieldsCheckbox(); - const underlyingCB = cb.element(by.css(`input.mat-checkbox-input`)); + const underlyingCB = cb.$(`input.mat-checkbox-input`); if (!underlyingCB.isSelected()) { await cb.click(); } @@ -57,7 +56,7 @@ export class PreferencesPage { async disableEvilEmptyFields() { const cb = this.getEmptyFieldsCheckbox(); - const underlyingCB = cb.element(by.css(`input.mat-checkbox-input`)); + const underlyingCB = cb.$(`input.mat-checkbox-input`); if (underlyingCB.isSelected()) { await cb.click(); } @@ -69,7 +68,7 @@ export class PreferencesPage { */ async setEmptyFields(b: boolean) { await this.navigateTo(); - await browser.sleep(200); + await browser.pause(200); if (b) { await this.enableEvilEmptyFields(); @@ -77,12 +76,12 @@ export class PreferencesPage { else { await this.disableEvilEmptyFields(); } - await browser.sleep(200); + await browser.pause(200); } async setIterationCount(n: number) { const input = this.getInputFromName("nmi"); - input.clear(); - await input.sendKeys(n.toString()); + input.clearValue(); + await input.setValue(n.toString()); } } diff --git a/e2e/pressure-loss-empty-fields.e2e-spec.ts b/e2e/pressure-loss-empty-fields.e2e-spec.ts index f02085bc3..b040c04cc 100644 --- a/e2e/pressure-loss-empty-fields.e2e-spec.ts +++ b/e2e/pressure-loss-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; @@ -22,19 +21,19 @@ describe("Check fields are empty in 'pressure loss' calculator when created with // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("with Lechapt-Calmon pressure loss law", async () => { // open "pressure loss" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(35); - await browser.sleep(200); + await browser.pause(200); // select Lechapt-Calmon pressure loss law const materialSelect = calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 0); - await browser.sleep(200); + await browser.pause(200); expect(calcPage.checkEmptyOrFilledFields(["Q", "D", "Lg", "Kloc"], [true, true, true, true])); }); diff --git a/e2e/pressure-loss.e2e-spec.ts b/e2e/pressure-loss.e2e-spec.ts index af37c218b..38b8e993a 100644 --- a/e2e/pressure-loss.e2e-spec.ts +++ b/e2e/pressure-loss.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; @@ -22,7 +21,7 @@ describe("Pressure loss - ", () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); describe("modify pressure loss law displays the appropriate fields - ", () => { @@ -30,12 +29,12 @@ describe("Pressure loss - ", () => { // open "pressure loss" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(35); - await browser.sleep(200); + await browser.pause(200); // select Lechapt-Calmon pressure loss law const materialSelect = calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 0); - await browser.sleep(200); + await browser.pause(200); // check inputs presence expect(await calcPage.isNgParamPresent("Q")).toBe(true); @@ -54,18 +53,18 @@ describe("Pressure loss - ", () => { // open "pressure loss" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(35); - await browser.sleep(200); + await browser.pause(200); // select Strickler pressure loss law const materialSelect = calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 1); - await browser.sleep(200); + await browser.pause(200); debugger // check inputs presence - const ks = element(by.id("0_Ks")); - expect(await ks.isPresent()).toBe(true); // isNgParamPresent does not work on "0_Ks". Why ? Mystery... + const ks = $("#0_Ks"); + expect(await ks.isExisting()).toBe(true); // isNgParamPresent does not work on "0_Ks". Why ? Mystery... expect(await calcPage.isNgParamPresent("Q")).toBe(true); expect(await calcPage.isNgParamPresent("D")).toBe(true); diff --git a/e2e/regime-uniforme-empty-fields.e2e-spec.ts b/e2e/regime-uniforme-empty-fields.e2e-spec.ts index 6c5f1887f..636ba6336 100644 --- a/e2e/regime-uniforme-empty-fields.e2e-spec.ts +++ b/e2e/regime-uniforme-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -21,14 +20,14 @@ describe("Check fields are empty in 'uniform flow' calculator when created with // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("", async () => { // open "uniform flow" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); - await browser.sleep(200); + await browser.pause(200); expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])) }); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index e6a584333..80fb6cd12 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; -import { browser } from "protractor"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; @@ -28,7 +27,7 @@ describe("ngHyd − remous", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when leaving calculated remous page then coming back to it, logs should not be duplicated", async () => { @@ -36,20 +35,20 @@ describe("ngHyd − remous", () => { // 1. create new Remous await listPage.clickMenuEntryForCalcType(4); - await browser.sleep(300); + await browser.pause(300); // 2. calculate it, there should be 6 messages in the log await calcPage.getCalculateButton().click(); expect(await calcPage.nbLogEntries()).toBe(6); - await browser.sleep(300); + await browser.pause(300); // 3. go to home page (simplest example) await navBar.clickNewCalculatorButton(); - await browser.sleep(300); + await browser.pause(300); // 4. go back to Remous await navBar.clickCalculatorTab(0); - await browser.sleep(300); + await browser.pause(300); // 5. there should still be 6 messages in the log expect(await calcPage.nbLogEntries()).toBe(6); @@ -60,17 +59,17 @@ describe("ngHyd − remous", () => { // 1. create new Remous await listPage.clickMenuEntryForCalcType(4); - await browser.sleep(300); + await browser.pause(300); // 2. Set to trapezoidal section with bank slope of 2m/m and 20 meter width bed await changeSelectValue(calcPage.getSelectById("select_section"), 2); - await browser.sleep(300); - await calcPage.getInputById("LargeurFond").clear(); - await browser.sleep(300); - await calcPage.getInputById("LargeurFond").sendKeys("20"); - await calcPage.getInputById("Fruit").clear(); - await browser.sleep(300); - await calcPage.getInputById("Fruit").sendKeys("2"); + await browser.pause(300); + await calcPage.getInputById("LargeurFond").clearValue(); + await browser.pause(300); + await calcPage.getInputById("LargeurFond").setValue("20"); + await calcPage.getInputById("Fruit").clearValue(); + await browser.pause(300); + await calcPage.getInputById("Fruit").setValue("2"); // 3. Calculate, the calculation should succeed await calcPage.getCalculateButton().click(); @@ -81,15 +80,15 @@ describe("ngHyd − remous", () => { it("Check that calculation with dx >= reach length fails", async () => { // load backwater curve session file with Dx>=Long await navBar.clickMenuButton(); - await browser.sleep(500); + await browser.pause(500); await sidenav.clickLoadSessionButton(); - await browser.sleep(500); + await browser.pause(500); await sidenav.loadSessionFile("./session/session-remous-dx-bief.json"); - await browser.sleep(1000); + await browser.pause(1000); // Calculate, the calculation should fail await calcPage.getCalculateButton().click(); - await browser.sleep(1000); + await browser.pause(1000); // check error message in log expect(await calcPage.nbLogEntries()).toBe(1); diff --git a/e2e/reset-param-mode.e2e-spec.ts b/e2e/reset-param-mode.e2e-spec.ts index b4c87cf4e..f8a061df1 100644 --- a/e2e/reset-param-mode.e2e-spec.ts +++ b/e2e/reset-param-mode.e2e-spec.ts @@ -1,5 +1,4 @@ import { ListPage } from "./list.po"; -import { browser, by, element } from "protractor"; /** * Parameter mode should be set to its previous mode (fixed/var/...) when cancel is pressed @@ -15,26 +14,26 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { it("when min/max/list values dialog is cancelled on 'fish ladder: fall' calculator", async () => { // start page await listPage.navigateTo(); - await browser.sleep(500); + await browser.pause(500); // open 'PAB fall' calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(500); + await browser.pause(500); // click "calc" radio on Z1 parameter - const z1calcbtn = element(by.id("mat-button-toggle-3")); + const z1calcbtn = $("#mat-button-toggle-3"); await z1calcbtn.click(); - await browser.sleep(200); + await browser.pause(200); // click "var" radio on Z1 parameter - const z1varbtn = element(by.id("mat-button-toggle-2")); + const z1varbtn = $("#mat-button-toggle-2"); await z1varbtn.click(); - await browser.sleep(200); + await browser.pause(200); // click cancel button - const cancelbtn = element(by.id("btn-cancel")); + const cancelbtn = $("#btn-cancel"); await cancelbtn.click(); - await browser.sleep(200); + await browser.pause(200); // check Z1 var toggle is not checked expect(await z1varbtn.getAttribute("ng-reflect-checked")).toBe("false"); @@ -46,32 +45,32 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { it("when min/max/list values dialog is cancelled on 'fish ladder' calculator", async () => { // start page await listPage.navigateTo(); - await browser.sleep(500); + await browser.pause(500); // open PAB calculator await listPage.clickMenuEntryForCalcType(15); - await browser.sleep(500); + await browser.pause(500); // "fixed" radio on Q parameter - const qfixbtn = element(by.id("mat-button-toggle-1")); - await browser.sleep(50); + const qfixbtn = $("#mat-button-toggle-1"); + await browser.pause(50); // "var" radio on Z1 parameter - const z1varbtn = element(by.id("mat-button-toggle-6")); - await browser.sleep(50); + const z1varbtn = $("#mat-button-toggle-6"); + await browser.pause(50); // "calc" radio on Z1 parameter - const z1calcbtn = element(by.id("mat-button-toggle-7")); - await browser.sleep(50); + const z1calcbtn = $("#mat-button-toggle-7"); + await browser.pause(50); // click "var" radio on Z1 parameter await z1varbtn.click(); - await browser.sleep(200); + await browser.pause(200); // click cancel button - const cancelbtn = element(by.id("btn-cancel")); + const cancelbtn = $("#btn-cancel"); await cancelbtn.click(); - await browser.sleep(200); + await browser.pause(200); // check Q fix toggle is checked expect(await qfixbtn.getAttribute("ng-reflect-checked")).toBe("true"); diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index e0582c7f0..9d1e3dba6 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; @@ -26,26 +25,26 @@ describe("Check results are reset after application settings modification - ", ( // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); async function runTestWithParamater(param: string, val1: number, val2: number) { // set starting compute precision const input = prefPage.getInputFromName(param); - await input.clear(); - await browser.sleep(20); - await input.sendKeys(val1.toString()); - await browser.sleep(200); + await input.clearValue(); + await browser.pause(20); + await input.setValue(val1.toString()); + await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // click "compute" button const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); // results should be here let hasResults = await calcPage.hasResults(); @@ -53,16 +52,16 @@ describe("Check results are reset after application settings modification - ", ( // reopen settings await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); const setupBtn = sideNav.getSetupButton(); await setupBtn.click(); - await browser.sleep(200); + await browser.pause(200); // modify compute precision - await input.clear(); - await browser.sleep(20); - await input.sendKeys(val2.toString()); - await browser.sleep(200); + await input.clearValue(); + await browser.pause(20); + await input.setValue(val2.toString()); + await browser.pause(200); // back to calculator await navBar.openNthCalculator(0); diff --git a/e2e/section-empty-fields.e2e-spec.ts b/e2e/section-empty-fields.e2e-spec.ts index 9a72987ac..947930354 100644 --- a/e2e/section-empty-fields.e2e-spec.ts +++ b/e2e/section-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -21,14 +20,14 @@ describe("Check fields are empty in 'parametric section' calculator when created // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("", async () => { // open "parametric section" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); - await browser.sleep(200); + await browser.pause(200); expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])); }); diff --git a/e2e/select-default-value.e2e-spec.ts b/e2e/select-default-value.e2e-spec.ts index 9ec1205cd..a1323b092 100644 --- a/e2e/select-default-value.e2e-spec.ts +++ b/e2e/select-default-value.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -21,17 +20,17 @@ describe("check the select default value - ", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); await prefPage.changeLanguage(1); // fr - await browser.sleep(200); + await browser.pause(200); }); it("in the 'backwater curve' calculator", async () => { // open backwater curve calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(4); - await browser.sleep(200); + await browser.pause(200); // in the calculator configuration file, the default resolution method is 'Trapezes'. // let's check this... @@ -44,7 +43,7 @@ describe("check the select default value - ", () => { // open "up/downstream elevations of a reach" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(21); - await browser.sleep(200); + await browser.pause(200); // in the calculator configuration file, the default section method is 'Rectangulaire'. // let's check this... diff --git a/e2e/sidenav.po.ts b/e2e/sidenav.po.ts index 596db0a86..94ba72779 100644 --- a/e2e/sidenav.po.ts +++ b/e2e/sidenav.po.ts @@ -1,65 +1,64 @@ -import { browser, by, element } from "protractor"; import * as path from "path"; export class SideNav { getLoadSessionButton() { - return element(by.css("#side-nav-load-session")); + return $("#side-nav-load-session"); } getNewSessionButton() { - return element(by.css("#side-nav-empty-session")); + return $("#side-nav-empty-session"); } getDiagramButton() { - return element(by.css("#side-nav-diagram")); + return $("#side-nav-diagram"); } getSetupButton() { - return element(by.css("#side-nav-setup")); + return $("#side-nav-setup"); } getFileInput() { - return element(by.css(`dialog-load-session input[type="file"]`)); + return $(`dialog-load-session input[type="file"]`); } getFileLoadButton() { - return element(by.css(`dialog-load-session button[type="submit"]`)); + return $(`dialog-load-session button[type="submit"]`); } getConfirmNewSessionButton() { - return element(by.css(`button#confirm-new-session`)); + return $(`button#confirm-new-session`); } getNotesButton() { - return element(by.css("#side-nav-session-props")); + return $("#side-nav-session-props"); } async clickLoadSessionButton() { const ncb = this.getLoadSessionButton(); - await browser.sleep(500); + await browser.pause(500); await ncb.click(); } async clickDiagramButton() { const ncb = this.getDiagramButton(); - await browser.sleep(500); + await browser.pause(500); await ncb.click(); } async clickNewSessionButton() { const ncb = this.getNewSessionButton(); - await browser.sleep(200); + await browser.pause(200); await ncb.click(); - await browser.sleep(200); + await browser.pause(200); await this.getConfirmNewSessionButton().click(); } async loadSessionFile(file: string, click: boolean = true) { const absolutePath = path.resolve(__dirname, file); const input = this.getFileInput(); - await input.sendKeys(absolutePath); - await browser.sleep(500); + await input.setValue(absolutePath); + await browser.pause(500); if (click) { await this.getFileLoadButton().click(); } @@ -67,7 +66,7 @@ export class SideNav { async clickNotesButton() { const nb = this.getNotesButton(); - await browser.sleep(200); + await browser.pause(200); await nb.click(); } } diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 1b4740864..2b09a3387 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue, scrollPageToTop } from "./util.po"; @@ -29,21 +28,21 @@ describe("Solveur - ", () => { await prefPage.setEmptyFields(false); // force language to prevent issues due to default browser language await prefPage.changeLanguage(1); // fr - await browser.sleep(200); + await browser.pause(200); await navbar.clickNewCalculatorButton(); }); it("load > calculate", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-solveur-chutes.json"); - await browser.sleep(200); + await browser.pause(200); - expect(await navbar.getAllCalculatorTabs().count()).toBe(4); + expect(await navbar.getAllCalculatorTabs().length).toBe(4); await navbar.clickCalculatorTab(3); // n°3 should be the latest // check input values @@ -79,16 +78,16 @@ describe("Solveur - ", () => { it("create > feed > calculate > clone > calculate clone", async () => { // 1. create empty Solveur await listPage.clickMenuEntryForCalcType(22); // Solveur - await browser.sleep(500); + await browser.pause(500); // 2. create PAB:Chute, PAB:Nombre and PAB:Puissance linked to one another await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); // PAB:Chute - await browser.sleep(500); + await browser.pause(500); await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(13); // PAB:Nombre - await browser.sleep(500); + await browser.pause(500); // link DHT to PAB:Chute.DH const dht = calcPage.getInputById("DHT"); await calcPage.setParamMode(dht, "link"); @@ -98,7 +97,7 @@ describe("Solveur - ", () => { await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(6); // PAB:Puissance - await browser.sleep(500); + await browser.pause(500); // link DH to PAB:Nombre.DH const dh_puiss = calcPage.getInputById("DH"); await calcPage.setParamMode(dh_puiss, "link"); @@ -107,10 +106,10 @@ describe("Solveur - ", () => { await navbar.clickCalculatorTab(0); await changeSelectValue(calcPage.getSelectById("select_target_nub"), 1); // "Puissance / PV" - await browser.sleep(500); + await browser.pause(500); await changeSelectValue(calcPage.getSelectById("select_searched_param"), 2); // "Chute / Z2" - await browser.sleep(500); - await calcPage.getInputById("Ytarget").sendKeys("318"); + await browser.pause(500); + await calcPage.getInputById("Ytarget").setValue("318"); // check that "compute" button is active const calcButton = await calcPage.checkCalcButtonEnabled(true); @@ -123,10 +122,10 @@ describe("Solveur - ", () => { await scrollPageToTop(); // otherwise clickCloneCalcButton() fails with "Element is not clickable at point" await calcPage.clickCloneCalcButton(); - await browser.sleep(500); + await browser.pause(500); // 4. check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().count()).toBe(5); + expect(await navbar.getAllCalculatorTabs().length).toBe(5); await navbar.clickCalculatorTab(4); // n°4 should be the latest // check that result is empty @@ -144,24 +143,24 @@ describe("Solveur - ", () => { it("channel flow example > solver > change searched parameter > run calculation", async () => { // open "channel flow with hydraulic structures" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[1].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[1].click(); + await browser.pause(500); // select solver tab await navbar.clickCalculatorTab(3); - await browser.sleep(500); + await browser.pause(500); // modify searched parameter const sel = calcPage.getSelectById("select_searched_param"); await changeSelectValue(sel, 11); - await browser.sleep(300); + await browser.pause(300); const selText = await calcPage.getSelectValueText(sel); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(500); + await browser.pause(500); // check "search parameter" value has not changed expect(await calcPage.getSelectValueText(sel)).toEqual(selText); @@ -169,13 +168,13 @@ describe("Solveur - ", () => { it("check solver searched parameter is set to 'bottom slope'", async () => { // open "canal critical slope" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[3].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[3].click(); + await browser.pause(500); // select solver tab await navbar.clickCalculatorTab(2); - await browser.sleep(500); + await browser.pause(500); // check selected searched parameter text const sel = calcPage.getSelectById("select_searched_param"); @@ -202,10 +201,10 @@ describe("Solveur - nghyd#601 with empty fields option", () => { async function openCalculator(id: number) { await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(id); - await browser.sleep(200); + await browser.pause(200); } async function openSolver() { @@ -223,10 +222,10 @@ describe("Solveur - nghyd#601 with empty fields option", () => { // check inputs are empty await calcPage.checkEmptyInput("Ytarget"); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyInput("Xinit"); - await browser.sleep(200); + await browser.pause(200); }); it("check solver with empty fields option does not fill target parameter input", async () => { @@ -239,43 +238,43 @@ describe("Solveur - nghyd#601 with empty fields option", () => { // link Q to first calculator's const inpQ = calcPage.getInputById("Q"); await calcPage.setParamMode(inpQ, "link"); - await browser.sleep(200); + await browser.pause(200); // open new solver calculator await openSolver(); // check target parameter input is empty await calcPage.checkEmptyInput("Ytarget"); - await browser.sleep(200); + await browser.pause(200); // check initial value input is not empty await calcPage.checkEmptyInput("Xinit"); - await browser.sleep(200); + await browser.pause(200); }); it("check removing and recreating solver with empty fields option does not fill target parameter input", async () => { await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open "channel flow with hydraulic structures" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[1].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[1].click(); + await browser.pause(500); // close existing "solver" calculator await navBar.middleClickCalculatorTab(3); - await browser.sleep(500); + await browser.pause(500); // open new solver calculator await openSolver(); // check target parameter input is empty await calcPage.checkEmptyInput("Ytarget"); - await browser.sleep(200); + await browser.pause(200); // check initial value input is not empty await calcPage.checkEmptyInput("Xinit", false); - await browser.sleep(200); + await browser.pause(200); }); }); @@ -297,10 +296,10 @@ describe("Solveur - nghyd#601 without empty fields option", () => { async function openCalculator(id: number) { await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(id); - await browser.sleep(200); + await browser.pause(200); } async function openSolver() { @@ -320,10 +319,10 @@ describe("Solveur - nghyd#601 without empty fields option", () => { // check inputs are empty await calcPage.checkEmptyInput("Ytarget"); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyInput("Xinit"); - await browser.sleep(200); + await browser.pause(200); }); it("check solver without empty fields option fills inputs", async () => { @@ -336,65 +335,65 @@ describe("Solveur - nghyd#601 without empty fields option", () => { // link Q to first calculator's const inpQ = calcPage.getInputById("Q"); await calcPage.setParamMode(inpQ, "link"); - await browser.sleep(200); + await browser.pause(200); // open new solver calculator await openSolver(); // check target parameter input is not empty await calcPage.checkEmptyInput("Ytarget", false); - await browser.sleep(200); + await browser.pause(200); // check initial value input is not empty await calcPage.checkEmptyInput("Xinit", false); - await browser.sleep(200); + await browser.pause(200); }); it("check removing and recreating solver without empty fields option fills inputs", async () => { await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open "channel flow with hydraulic structures" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[1].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[1].click(); + await browser.pause(500); // close existing "solver" calculator await navBar.middleClickCalculatorTab(3); - await browser.sleep(500); + await browser.pause(500); // open new solver calculator await openSolver(); // check target parameter input is not empty await calcPage.checkEmptyInput("Ytarget", false); - await browser.sleep(200); + await browser.pause(200); // check initial value input is not empty await calcPage.checkEmptyInput("Xinit", false); - await browser.sleep(200); + await browser.pause(200); }); it(" with empty fields option, check selecting a target module does not fill inputs", async () => { // enable evil option "empty fields on module creation" await prefPage.setEmptyFields(true); - await browser.sleep(200); + await browser.pause(200); await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open "channel flow with hydraulic structures" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[1].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[1].click(); + await browser.pause(500); // close existing "solver" calculator await navBar.middleClickCalculatorTab(3); - await browser.sleep(500); + await browser.pause(500); // open new solver calculator await openSolver(); - await browser.sleep(500); + await browser.pause(500); // select other target module const ntc = calcPage.getSelectById("select_target_nub"); @@ -402,7 +401,7 @@ describe("Solveur - nghyd#601 without empty fields option", () => { // check target value input is empty await calcPage.checkEmptyInput("Ytarget", true); - await browser.sleep(200); + await browser.pause(200); }); }); @@ -421,10 +420,10 @@ describe("Solveur - nghyd#606 - a single module cannot be used with solver", () async function openCalculator(id: number) { await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(id); - await browser.sleep(200); + await browser.pause(200); } async function openSolver() { @@ -448,7 +447,7 @@ describe("Solveur - nghyd#606 - a single module cannot be used with solver", () // set speed as target parameter const trs = calcPage.getSelectById("select_target_result"); await changeSelectValue(trs, 1); - await browser.sleep(200); + await browser.pause(200); // check searched parameter has options const sps = calcPage.getSelectById("select_searched_param"); diff --git a/e2e/translation.e2e-spec.ts b/e2e/translation.e2e-spec.ts index ca1b51b31..00f0e3316 100644 --- a/e2e/translation.e2e-spec.ts +++ b/e2e/translation.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser, by } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; @@ -28,12 +27,12 @@ describe("Check translation", () => { // *** results in french *** prefPage.changeLanguage(1); // fr - await browser.sleep(200); + await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // set Z2 to variated mode const inpZ2 = calcPage.getInputById("Z2"); @@ -41,7 +40,7 @@ describe("Check translation", () => { // run calculation await calcPage.getCalculateButton().click(); - await browser.sleep(500); + await browser.pause(500); // "variable for X axis" select label const selXaxis = calcPage.getSelectById("selectX"); @@ -53,30 +52,30 @@ describe("Check translation", () => { // fixed results variables const frr = calcPage.getAllFixedResultsRows(); - let lbl1 = await frr.all(by.css("td")).get(0).getText(); + let lbl1 = await frr.$$("td")[0].getText(); expect(lbl1).toEqual("Cote amont (m)"); // variated results headers const vrh = calcPage.getAllVariatedResultsTableHeaders(); - let lbl2 = await vrh.get(0).getText(); + let lbl2 = await vrh[0].getText(); expect(lbl2).toEqual("Cote aval"); - let lbl3 = await vrh.get(1).getText(); + let lbl3 = await vrh[1].getText(); expect(lbl3).toEqual("Chute (m)"); // *** results in english *** // setup -> english await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); const setupBtn = sideNav.getSetupButton(); await setupBtn.click(); - await browser.sleep(200); + await browser.pause(200); await prefPage.changeLanguage(0); // en - await browser.sleep(200); + await browser.pause(200); // back to calculator await navBar.clickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // "variable for X axis" select label expect(await calcPage.getMatselectCurrentOptionText(selXaxis)).toEqual("Downstream elevation"); @@ -85,13 +84,13 @@ describe("Check translation", () => { expect(await calcPage.getMatselectCurrentOptionText(selYaxis)).toEqual("DH : Fall (m)"); // fixed results variables - lbl1 = await frr.all(by.css("td")).get(0).getText(); + lbl1 = await frr.$$("td")[0].getText(); expect(lbl1).toEqual("Upstream elevation (m)"); // variated results headers - lbl2 = await vrh.get(0).getText(); + lbl2 = await vrh[0].getText(); expect(lbl2).toEqual("Downstream elevation"); - lbl3 = await vrh.get(1).getText(); + lbl3 = await vrh[1].getText(); expect(lbl3).toEqual("Fall (m)"); }); }); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index aded71c16..3d6b41b9f 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -1,18 +1,16 @@ -import { ElementFinder, browser, by, element } from "protractor"; - /** * scroll page to make element visible */ export async function scrollToElement(elem: ElementFinder) { - await browser.executeScript("arguments[0].scrollIntoView({ block: 'center' });", elem.getWebElement()); - await browser.sleep(50); + await browser.execute("arguments[0].scrollIntoView({ block: 'center' });", elem); + await browser.pause(50); } /** * scroll page to top */ export async function scrollPageToTop() { - await browser.executeScript("window.scrollTo(0, 0);"); + await browser.execute("window.scrollTo(0, 0);"); } /** @@ -31,7 +29,7 @@ export function expectNumber(msg: string, val: number, expected: number) { export async function changeSelectValue(elt: ElementFinder, index: number) { await elt.click(); const optionId = ".cdk-overlay-container mat-option:nth-of-type(" + (index + 1) + ")"; - const option = element(by.css(optionId)); + const option = $(optionId); await option.click(); - await browser.sleep(200); + await browser.pause(200); } diff --git a/e2e/valeurs-erronees.e2e-spec.ts b/e2e/valeurs-erronees.e2e-spec.ts index 73f815a39..716ce4060 100644 --- a/e2e/valeurs-erronees.e2e-spec.ts +++ b/e2e/valeurs-erronees.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -20,37 +19,37 @@ describe("ngHyd - check invalid values are removed - ", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when switching to another calculator", async () => { // open PAB dimensions calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); - await browser.sleep(200); + await browser.pause(200); // modify W input with invalid value const inputW = calcPage.getInputById("W"); - await browser.sleep(200); - await inputW.clear(); - await browser.sleep(200); - await inputW.sendKeys("-1"); - await browser.sleep(200); + await browser.pause(200); + await inputW.clearValue(); + await browser.pause(200); + await inputW.setValue("-1"); + await browser.pause(200); // open another calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // back to first calculator await navBar.openNthCalculator(0); - await browser.sleep(200); + await browser.pause(200); // check invalid value is removed const w = await inputW.getAttribute("value"); - await browser.sleep(200); + await browser.pause(200); expect(w).toEqual(""); // check that "compute" button is disabled diff --git a/e2e/variable-param-cancel.e2e-spec.ts b/e2e/variable-param-cancel.e2e-spec.ts index c76b73945..46219fd4b 100644 --- a/e2e/variable-param-cancel.e2e-spec.ts +++ b/e2e/variable-param-cancel.e2e-spec.ts @@ -1,5 +1,4 @@ import { ListPage } from "./list.po"; -import { by, element } from "protractor"; /** * Check that a cancel button is present in min/max/list edition dialog @@ -20,11 +19,11 @@ describe("ngHyd - check cancel button for variable parameters - ", () => { await listPage.clickMenuEntryForCalcType(12); // click "var" radio on Z1 parameter - const z1btn = element(by.id("mat-button-toggle-2-button")); + const z1btn = $("#mat-button-toggle-2-button"); await z1btn.click(); // cancel button presence - const cancelbtn = element(by.id("btn-cancel")); - expect(await cancelbtn.isPresent() && await cancelbtn.isDisplayed()).toBeTruthy(); + const cancelbtn = $("#btn-cancel"); + expect((await cancelbtn.isExisting()) && (await cancelbtn.isDisplayed())).toBeTruthy(); }); }); -- GitLab From 54aa396d47e064f1a53fea7a832b47627c15bdf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 13:56:53 +0200 Subject: [PATCH 238/285] test(e2e): add @wdio/types NPM package refs #618 --- package-lock.json | 3 +-- package.json | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 98cf0980e..ae33daccd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", "@wdio/codemod": "^0.12.0", + "@wdio/types": "^8.8.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", "core-js": "^3.23.3", @@ -6021,7 +6022,6 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.8.0.tgz", "integrity": "sha512-Ai6yIlwWB32FUfvQKCqSa6nSyHIhSF5BOU9OfE7I2XYkLAJTxu8B6NORHQ+rgoppHSWc4D2V9r21y3etF8AGnQ==", - "dev": true, "dependencies": { "@types/node": "^18.0.0" }, @@ -30464,7 +30464,6 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.8.0.tgz", "integrity": "sha512-Ai6yIlwWB32FUfvQKCqSa6nSyHIhSF5BOU9OfE7I2XYkLAJTxu8B6NORHQ+rgoppHSWc4D2V9r21y3etF8AGnQ==", - "dev": true, "requires": { "@types/node": "^18.0.0" } diff --git a/package.json b/package.json index faa6dfc19..da623ef02 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", "@wdio/codemod": "^0.12.0", + "@wdio/types": "^8.8.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", "core-js": "^3.23.3", -- GitLab From 27cd0d484c60eb440328054012eb2b7141beaf60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 14:04:29 +0200 Subject: [PATCH 239/285] test(e2e): configure wdio to point to e2e folder refs #618 --- wdio.conf.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wdio.conf.ts b/wdio.conf.ts index e17de0a7e..8f5d4c440 100644 --- a/wdio.conf.ts +++ b/wdio.conf.ts @@ -10,7 +10,7 @@ export const config: Options.Testrunner = { autoCompileOpts: { autoCompile: true, tsNodeOpts: { - project: './test/tsconfig.json', + project: './e2e/tsconfig.e2e.json', transpileOnly: true } }, @@ -33,7 +33,7 @@ export const config: Options.Testrunner = { // will be called from there. // specs: [ - './test/specs/**/*.ts' + './e2e/**/*.ts' ], // Patterns to exclude. exclude: [ -- GitLab From 50c3266533b6131a785fa4f7339dc76802f65ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 14:06:13 +0200 Subject: [PATCH 240/285] test(e2e): add @wdio/globals NPM package to fix VSCode error messages refs #618 --- e2e/bief-empty-fields.e2e-spec.ts | 1 + e2e/calculator.po.ts | 1 + e2e/list.po.ts | 2 + e2e/navbar.po.ts | 2 + e2e/preferences.po.ts | 1 + e2e/util.po.ts | 2 + package-lock.json | 927 +++++++++++++++--------------- package.json | 1 + 8 files changed, 473 insertions(+), 464 deletions(-) diff --git a/e2e/bief-empty-fields.e2e-spec.ts b/e2e/bief-empty-fields.e2e-spec.ts index bf33f257a..6977ce3ee 100644 --- a/e2e/bief-empty-fields.e2e-spec.ts +++ b/e2e/bief-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'up/downstream elevations of a reach' calculator when created with 'empty fields' option", () => { let listPage: ListPage; diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 7e2074d14..07a745a13 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -1,4 +1,5 @@ import { scrollPageToTop, scrollToElement } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' export class CalculatorPage { diff --git a/e2e/list.po.ts b/e2e/list.po.ts index 7d09d78bc..bfe96bb14 100644 --- a/e2e/list.po.ts +++ b/e2e/list.po.ts @@ -1,3 +1,5 @@ +import { browser, $, $$, expect } from '@wdio/globals' + export class ListPage { navigateTo() { return browser.url("/#/list"); diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index 9343ede38..aa2c8630d 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -1,3 +1,5 @@ +import { browser, $, $$, expect } from '@wdio/globals' + export class Navbar { getAllCalculatorTabs() { return $$("#tabs-container button.calculator-button"); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 401b32dca..49e057669 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -1,4 +1,5 @@ import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' export class PreferencesPage { navigateTo() { diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 3d6b41b9f..d4c99fb85 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -1,3 +1,5 @@ +import { browser, $, $$, expect } from '@wdio/globals' + /** * scroll page to make element visible */ diff --git a/package-lock.json b/package-lock.json index ae33daccd..32150d1ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", "@wdio/codemod": "^0.12.0", + "@wdio/globals": "^8.8.2", "@wdio/types": "^8.8.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", @@ -3880,7 +3881,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, + "devOptional": true, "dependencies": { "jest-get-type": "^29.4.3" }, @@ -3892,7 +3893,7 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, + "devOptional": true, "dependencies": { "@sinclair/typebox": "^0.25.16" }, @@ -3904,7 +3905,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, + "devOptional": true, "dependencies": { "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -3921,7 +3922,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3936,7 +3937,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3952,7 +3953,7 @@ "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, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3964,13 +3965,13 @@ "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 + "devOptional": true }, "node_modules/@jest/types/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, + "devOptional": true, "engines": { "node": ">=8" } @@ -3979,7 +3980,7 @@ "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, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4269,7 +4270,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.0.tgz", "integrity": "sha512-3iB5pWn9Sr55PKKwqFWSWjLsTKCOEhKNI+uV3BZesgXuA3IhsX8I3hW0HI+3ksMIPkh2mVYzKSpvgq3oicjG2Q==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -4299,7 +4300,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, + "devOptional": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -4313,7 +4314,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -4333,7 +4334,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "dependencies": { "pump": "^3.0.0" }, @@ -4348,7 +4349,7 @@ "version": "17.7.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, + "devOptional": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4382,7 +4383,7 @@ "version": "0.25.24", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true + "devOptional": true }, "node_modules/@sindresorhus/is": { "version": "0.14.0", @@ -4600,7 +4601,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true + "devOptional": true }, "node_modules/@types/http-proxy": { "version": "1.17.9", @@ -4614,13 +4615,13 @@ "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 + "devOptional": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -4629,7 +4630,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, + "devOptional": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -4702,7 +4703,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "devOptional": true }, "node_modules/@types/pako": { "version": "1.0.4", @@ -4794,7 +4795,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "devOptional": true }, "node_modules/@types/verror": { "version": "1.10.6", @@ -4807,7 +4808,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", - "dev": true + "devOptional": true }, "node_modules/@types/ws": { "version": "8.5.3", @@ -4821,7 +4822,7 @@ "version": "17.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/yargs-parser": "*" } @@ -4830,7 +4831,7 @@ "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "devOptional": true }, "node_modules/@types/yauzl": { "version": "2.10.0", @@ -5766,7 +5767,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", "integrity": "sha512-gm8gXqpiIR0EU9Blkqmxe+xsEoKS2EXpWrKlx2JXyx3Yf7By0UNsZVZHMSO8lLunzUjYIntpWYpmKmBmnlrnKQ==", - "dev": true, + "devOptional": true, "dependencies": { "@wdio/logger": "8.6.6", "@wdio/types": "8.8.0", @@ -5785,7 +5786,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -5797,7 +5798,7 @@ "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, + "devOptional": true, "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -5815,7 +5816,7 @@ "version": "8.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5830,7 +5831,7 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -5839,7 +5840,6 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.8.2.tgz", "integrity": "sha512-uwImTbqbFlHezAl4qtdXMZtZQo22bhENmt6eQ0pJwevtO1U53ZB4x9uDOYtSym8xKCdZILu46uI/THDm+vm2hA==", - "dev": true, "engines": { "node": "^16.13 || >=18" }, @@ -5889,7 +5889,7 @@ "version": "8.6.6", "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", - "dev": true, + "devOptional": true, "dependencies": { "chalk": "^5.1.2", "loglevel": "^1.6.0", @@ -5904,7 +5904,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -5916,13 +5916,13 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.8.1.tgz", "integrity": "sha512-nDaycUcm/ATLxcjim0fJyRiezXyyj4ZCq+Xf0S2Cubc0k7+DceFBt7KIMsernNVh2pelzFHEEwxh4DLaqQ71Wg==", - "dev": true + "devOptional": true }, "node_modules/@wdio/repl": { "version": "8.6.6", "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.6.6.tgz", "integrity": "sha512-vyJzqHJ5yOmfVyk5WWo6pRsJ2xhgWl3DVIBdDNR0wKrtFcm/g1jnB+pNf6Eb7NhCDh3oGul25bmhAwWDoxcFYA==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "^18.0.0" }, @@ -6033,7 +6033,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", - "dev": true, + "devOptional": true, "dependencies": { "@wdio/logger": "8.6.6", "@wdio/types": "8.8.0", @@ -6639,7 +6639,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", - "dev": true, + "devOptional": true, "dependencies": { "archiver-utils": "^2.1.0", "async": "^3.2.3", @@ -6657,7 +6657,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, + "devOptional": true, "dependencies": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", @@ -6678,7 +6678,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6688,7 +6688,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "devOptional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6708,7 +6708,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6720,13 +6720,13 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "devOptional": true }, "node_modules/archiver/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7135,7 +7135,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.4" }, @@ -7706,7 +7706,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, + "devOptional": true, "engines": { "node": "*" } @@ -8101,7 +8101,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14.16" } @@ -8364,7 +8364,7 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", @@ -8382,7 +8382,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -8459,7 +8459,7 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", - "dev": true, + "devOptional": true, "dependencies": { "mitt": "3.0.0" }, @@ -8477,7 +8477,7 @@ "version": "3.6.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -8894,7 +8894,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", - "dev": true, + "devOptional": true, "dependencies": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", @@ -8909,7 +8909,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9286,7 +9286,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, + "devOptional": true, "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" @@ -9299,7 +9299,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9472,7 +9472,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, + "devOptional": true, "dependencies": { "node-fetch": "2.6.7" } @@ -9599,13 +9599,13 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", - "dev": true + "devOptional": true }, "node_modules/css-value": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", - "dev": true + "devOptional": true }, "node_modules/css-what": { "version": "6.1.0", @@ -10453,7 +10453,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=16.0.0" } @@ -10498,7 +10498,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, + "devOptional": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -10692,7 +10692,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.8.2.tgz", "integrity": "sha512-iD/Xr5rMjx+VD08akiAuiMR5EhWKj9i489rcDm2vdC9iB8u8HY51s9FbmnIrN5OstYma0x2qOF2zKxM/muJTtw==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "^18.0.0", "@wdio/config": "8.8.0", @@ -10717,13 +10717,13 @@ "version": "0.0.1124027", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1124027.tgz", "integrity": "sha512-OT2sdgQn4llM9/tVcCvoty733KFFIlXVvESceJsfazhmg/dF7C5e3Z8cIN8jNwIikixuE5rufGtD1cvKHXfOcQ==", - "dev": true + "devOptional": true }, "node_modules/devtools/node_modules/uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "dev": true, + "devOptional": true, "bin": { "uuid": "dist/bin/uuid" } @@ -10732,7 +10732,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", - "dev": true, + "devOptional": true, "dependencies": { "isexe": "^2.0.0" }, @@ -10762,7 +10762,7 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, + "devOptional": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -11104,7 +11104,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/which": "^2.0.1", "which": "^2.0.2" @@ -11436,7 +11436,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, + "devOptional": true, "dependencies": { "once": "^1.4.0" } @@ -11542,7 +11542,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -11562,7 +11562,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "devOptional": true }, "node_modules/es-module-lexer": { "version": "0.9.3", @@ -13000,7 +13000,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, + "devOptional": true, "dependencies": { "@jest/expect-utils": "^29.5.0", "jest-get-type": "^29.4.3", @@ -13016,7 +13016,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.1.3.tgz", "integrity": "sha512-tn7kMH/WVrVwwzPaCXMuFYiGXx15LwpxwkJkC/WmF6xptcqW7kaEZco7sxHjtEXpKV7QVGsfY1Z0PcwW4gj5OA==", - "dev": true, + "devOptional": true, "dependencies": { "expect": "^29.4.0", "jest-matcher-utils": "^29.4.0" @@ -13365,7 +13365,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, + "devOptional": true, "dependencies": { "pend": "~1.2.0" } @@ -13571,7 +13571,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, + "devOptional": true, "dependencies": { "is-callable": "^1.1.3" } @@ -13612,7 +13612,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 14.17" } @@ -13674,7 +13674,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "devOptional": true }, "node_modules/fs-extra": { "version": "10.1.0", @@ -13751,7 +13751,7 @@ "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, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14055,7 +14055,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, + "devOptional": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -14112,7 +14112,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "devOptional": true }, "node_modules/graphlib": { "version": "2.1.8", @@ -14259,7 +14259,7 @@ "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, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14276,7 +14276,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, + "devOptional": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -14299,7 +14299,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, + "devOptional": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -14406,7 +14406,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, + "devOptional": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -14418,7 +14418,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "devOptional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -14500,7 +14500,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "devOptional": true }, "node_modules/http-deceiver": { "version": "1.2.7", @@ -14698,7 +14698,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", - "dev": true, + "devOptional": true, "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -14888,7 +14888,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", - "dev": true, + "devOptional": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -15037,7 +15037,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, + "devOptional": true, "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -15093,7 +15093,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -15109,7 +15109,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -15128,7 +15128,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, + "devOptional": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -15151,7 +15151,7 @@ "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, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -15172,7 +15172,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.4" }, @@ -15218,7 +15218,7 @@ "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, + "devOptional": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -15312,7 +15312,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15341,7 +15341,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, + "devOptional": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -15423,7 +15423,7 @@ "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, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -15439,7 +15439,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15448,7 +15448,7 @@ "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, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -15471,7 +15471,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, + "devOptional": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -15486,7 +15486,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, + "devOptional": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -15501,7 +15501,7 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, + "devOptional": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -15550,7 +15550,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15571,7 +15571,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -15970,7 +15970,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, + "devOptional": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", @@ -15985,7 +15985,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -16000,7 +16000,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16016,7 +16016,7 @@ "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, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16028,13 +16028,13 @@ "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 + "devOptional": true }, "node_modules/jest-diff/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, + "devOptional": true, "engines": { "node": ">=8" } @@ -16043,7 +16043,7 @@ "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, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -16055,7 +16055,7 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, + "devOptional": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -16064,7 +16064,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "dev": true, + "devOptional": true, "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.5.0", @@ -16079,7 +16079,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -16094,7 +16094,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16110,7 +16110,7 @@ "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, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16122,13 +16122,13 @@ "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 + "devOptional": true }, "node_modules/jest-matcher-utils/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, + "devOptional": true, "engines": { "node": ">=8" } @@ -16137,7 +16137,7 @@ "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, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -16149,7 +16149,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, + "devOptional": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.5.0", @@ -16169,7 +16169,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -16184,7 +16184,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16200,7 +16200,7 @@ "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, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16212,13 +16212,13 @@ "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 + "devOptional": true }, "node_modules/jest-message-util/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, + "devOptional": true, "engines": { "node": ">=8" } @@ -16227,7 +16227,7 @@ "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, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -16239,7 +16239,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dev": true, + "devOptional": true, "dependencies": { "@jest/types": "^29.5.0", "@types/node": "*", @@ -16256,7 +16256,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -16271,7 +16271,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16287,7 +16287,7 @@ "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, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16299,13 +16299,13 @@ "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 + "devOptional": true }, "node_modules/jest-util/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, + "devOptional": true, "engines": { "node": ">=8" } @@ -16314,7 +16314,7 @@ "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, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -16708,7 +16708,7 @@ "version": "0.33.3", "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14.16" }, @@ -16726,7 +16726,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, + "devOptional": true, "dependencies": { "readable-stream": "^2.0.5" }, @@ -16873,7 +16873,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "^2.6.9", "marky": "^1.2.2" @@ -16883,7 +16883,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "devOptional": true, "dependencies": { "ms": "2.0.0" } @@ -16892,7 +16892,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "devOptional": true }, "node_modules/lines-and-columns": { "version": "1.2.4", @@ -16968,7 +16968,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true + "devOptional": true }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -16979,19 +16979,19 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true + "devOptional": true }, "node_modules/lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true + "devOptional": true }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true + "devOptional": true }, "node_modules/lodash.flattendeep": { "version": "4.4.0", @@ -17002,7 +17002,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "devOptional": true }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -17020,13 +17020,13 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true + "devOptional": true }, "node_modules/lodash.zip": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", - "dev": true + "devOptional": true }, "node_modules/log-symbols": { "version": "4.1.0", @@ -17111,7 +17111,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.6.0" }, @@ -17124,7 +17124,7 @@ "version": "0.8.4", "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true + "devOptional": true }, "node_modules/lower-case": { "version": "2.0.2", @@ -17284,7 +17284,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", - "dev": true + "devOptional": true }, "node_modules/matcher": { "version": "3.0.0", @@ -17636,7 +17636,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true + "devOptional": true }, "node_modules/mixin-deep": { "version": "1.3.2", @@ -17665,7 +17665,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "devOptional": true }, "node_modules/moment-mini": { "version": "2.29.4", @@ -17965,7 +17965,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, + "devOptional": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -18095,7 +18095,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, + "devOptional": true, "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -18448,7 +18448,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -18464,7 +18464,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.4" } @@ -18484,7 +18484,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -18753,7 +18753,7 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8.0.0" } @@ -19090,7 +19090,7 @@ "version": "1.6.4", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.4.tgz", "integrity": "sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==", - "dev": true, + "devOptional": true, "dependencies": { "lru-cache": "^9.0.0", "minipass": "^5.0.0" @@ -19106,7 +19106,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz", "integrity": "sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==", - "dev": true, + "devOptional": true, "engines": { "node": "14 || >=16.14" } @@ -19115,7 +19115,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -19179,7 +19179,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "devOptional": true }, "node_modules/performance-now": { "version": "2.1.0", @@ -19989,7 +19989,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, + "devOptional": true, "dependencies": { "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", @@ -20003,7 +20003,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -20074,7 +20074,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } @@ -20463,7 +20463,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "devOptional": true }, "node_modules/proxy-middleware": { "version": "0.15.0", @@ -20497,7 +20497,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "devOptional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -20515,7 +20515,7 @@ "version": "19.8.5", "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.8.5.tgz", "integrity": "sha512-zoGhim/oBQbkND6h4Xz4X7l5DkWVH9wH7z0mVty5qa/c0P1Yad47t/npVtt2xS10BiQwzztWKx7Pa2nJ5yykdw==", - "dev": true, + "devOptional": true, "dependencies": { "@puppeteer/browsers": "0.4.0", "chromium-bidi": "0.4.6", @@ -20545,13 +20545,13 @@ "version": "0.0.1107588", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", - "dev": true + "devOptional": true }, "node_modules/puppeteer-core/node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -20571,7 +20571,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "dependencies": { "pump": "^3.0.0" }, @@ -20611,7 +20611,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", - "dev": true + "devOptional": true }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -20636,7 +20636,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -20720,7 +20720,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "devOptional": true }, "node_modules/read-cache": { "version": "1.0.0", @@ -20781,7 +20781,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^3.0.2", @@ -20799,7 +20799,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", - "dev": true, + "devOptional": true, "dependencies": { "find-up": "^6.3.0", "read-pkg": "^7.1.0", @@ -20816,7 +20816,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, + "devOptional": true, "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -20832,7 +20832,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, + "devOptional": true, "dependencies": { "p-locate": "^6.0.0" }, @@ -20847,7 +20847,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, + "devOptional": true, "dependencies": { "yocto-queue": "^1.0.0" }, @@ -20862,7 +20862,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, + "devOptional": true, "dependencies": { "p-limit": "^4.0.0" }, @@ -20877,7 +20877,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -20886,7 +20886,7 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12.20" }, @@ -20898,7 +20898,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12.20" }, @@ -20910,7 +20910,7 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12.20" }, @@ -20936,7 +20936,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, + "devOptional": true, "dependencies": { "minimatch": "^5.1.0" } @@ -21074,7 +21074,7 @@ "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, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -21428,7 +21428,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "devOptional": true }, "node_modules/resolve-from": { "version": "5.0.0", @@ -21493,7 +21493,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", - "dev": true, + "devOptional": true, "dependencies": { "fast-deep-equal": "^2.0.1" } @@ -21502,7 +21502,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", - "dev": true + "devOptional": true }, "node_modules/restore-cursor": { "version": "3.1.0", @@ -21546,7 +21546,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", - "dev": true + "devOptional": true }, "node_modules/rimraf": { "version": "3.0.2", @@ -22369,7 +22369,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -22734,7 +22734,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, + "devOptional": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -22744,13 +22744,13 @@ "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 + "devOptional": 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, + "devOptional": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -22760,7 +22760,7 @@ "version": "3.0.12", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true + "devOptional": true }, "node_modules/spdy": { "version": "4.0.2", @@ -22893,7 +22893,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, + "devOptional": true, "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -22905,7 +22905,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -23289,7 +23289,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, + "devOptional": true, "dependencies": { "internal-slot": "^1.0.4" }, @@ -23579,7 +23579,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, + "devOptional": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -23591,13 +23591,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "devOptional": true }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, + "devOptional": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -23613,7 +23613,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -24015,7 +24015,7 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "devOptional": true }, "node_modules/traverse": { "version": "0.6.7", @@ -24416,7 +24416,7 @@ "version": "1.0.35", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", - "dev": true, + "devOptional": true, "funding": [ { "type": "opencollective", @@ -24463,7 +24463,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, + "devOptional": true, "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -24748,7 +24748,7 @@ "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, + "devOptional": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -24900,7 +24900,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.8.2.tgz", "integrity": "sha512-ug+7n0JgRTLG5pGyD53VKValSLFcr0oll1QelH1Gueh/umt3Ipu+SDV+v+lyCZY6CKasCsv80W8oZfpLBj1ClQ==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "^18.0.0", "@types/ws": "^8.5.3", @@ -25097,7 +25097,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14.16" }, @@ -25109,7 +25109,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, + "devOptional": true, "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -25121,7 +25121,7 @@ "version": "10.2.9", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.9.tgz", "integrity": "sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/http-cache-semantics": "^4.0.1", "get-stream": "^6.0.1", @@ -25139,7 +25139,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, + "devOptional": true, "dependencies": { "mimic-response": "^3.1.0" }, @@ -25154,7 +25154,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -25166,7 +25166,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" } @@ -25175,7 +25175,7 @@ "version": "12.6.0", "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", - "dev": true, + "devOptional": true, "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -25200,13 +25200,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "devOptional": true }, "node_modules/webdriver/node_modules/keyv": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, + "devOptional": true, "dependencies": { "json-buffer": "3.0.1" } @@ -25215,7 +25215,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -25227,7 +25227,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -25239,7 +25239,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14.16" }, @@ -25251,7 +25251,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12.20" } @@ -25260,7 +25260,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dev": true, + "devOptional": true, "dependencies": { "lowercase-keys": "^3.0.0" }, @@ -25275,7 +25275,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.8.2.tgz", "integrity": "sha512-H3h+sHLg9hfQCPLvpd30hi/ZW4lLy73m4zrZ5kJyuuUf38SZFLcfXD3W1RGig88RQ/75Ui164ugwHasTMiQEgw==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "^18.0.0", "@wdio/config": "8.8.0", @@ -25311,7 +25311,7 @@ "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, + "devOptional": true, "dependencies": { "deep-equal": "^2.0.5" } @@ -25320,7 +25320,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "es-get-iterator": "^1.1.2", @@ -25348,7 +25348,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12" }, @@ -25360,13 +25360,13 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "devOptional": true }, "node_modules/webdriverio/node_modules/minimatch": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -25381,7 +25381,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", - "dev": true, + "devOptional": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -25396,7 +25396,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -25408,7 +25408,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "devOptional": true }, "node_modules/webpack": { "version": "5.75.0", @@ -25702,7 +25702,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, + "devOptional": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -25726,7 +25726,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, + "devOptional": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -25742,7 +25742,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, + "devOptional": true, "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -25764,7 +25764,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, + "devOptional": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -26200,7 +26200,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, + "devOptional": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -26231,7 +26231,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, + "devOptional": true, "dependencies": { "archiver-utils": "^2.1.0", "compress-commons": "^4.1.0", @@ -26245,7 +26245,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -28845,7 +28845,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, + "devOptional": true, "requires": { "jest-get-type": "^29.4.3" } @@ -28854,7 +28854,7 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, + "devOptional": true, "requires": { "@sinclair/typebox": "^0.25.16" } @@ -28863,7 +28863,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, + "devOptional": true, "requires": { "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -28877,7 +28877,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -28886,7 +28886,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28896,7 +28896,7 @@ "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, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -28905,19 +28905,19 @@ "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 + "devOptional": 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 + "devOptional": 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, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -29132,7 +29132,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.0.tgz", "integrity": "sha512-3iB5pWn9Sr55PKKwqFWSWjLsTKCOEhKNI+uV3BZesgXuA3IhsX8I3hW0HI+3ksMIPkh2mVYzKSpvgq3oicjG2Q==", - "dev": true, + "devOptional": true, "requires": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -29148,7 +29148,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, + "devOptional": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -29159,7 +29159,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "requires": { "@types/yauzl": "^2.9.1", "debug": "^4.1.1", @@ -29171,7 +29171,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "requires": { "pump": "^3.0.0" } @@ -29180,7 +29180,7 @@ "version": "17.7.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, + "devOptional": true, "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -29208,7 +29208,7 @@ "version": "0.25.24", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true + "devOptional": true }, "@sindresorhus/is": { "version": "0.14.0", @@ -29416,7 +29416,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true + "devOptional": true }, "@types/http-proxy": { "version": "1.17.9", @@ -29430,13 +29430,13 @@ "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 + "devOptional": true }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, + "devOptional": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -29445,7 +29445,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, + "devOptional": true, "requires": { "@types/istanbul-lib-report": "*" } @@ -29518,7 +29518,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "devOptional": true }, "@types/pako": { "version": "1.0.4", @@ -29610,7 +29610,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "devOptional": true }, "@types/verror": { "version": "1.10.6", @@ -29623,7 +29623,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", - "dev": true + "devOptional": true }, "@types/ws": { "version": "8.5.3", @@ -29637,7 +29637,7 @@ "version": "17.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dev": true, + "devOptional": true, "requires": { "@types/yargs-parser": "*" } @@ -29646,7 +29646,7 @@ "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "devOptional": true }, "@types/yauzl": { "version": "2.10.0", @@ -30269,7 +30269,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", "integrity": "sha512-gm8gXqpiIR0EU9Blkqmxe+xsEoKS2EXpWrKlx2JXyx3Yf7By0UNsZVZHMSO8lLunzUjYIntpWYpmKmBmnlrnKQ==", - "dev": true, + "devOptional": true, "requires": { "@wdio/logger": "8.6.6", "@wdio/types": "8.8.0", @@ -30285,13 +30285,13 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", - "dev": true + "devOptional": true }, "glob": { "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, + "devOptional": true, "requires": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -30303,7 +30303,7 @@ "version": "8.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^2.0.1" } @@ -30312,7 +30312,7 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true + "devOptional": true } } }, @@ -30320,7 +30320,6 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.8.2.tgz", "integrity": "sha512-uwImTbqbFlHezAl4qtdXMZtZQo22bhENmt6eQ0pJwevtO1U53ZB4x9uDOYtSym8xKCdZILu46uI/THDm+vm2hA==", - "dev": true, "requires": { "expect-webdriverio": "^4.0.1", "webdriverio": "8.8.2" @@ -30361,7 +30360,7 @@ "version": "8.6.6", "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", - "dev": true, + "devOptional": true, "requires": { "chalk": "^5.1.2", "loglevel": "^1.6.0", @@ -30373,7 +30372,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true + "devOptional": true } } }, @@ -30381,13 +30380,13 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.8.1.tgz", "integrity": "sha512-nDaycUcm/ATLxcjim0fJyRiezXyyj4ZCq+Xf0S2Cubc0k7+DceFBt7KIMsernNVh2pelzFHEEwxh4DLaqQ71Wg==", - "dev": true + "devOptional": true }, "@wdio/repl": { "version": "8.6.6", "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.6.6.tgz", "integrity": "sha512-vyJzqHJ5yOmfVyk5WWo6pRsJ2xhgWl3DVIBdDNR0wKrtFcm/g1jnB+pNf6Eb7NhCDh3oGul25bmhAwWDoxcFYA==", - "dev": true, + "devOptional": true, "requires": { "@types/node": "^18.0.0" } @@ -30472,7 +30471,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", - "dev": true, + "devOptional": true, "requires": { "@wdio/logger": "8.6.6", "@wdio/types": "8.8.0", @@ -30971,7 +30970,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", - "dev": true, + "devOptional": true, "requires": { "archiver-utils": "^2.1.0", "async": "^3.2.3", @@ -30986,13 +30985,13 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "devOptional": true }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -31005,7 +31004,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, + "devOptional": true, "requires": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", @@ -31023,7 +31022,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -31033,7 +31032,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "devOptional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -31047,7 +31046,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -31353,7 +31352,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "devOptional": true }, "aws-sign2": { "version": "0.7.0", @@ -31814,7 +31813,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true + "devOptional": true }, "buffer-equal": { "version": "1.0.0", @@ -32129,7 +32128,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "dev": true + "devOptional": true }, "cacheable-request": { "version": "6.1.0", @@ -32320,7 +32319,7 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", - "dev": true, + "devOptional": true, "requires": { "@types/node": "*", "escape-string-regexp": "^4.0.0", @@ -32332,7 +32331,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "devOptional": true } } }, @@ -32383,7 +32382,7 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", - "dev": true, + "devOptional": true, "requires": { "mitt": "3.0.0" } @@ -32398,7 +32397,7 @@ "version": "3.6.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", - "dev": true + "devOptional": true }, "class-utils": { "version": "0.3.6", @@ -32718,7 +32717,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", - "dev": true, + "devOptional": true, "requires": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", @@ -32730,7 +32729,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -33016,7 +33015,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, + "devOptional": true, "requires": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" @@ -33026,7 +33025,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -33161,7 +33160,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, + "devOptional": true, "requires": { "node-fetch": "2.6.7" } @@ -33246,13 +33245,13 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", - "dev": true + "devOptional": true }, "css-value": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", - "dev": true + "devOptional": true }, "css-what": { "version": "6.1.0", @@ -33941,7 +33940,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", - "dev": true + "devOptional": true }, "default-gateway": { "version": "6.0.3", @@ -33974,7 +33973,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, + "devOptional": true, "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -34127,7 +34126,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.8.2.tgz", "integrity": "sha512-iD/Xr5rMjx+VD08akiAuiMR5EhWKj9i489rcDm2vdC9iB8u8HY51s9FbmnIrN5OstYma0x2qOF2zKxM/muJTtw==", - "dev": true, + "devOptional": true, "requires": { "@types/node": "^18.0.0", "@wdio/config": "8.8.0", @@ -34149,13 +34148,13 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "dev": true + "devOptional": true }, "which": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", - "dev": true, + "devOptional": true, "requires": { "isexe": "^2.0.0" } @@ -34166,7 +34165,7 @@ "version": "0.0.1124027", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1124027.tgz", "integrity": "sha512-OT2sdgQn4llM9/tVcCvoty733KFFIlXVvESceJsfazhmg/dF7C5e3Z8cIN8jNwIikixuE5rufGtD1cvKHXfOcQ==", - "dev": true + "devOptional": true }, "dfa": { "version": "1.2.0", @@ -34184,7 +34183,7 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true + "devOptional": true }, "dir-compare": { "version": "2.4.0", @@ -34461,7 +34460,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", - "dev": true, + "devOptional": true, "requires": { "@types/which": "^2.0.1", "which": "^2.0.2" @@ -34716,7 +34715,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, + "devOptional": true, "requires": { "once": "^1.4.0" } @@ -34801,7 +34800,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -34818,7 +34817,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "devOptional": true } } }, @@ -35814,7 +35813,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, + "devOptional": true, "requires": { "@jest/expect-utils": "^29.5.0", "jest-get-type": "^29.4.3", @@ -35827,7 +35826,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.1.3.tgz", "integrity": "sha512-tn7kMH/WVrVwwzPaCXMuFYiGXx15LwpxwkJkC/WmF6xptcqW7kaEZco7sxHjtEXpKV7QVGsfY1Z0PcwW4gj5OA==", - "dev": true, + "devOptional": true, "requires": { "@wdio/globals": "^8.2.4", "expect": "^29.4.0", @@ -36119,7 +36118,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, + "devOptional": true, "requires": { "pend": "~1.2.0" } @@ -36274,7 +36273,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, + "devOptional": true, "requires": { "is-callable": "^1.1.3" } @@ -36306,7 +36305,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "dev": true + "devOptional": true }, "forwarded": { "version": "0.2.0", @@ -36346,7 +36345,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "devOptional": true }, "fs-extra": { "version": "10.1.0", @@ -36404,7 +36403,7 @@ "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 + "devOptional": true }, "gauge": { "version": "4.0.4", @@ -36632,7 +36631,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, + "devOptional": true, "requires": { "get-intrinsic": "^1.1.3" } @@ -36682,7 +36681,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "devOptional": true }, "graphlib": { "version": "2.1.8", @@ -36798,7 +36797,7 @@ "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 + "devOptional": true }, "has-flag": { "version": "3.0.0", @@ -36809,7 +36808,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, + "devOptional": true, "requires": { "get-intrinsic": "^1.1.1" } @@ -36823,7 +36822,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, + "devOptional": true, "requires": { "has-symbols": "^1.0.2" } @@ -36912,7 +36911,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, + "devOptional": true, "requires": { "lru-cache": "^6.0.0" }, @@ -36921,7 +36920,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "devOptional": true, "requires": { "yallist": "^4.0.0" } @@ -36986,7 +36985,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "devOptional": true }, "http-deceiver": { "version": "1.2.7", @@ -37129,7 +37128,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", - "dev": true, + "devOptional": true, "requires": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -37249,7 +37248,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", - "dev": true + "devOptional": true }, "imurmurhash": { "version": "0.1.4", @@ -37363,7 +37362,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, + "devOptional": true, "requires": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -37404,7 +37403,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -37414,7 +37413,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -37430,7 +37429,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, + "devOptional": true, "requires": { "has-bigints": "^1.0.1" } @@ -37447,7 +37446,7 @@ "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, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -37462,7 +37461,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true + "devOptional": true }, "is-ci": { "version": "3.0.1", @@ -37493,7 +37492,7 @@ "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, + "devOptional": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -37554,7 +37553,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true + "devOptional": true }, "is-negative-zero": { "version": "2.0.2", @@ -37571,7 +37570,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, + "devOptional": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -37628,7 +37627,7 @@ "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, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -37638,13 +37637,13 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true + "devOptional": true }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2" } @@ -37658,7 +37657,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, + "devOptional": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -37667,7 +37666,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, + "devOptional": true, "requires": { "has-symbols": "^1.0.2" } @@ -37676,7 +37675,7 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, + "devOptional": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -37713,7 +37712,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true + "devOptional": true }, "is-weakref": { "version": "1.0.2", @@ -37728,7 +37727,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -38085,7 +38084,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, + "devOptional": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", @@ -38097,7 +38096,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -38106,7 +38105,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38116,7 +38115,7 @@ "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, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -38125,19 +38124,19 @@ "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 + "devOptional": 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 + "devOptional": 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, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -38148,13 +38147,13 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true + "devOptional": true }, "jest-matcher-utils": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "dev": true, + "devOptional": true, "requires": { "chalk": "^4.0.0", "jest-diff": "^29.5.0", @@ -38166,7 +38165,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -38175,7 +38174,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38185,7 +38184,7 @@ "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, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -38194,19 +38193,19 @@ "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 + "devOptional": 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 + "devOptional": 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, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -38217,7 +38216,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, + "devOptional": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.5.0", @@ -38234,7 +38233,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -38243,7 +38242,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38253,7 +38252,7 @@ "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, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -38262,19 +38261,19 @@ "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 + "devOptional": 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 + "devOptional": 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, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -38285,7 +38284,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dev": true, + "devOptional": true, "requires": { "@jest/types": "^29.5.0", "@types/node": "*", @@ -38299,7 +38298,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -38308,7 +38307,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38318,7 +38317,7 @@ "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, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -38327,19 +38326,19 @@ "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 + "devOptional": 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 + "devOptional": 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, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -38655,7 +38654,7 @@ "version": "0.33.3", "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", - "dev": true + "devOptional": true }, "lazy-val": { "version": "1.0.5", @@ -38667,7 +38666,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, + "devOptional": true, "requires": { "readable-stream": "^2.0.5" } @@ -38765,7 +38764,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", - "dev": true, + "devOptional": true, "requires": { "debug": "^2.6.9", "marky": "^1.2.2" @@ -38775,7 +38774,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "devOptional": true, "requires": { "ms": "2.0.0" } @@ -38784,7 +38783,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "devOptional": true } } }, @@ -38849,7 +38848,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true + "devOptional": true }, "lodash.debounce": { "version": "4.0.8", @@ -38860,19 +38859,19 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true + "devOptional": true }, "lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true + "devOptional": true }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true + "devOptional": true }, "lodash.flattendeep": { "version": "4.4.0", @@ -38883,7 +38882,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "devOptional": true }, "lodash.merge": { "version": "4.6.2", @@ -38901,13 +38900,13 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true + "devOptional": true }, "lodash.zip": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", - "dev": true + "devOptional": true }, "log-symbols": { "version": "4.1.0", @@ -38967,13 +38966,13 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true + "devOptional": true }, "loglevel-plugin-prefix": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true + "devOptional": true }, "lower-case": { "version": "2.0.2", @@ -39093,7 +39092,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", - "dev": true + "devOptional": true }, "matcher": { "version": "3.0.0", @@ -39356,7 +39355,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true + "devOptional": true }, "mixin-deep": { "version": "1.3.2", @@ -39376,7 +39375,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "devOptional": true }, "moment-mini": { "version": "2.29.4", @@ -39624,7 +39623,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, + "devOptional": true, "requires": { "whatwg-url": "^5.0.0" } @@ -39716,7 +39715,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, + "devOptional": true, "requires": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -39992,7 +39991,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -40002,7 +40001,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "devOptional": true }, "object-visit": { "version": "1.0.1", @@ -40016,7 +40015,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -40205,7 +40204,7 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", - "dev": true + "devOptional": true }, "p-limit": { "version": "2.3.0", @@ -40471,7 +40470,7 @@ "version": "1.6.4", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.4.tgz", "integrity": "sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==", - "dev": true, + "devOptional": true, "requires": { "lru-cache": "^9.0.0", "minipass": "^5.0.0" @@ -40481,13 +40480,13 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz", "integrity": "sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==", - "dev": true + "devOptional": true }, "minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true + "devOptional": true } } }, @@ -40536,7 +40535,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "devOptional": true }, "performance-now": { "version": "2.1.0", @@ -41011,7 +41010,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, + "devOptional": true, "requires": { "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", @@ -41022,7 +41021,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "devOptional": true } } }, @@ -41069,7 +41068,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "devOptional": true }, "promise-inflight": { "version": "1.0.1", @@ -41383,7 +41382,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "devOptional": true }, "proxy-middleware": { "version": "0.15.0", @@ -41414,7 +41413,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "devOptional": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -41429,7 +41428,7 @@ "version": "19.8.5", "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.8.5.tgz", "integrity": "sha512-zoGhim/oBQbkND6h4Xz4X7l5DkWVH9wH7z0mVty5qa/c0P1Yad47t/npVtt2xS10BiQwzztWKx7Pa2nJ5yykdw==", - "dev": true, + "devOptional": true, "requires": { "@puppeteer/browsers": "0.4.0", "chromium-bidi": "0.4.6", @@ -41448,13 +41447,13 @@ "version": "0.0.1107588", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", - "dev": true + "devOptional": true }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "requires": { "@types/yauzl": "^2.9.1", "debug": "^4.1.1", @@ -41466,7 +41465,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "requires": { "pump": "^3.0.0" } @@ -41492,7 +41491,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", - "dev": true + "devOptional": true }, "queue-microtask": { "version": "1.2.3", @@ -41503,7 +41502,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true + "devOptional": true }, "quote-stream": { "version": "1.0.2", @@ -41567,7 +41566,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "devOptional": true }, "read-cache": { "version": "1.0.0", @@ -41621,7 +41620,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "dev": true, + "devOptional": true, "requires": { "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^3.0.2", @@ -41633,7 +41632,7 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true + "devOptional": true } } }, @@ -41641,7 +41640,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", - "dev": true, + "devOptional": true, "requires": { "find-up": "^6.3.0", "read-pkg": "^7.1.0", @@ -41652,7 +41651,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, + "devOptional": true, "requires": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -41662,7 +41661,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, + "devOptional": true, "requires": { "p-locate": "^6.0.0" } @@ -41671,7 +41670,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, + "devOptional": true, "requires": { "yocto-queue": "^1.0.0" } @@ -41680,7 +41679,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, + "devOptional": true, "requires": { "p-limit": "^4.0.0" } @@ -41689,19 +41688,19 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true + "devOptional": true }, "type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true + "devOptional": true }, "yocto-queue": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true + "devOptional": true } } }, @@ -41723,7 +41722,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, + "devOptional": true, "requires": { "minimatch": "^5.1.0" } @@ -41841,7 +41840,7 @@ "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, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -42102,7 +42101,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "devOptional": true }, "resolve-from": { "version": "5.0.0", @@ -42156,7 +42155,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", - "dev": true, + "devOptional": true, "requires": { "fast-deep-equal": "^2.0.1" }, @@ -42165,7 +42164,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", - "dev": true + "devOptional": true } } }, @@ -42198,7 +42197,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", - "dev": true + "devOptional": true }, "rimraf": { "version": "3.0.2", @@ -42849,7 +42848,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "devOptional": true }, "slice-ansi": { "version": "3.0.0", @@ -43136,7 +43135,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, + "devOptional": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -43146,13 +43145,13 @@ "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 + "devOptional": 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, + "devOptional": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -43162,7 +43161,7 @@ "version": "3.0.12", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true + "devOptional": true }, "spdy": { "version": "4.0.2", @@ -43268,7 +43267,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, + "devOptional": true, "requires": { "escape-string-regexp": "^2.0.0" }, @@ -43277,7 +43276,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true + "devOptional": true } } }, @@ -43571,7 +43570,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, + "devOptional": true, "requires": { "internal-slot": "^1.0.4" } @@ -43780,7 +43779,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, + "devOptional": true, "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -43792,7 +43791,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "devOptional": true } } }, @@ -43800,7 +43799,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, + "devOptional": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -43813,7 +43812,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -44124,7 +44123,7 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "devOptional": true }, "traverse": { "version": "0.6.7", @@ -44428,7 +44427,7 @@ "version": "1.0.35", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", - "dev": true + "devOptional": true }, "uglify-js": { "version": "3.17.4", @@ -44453,7 +44452,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, + "devOptional": true, "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -44678,7 +44677,7 @@ "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, + "devOptional": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -44794,7 +44793,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.8.2.tgz", "integrity": "sha512-ug+7n0JgRTLG5pGyD53VKValSLFcr0oll1QelH1Gueh/umt3Ipu+SDV+v+lyCZY6CKasCsv80W8oZfpLBj1ClQ==", - "dev": true, + "devOptional": true, "requires": { "@types/node": "^18.0.0", "@types/ws": "^8.5.3", @@ -44813,13 +44812,13 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", - "dev": true + "devOptional": true }, "@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, + "devOptional": true, "requires": { "defer-to-connect": "^2.0.1" } @@ -44828,7 +44827,7 @@ "version": "10.2.9", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.9.tgz", "integrity": "sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==", - "dev": true, + "devOptional": true, "requires": { "@types/http-cache-semantics": "^4.0.1", "get-stream": "^6.0.1", @@ -44843,7 +44842,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, + "devOptional": true, "requires": { "mimic-response": "^3.1.0" }, @@ -44852,7 +44851,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true + "devOptional": true } } }, @@ -44860,13 +44859,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true + "devOptional": true }, "got": { "version": "12.6.0", "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", - "dev": true, + "devOptional": true, "requires": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -44885,13 +44884,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "devOptional": true }, "keyv": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, + "devOptional": true, "requires": { "json-buffer": "3.0.1" } @@ -44900,31 +44899,31 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true + "devOptional": true }, "mimic-response": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "dev": true + "devOptional": true }, "normalize-url": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "dev": true + "devOptional": true }, "p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true + "devOptional": true }, "responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dev": true, + "devOptional": true, "requires": { "lowercase-keys": "^3.0.0" } @@ -45073,7 +45072,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.8.2.tgz", "integrity": "sha512-H3h+sHLg9hfQCPLvpd30hi/ZW4lLy73m4zrZ5kJyuuUf38SZFLcfXD3W1RGig88RQ/75Ui164ugwHasTMiQEgw==", - "dev": true, + "devOptional": true, "requires": { "@types/node": "^18.0.0", "@wdio/config": "8.8.0", @@ -45106,7 +45105,7 @@ "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, + "devOptional": true, "requires": { "deep-equal": "^2.0.5" } @@ -45115,7 +45114,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "es-get-iterator": "^1.1.2", @@ -45140,19 +45139,19 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true + "devOptional": true }, "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "devOptional": true }, "minimatch": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^2.0.1" } @@ -45161,7 +45160,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", - "dev": true, + "devOptional": true, "requires": { "type-fest": "^0.20.2" } @@ -45170,7 +45169,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "devOptional": true } } }, @@ -45178,7 +45177,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "devOptional": true }, "webpack": { "version": "5.75.0", @@ -45378,7 +45377,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, + "devOptional": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -45396,7 +45395,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, + "devOptional": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -45409,7 +45408,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, + "devOptional": true, "requires": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -45428,7 +45427,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, + "devOptional": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -45752,7 +45751,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, + "devOptional": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -45774,7 +45773,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, + "devOptional": true, "requires": { "archiver-utils": "^2.1.0", "compress-commons": "^4.1.0", @@ -45785,7 +45784,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", diff --git a/package.json b/package.json index da623ef02..c46a5ac00 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", "@wdio/codemod": "^0.12.0", + "@wdio/globals": "^8.8.2", "@wdio/types": "^8.8.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", -- GitLab From 135e400e56b65248b8cc19d5f206972a9d4ac46a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 15:15:34 +0200 Subject: [PATCH 241/285] test(e2e): replace ElementFinder type refs #618 --- e2e/calculator.po.ts | 56 +++++++++++++++++++++---------------------- e2e/preferences.po.ts | 4 ++-- e2e/util.po.ts | 4 ++-- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 07a745a13..5d11fc5d9 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -29,15 +29,15 @@ export class CalculatorPage { /** * return all selects in the calculator which id is in the form "select_*" */ - getAllCalculatorSelects(): ElementArrayFinder { + getAllCalculatorSelects() { return $$("mat-select[id^=select_]"); // all mat-select with id starting with "select_" } /** * get the option count of a select */ - async getMatselectOptionCount(select: string | ElementFinder) { - const sel = select instanceof ElementFinder ? select : $(`#${select}`); + async getMatselectOptionCount(select: string | Element) { + const sel = select instanceof Element ? select : $(`#${select}`); await scrollToElement(sel); if ((await sel.isExisting()) && (await sel.isDisplayed())) { @@ -51,8 +51,8 @@ export class CalculatorPage { /** * get the text of the all given select options */ - async getMatselectOptionsText(select: string | ElementFinder): Promise<string[]> { - const sel = select instanceof ElementFinder ? select : $(`#${select}`); + async getMatselectOptionsText(select: string | Element): Promise<string[]> { + const sel = select instanceof Element ? select : $(`#${select}`); await scrollToElement(sel); if ((await sel.isExisting()) && (await sel.isDisplayed())) { @@ -73,7 +73,7 @@ export class CalculatorPage { /** * get select current option */ - async getSelectCurrentOption(select: ElementFinder): Promise<ElementFinder> { + async getSelectCurrentOption(select) { const id = await select.getAttribute("id"); return $("mat-select#" + id + " div[id^=mat-select-value-]"); } @@ -81,7 +81,7 @@ export class CalculatorPage { /** * get text of select current option */ - async getMatselectCurrentOptionText(select: ElementFinder): Promise<string> { + async getMatselectCurrentOptionText(select): Promise<string> { const currentOption = await this.getSelectCurrentOption(select); return await currentOption.$("span span").getText(); } @@ -91,15 +91,15 @@ export class CalculatorPage { } async isMatSelectPresent(id: string) { - const sel: ElementFinder = $("mat-select#" + id); + const sel = $("mat-select#" + id); return await sel.isExisting(); } - async getSelectValueText(select: ElementFinder) { + async getSelectValueText(select) { return await select.$(".mat-select-value-text > span").getText(); } - async isSelectEmpty(select: ElementFinder) { + async isSelectEmpty(select) { try { const text = select.$(".mat-select-value-text > span"); await text.getAttribute("outerHTML"); // await anything trigger the error @@ -172,66 +172,66 @@ export class CalculatorPage { } /** return nth <tr> of given <table>, starting at 1 */ - getNthRow(table: ElementFinder, n: number) { + getNthRow(table, n: number) { return table.$("tbody > tr:nth-of-type(" + n + ")"); } /** return nth <td> of given <tr>, starting at 1 */ - getNthColumn(tr: ElementFinder, n: number) { + getNthColumn(tr, n: number) { return tr.$("td:nth-of-type(" + n + ")"); } async isNgParamPresent(id: string) { - const inp: ElementFinder = $("ngparam-input input#" + id); + const inp = $("ngparam-input input#" + id); return await inp.isExisting(); } - async inputHasCalcModeButton(input: ElementFinder) { + async inputHasCalcModeButton(input) { // get parent (div.container) const container = await this.findParentContainer(input); // find radio buttons - const button: ElementFinder = container.$("mat-button-toggle.radio_cal > button"); + const button = container.$("mat-button-toggle.radio_cal > button"); return await button.isExisting(); } - async inputHasLinkModeButton(input: ElementFinder) { + async inputHasLinkModeButton(input) { // get parent (div.container) const container = await this.findParentContainer(input); // find radio buttons - const button: ElementFinder = container.$("mat-button-toggle.radio_link > button"); + const button = container.$("mat-button-toggle.radio_link > button"); return await button.isExisting(); } /** * @returns true if "fixed mode" button linked to an input is selected */ - async inputIsInFixedMode(input: ElementFinder): Promise<boolean> { + async inputIsInFixedMode(input): Promise<boolean> { // get parent (div.container) const container = await this.findParentContainer(input); // find fixed radio button - const button: ElementFinder = container.$("mat-button-toggle.radio_fix"); + const button = container.$("mat-button-toggle.radio_fix"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } /** * @returns true if "calculated mode" button linked to an input is selected */ - async inputIsInCalculatedMode(input: ElementFinder): Promise<boolean> { + async inputIsInCalculatedMode(input): Promise<boolean> { // get parent (div.container) const container = await this.findParentContainer(input); // find calc radio button - const button: ElementFinder = container.$("mat-button-toggle.radio_cal"); + const button = container.$("mat-button-toggle.radio_cal"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } /** * @returns true if "linked mode" button linked to an input is selected */ - async inputIsInLinkedMode(input: ElementFinder): Promise<boolean> { + async inputIsInLinkedMode(input): Promise<boolean> { // get parent (div.container) const container = await this.findParentContainer(input); // find calc radio button - const button: ElementFinder = container.$("mat-button-toggle.radio_link"); + const button = container.$("mat-button-toggle.radio_link"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -262,7 +262,7 @@ export class CalculatorPage { * @param table a <table> ElementFinder * @param allowEmpty if true, empty "" values will be considered valid */ - async allRowsHaveValidResults(table: ElementFinder, allowEmpty: boolean = false): Promise<boolean> { + async allRowsHaveValidResults(table, allowEmpty: boolean = false): Promise<boolean> { let n = 0; let ok = true; const invalidValues = ["ERR", "NaN"]; @@ -338,7 +338,7 @@ export class CalculatorPage { } // find parent element of elt having class "container" - async findParentContainer(elt: ElementFinder): Promise<ElementFinder> { + async findParentContainer(elt) { let i = 8; // garde fous while (((await elt.getAttribute("class")) !== "container") && (i >= 0)) { elt = elt.$(".."); @@ -351,7 +351,7 @@ export class CalculatorPage { * @param elt an <input> element * @param mode "fix", "var", "cal" or "link" */ - async setParamMode(elt: ElementFinder, mode: string) { + async setParamMode(elt, mode: string) { // get parent (div.container) const container = await this.findParentContainer(elt); // find radio buttons @@ -370,9 +370,9 @@ export class CalculatorPage { /** * @param elt an <input> element */ - async getLinkedValueSelect(elt: ElementFinder): Promise<ElementFinder> { + async getLinkedValueSelect(elt) { // get parent (div.container) - const container = await this.findParentContainer(elt) as ElementFinder; + const container = await this.findParentContainer(elt); // find <select> const select = container.$("param-link mat-select"); return select; diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 49e057669..eddb67807 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -26,7 +26,7 @@ export class PreferencesPage { return $$(`mat-form-field[data-testclass="numeric-input"]`); } - getInputForField(ff: ElementFinder) { + getInputForField(ff) { return ff.$("input"); } @@ -38,7 +38,7 @@ export class PreferencesPage { return $(cssSelector); } - getErrorsForField(ff: ElementFinder) { + getErrorsForField(ff) { return ff.$("mat-error"); } diff --git a/e2e/util.po.ts b/e2e/util.po.ts index d4c99fb85..c7717900f 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -3,7 +3,7 @@ import { browser, $, $$, expect } from '@wdio/globals' /** * scroll page to make element visible */ -export async function scrollToElement(elem: ElementFinder) { +export async function scrollToElement(elem) { await browser.execute("arguments[0].scrollIntoView({ block: 'center' });", elem); await browser.pause(50); } @@ -28,7 +28,7 @@ export function expectNumber(msg: string, val: number, expected: number) { expect(val).toEqual(expected); } -export async function changeSelectValue(elt: ElementFinder, index: number) { +export async function changeSelectValue(elt, index: number) { await elt.click(); const optionId = ".cdk-overlay-container mat-option:nth-of-type(" + (index + 1) + ")"; const option = $(optionId); -- GitLab From 1990f30e674a20b443304851959e981f348eb812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 19 Apr 2023 08:57:52 +0200 Subject: [PATCH 242/285] test(e2e): modify package.json to run tests with WebdriverIO refs #618 --- package.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index c46a5ac00..7ae470fe7 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ "ng": "cd . && \"node_modules/.bin/ng\"", "postinstall": "./node_modules/.bin/webdriver-manager update --gecko=false --versions.chrome=83.0.4103.39", "lint": "eslint -c .eslintrc.js --ext .ts src", - "e2e": "npm run preprocess && node scripts/check-translations.js && npm run ng -- e2e --suite=regular --webdriver-update=false", - "e2equick": "node scripts/check-translations.js && npm run ng -- e2e --dev-server-target= --suite=regular --webdriver-update=false", + "e2e": "npm run preprocess && npm run e2equick", + "e2equick": "node scripts/check-translations.js && ./node_modules/.bin/wdio run ./wdio.conf.ts", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "bash scripts/prepare_mkdocs.sh; cd build; python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && cd .. && node scripts/mkdocs-postprocess.js", "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 scripts/mkdocs2pdf.py && node scripts/mkdocs2pdf-postprocess.js", @@ -35,8 +35,7 @@ "viz": "tsviz -recursive src/ nghyd_class_diagram.png", "webapp-nocompile": "\"node_modules/.bin/http-server\" dist", "webapp": "npm run build-no-pdf && npm run webapp-nocompile", - "service-worker-version": "./scripts/update-service-worker-config.sh", - "wdio": "wdio run ./wdio.conf.ts" + "service-worker-version": "./scripts/update-service-worker-config.sh" }, "private": true, "dependencies": { -- GitLab From 17a60699487a0b1054eeeee623db94f787a176de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 21 Apr 2023 13:39:11 +0200 Subject: [PATCH 243/285] test(e2e): check that predams results are displayed for all modules refs #619 --- e2e/calculator.po.ts | 2 ++ e2e/prebarrages-results.e2e-spec.ts | 56 +++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 e2e/prebarrages-results.e2e-spec.ts diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index d7552190a..6f8966a17 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -249,6 +249,8 @@ export class CalculatorPage { || await this.presentAndVisible("pb-results pb-results-table") || + await this.presentAndVisible("pb-results pb-cloison-results") + || await this.presentAndVisible("macrorugo-compound-results macrorugo-compound-results-table") || await this.presentAndVisible("jet-results .fixed-results-container") diff --git a/e2e/prebarrages-results.e2e-spec.ts b/e2e/prebarrages-results.e2e-spec.ts new file mode 100644 index 000000000..e7af14868 --- /dev/null +++ b/e2e/prebarrages-results.e2e-spec.ts @@ -0,0 +1,56 @@ +import { ListPage } from "./list.po"; +import { CalculatorPage } from "./calculator.po"; +import { Navbar } from "./navbar.po"; +import { browser, by, element } from "protractor"; +import { AppPage } from "./app.po"; +import { SideNav } from "./sidenav.po"; +import { PreferencesPage } from "./preferences.po"; +import { changeSelectValue, scrollPageToTop } from "./util.po"; + +/** + * Clone calculators + */ +describe("Prébarrages results - ", () => { + let listPage: ListPage; + let calcPage: CalculatorPage; + let navBar: Navbar; + let prefPage: PreferencesPage; + + beforeAll(() => { + listPage = new ListPage(); + calcPage = new CalculatorPage(); + navBar = new Navbar(); + prefPage = new PreferencesPage(); + jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 1000; + }); + + beforeEach(async () => { + // disable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await prefPage.disableEvilEmptyFields(); + await browser.sleep(200); + }); + + it("every module shoud have results", async () => { + // create prébarrage calculator + await navBar.clickNewCalculatorButton(); + await listPage.clickMenuEntryForCalcType(30); + + // run calculation + const calcButton = calcPage.getCalculateButton(); + await calcButton.click(); + await browser.sleep(200); + + const nodes = element.all(by.css("g.nodes > g")); + const nb = await nodes.count(); + for (let n = 0; n < nb; n++) { + const node = nodes.get(n); + await node.click(); + await browser.sleep(200); + + // check that result is not empty + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(true); + } + }); +}); -- GitLab From 6ccae3f912cc0bd9cd527d9a8f3e1546c48739b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 21 Apr 2023 13:40:14 +0200 Subject: [PATCH 244/285] fix: predams results not displayed for walls refs #619 --- src/app/formulaire/definition/form-definition.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index d70225029..23f9d2d98 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -344,7 +344,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } } - this.completeParse(); + this.completeParse(false); } public hasParameter(symbol: string): boolean { -- GitLab From a7c1639124b4ca39cb8c841a62256fdbe74db2a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 25 Apr 2023 09:34:59 +0200 Subject: [PATCH 245/285] refactor : remove protractor configuration file refs #618 --- protractor.conf.js | 72 ---------------------------------------------- 1 file changed, 72 deletions(-) delete mode 100644 protractor.conf.js diff --git a/protractor.conf.js b/protractor.conf.js deleted file mode 100644 index 92c3cd855..000000000 --- a/protractor.conf.js +++ /dev/null @@ -1,72 +0,0 @@ -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -const { SpecReporter } = require('jasmine-spec-reporter'); - -const path = require("path"); -const os = require("os"); -const fs = require("fs"); - -const downloadsPath = path.resolve(os.homedir(), "Téléchargements"); - -// try to use system chromedriver first -let chromeDriverPath = "/usr/bin/chromedriver"; -if (! fs.existsSync(chromeDriverPath)) { - const seleniumDir = "./node_modules/protractor/node_modules/webdriver-manager/selenium"; - if (fs.existsSync(seleniumDir)) { - const files = fs.readdirSync(seleniumDir); - for (const f of files) { - if (/^chromedriver.+[^p]$/.test(f)) { - chromeDriverPath = seleniumDir + "/" + f; - } - } - } -} - -console.log("---------- USING CHROMEDRIVER AT PATH: ", chromeDriverPath); - -exports.config = { - allScriptsTimeout: 130 * 1000, // 130s. is recommended for Gremlins.js - suites: { - 'regular': './e2e/*.e2e-spec.ts', // everything but monkey test - 'monkeyTest': './e2e/monkey-test/*.e2e-spec.ts' - }, - capabilities: { - browserName: 'chrome', - chromeOptions: { - args: [ - "--no-sandbox", - "--headless", - "--window-size=1024x768", - "--disable-dev-shm-usage" - ], - prefs: { - download: { - prompt_for_download: false, - directory_upgrade: true, - // default_directory: '/tmp/e2e-downloads' - }, - }, - }, - }, - chromeDriver: chromeDriverPath, - directConnect: true, - baseUrl: 'http://localhost:4200/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function() {} - }, - onPrepare() { - require('ts-node').register({ - project: 'e2e/tsconfig.e2e.json' - }); - jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); - browser.manage().window().setSize(1600, 1000); - browser.driver.sendChromiumCommand('Page.setDownloadBehavior', { - behavior: 'allow', - downloadPath: downloadsPath - }); - } -}; -- GitLab From 108733a26effc3377c5bf38a7c7735c8caa070c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 25 Apr 2023 16:39:10 +0200 Subject: [PATCH 246/285] refactor: add VSCode launch configuration for WebDriverIO test debug refs #618 --- .vscode/launch.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.vscode/launch.json b/.vscode/launch.json index 1d92791fc..90ee4ece3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -39,6 +39,21 @@ "${workspaceRoot}/dist/out-tsc-e2e/*.js" ], "skipSourceMapSupport": true + }, + { + "name": "WDIO select spec", + "type": "node", + "request": "launch", + "args": ["wdio.conf.ts", "--spec", "${file}"], + "cwd": "${workspaceFolder}", + "autoAttachChildProcesses": true, + "program": "${workspaceRoot}/node_modules/@wdio/cli/bin/wdio.js", + "console": "integratedTerminal", + "skipFiles": [ + "${workspaceFolder}/node_modules/**/*.js", + "${workspaceFolder}/lib/**/*.js", + "<node_internals>/**/*.js" + ] } ] } -- GitLab From e744dc9023b6d69a73a14b6ea820ea44ba67f08d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 26 Apr 2023 10:40:03 +0200 Subject: [PATCH 247/285] fix(e2e): fix automatic WebDriverIO test migration refs #618 --- e2e/bief-empty-fields.e2e-spec.ts | 4 +- e2e/calc-all-examples.e2e-spec.ts | 42 +- e2e/calculate-all-params.e2e-spec.ts | 42 +- e2e/calculate-button-validation.e2e-spec.ts | 23 +- e2e/calculate-linked-params.e2e-spec.ts | 112 ++++-- e2e/calculator.e2e-spec.ts | 7 +- e2e/calculator.po.ts | 363 +++++++++++++----- e2e/check-translations.e2e-spec.ts | 7 +- e2e/cloisons.e2e-spec.ts | 25 +- e2e/clone-all-calc.e2e-spec.ts | 24 +- e2e/clone-calc.e2e-spec.ts | 21 +- e2e/compute-reset-chained-links.e2e-spec.ts | 68 ++-- e2e/cote-amont-aval-bief.e2e-spec.ts | 57 +-- e2e/courbe-remous-empty-fields.e2e-spec.ts | 5 +- e2e/diagramme-modules.e2e-spec.ts | 5 +- e2e/documentation.e2e-spec.ts | 49 +-- e2e/duplicate-results.e2e-spec.ts | 8 +- e2e/examples-empty-fields.e2e-spec.ts | 48 ++- e2e/helpers/GremlinHelper.ts | 29 +- e2e/lechapt-calmon.e2e-spec.ts | 11 +- e2e/link-parallel-devices.e2e-spec.ts | 30 +- e2e/link-to-deleted-module.e2e-spec.ts | 18 +- e2e/linked-parameter-section-type.e2e-spec.ts | 7 +- e2e/list.e2e-spec.ts | 7 +- e2e/list.po.ts | 17 +- e2e/load-linked-params.e2e-spec.ts | 26 +- e2e/load-malformed-files.e2e-spec.ts | 9 +- e2e/load-save-session.e2e-spec.ts | 89 ++--- e2e/monkey-test/monkey.e2e-spec.ts | 101 +++-- e2e/navbar.po.ts | 46 ++- e2e/navigate-through-calculators.e2e-spec.ts | 10 +- e2e/notes.e2e-spec.ts | 11 +- e2e/ouvrages-empty-fields.e2e-spec.ts | 25 +- e2e/pab-cloisons-empty-fields.e2e-spec.ts | 3 +- e2e/pab.e2e-spec.ts | 208 +++++----- e2e/parallel-structures.e2e-spec.ts | 17 +- e2e/predam-empty-fields.e2e-spec.ts | 46 ++- e2e/predam-log.e2e-spec.ts | 10 +- e2e/preferences.e2e-spec.ts | 71 ++-- e2e/preferences.po.ts | 18 +- e2e/pressure-loss-empty-fields.e2e-spec.ts | 5 +- e2e/pressure-loss.e2e-spec.ts | 12 +- e2e/regime-uniforme-empty-fields.e2e-spec.ts | 3 +- e2e/remous.e2e-spec.ts | 24 +- e2e/reset-param-mode.e2e-spec.ts | 59 ++- e2e/reset-results.e2e-spec.ts | 24 +- e2e/section-empty-fields.e2e-spec.ts | 3 +- e2e/select-default-value.e2e-spec.ts | 5 +- e2e/sidenav.po.ts | 25 +- e2e/solveur.e2e-spec.ts | 185 +++++---- e2e/translation.e2e-spec.ts | 35 +- e2e/util.po.ts | 45 ++- e2e/valeurs-erronees.e2e-spec.ts | 16 +- e2e/variable-param-cancel.e2e-spec.ts | 16 +- wdio.conf.ts | 18 +- 55 files changed, 1363 insertions(+), 831 deletions(-) diff --git a/e2e/bief-empty-fields.e2e-spec.ts b/e2e/bief-empty-fields.e2e-spec.ts index 6977ce3ee..a828ffc0b 100644 --- a/e2e/bief-empty-fields.e2e-spec.ts +++ b/e2e/bief-empty-fields.e2e-spec.ts @@ -30,7 +30,7 @@ describe("Check fields are empty in 'up/downstream elevations of a reach' calcul await listPage.clickMenuEntryForCalcType(21); await browser.pause(200); - expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], - [true, true, true, true, true, true, true, true, true, true])) + await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], + [true, true, true, true, true, true, true, true, true, true]) }); }); diff --git a/e2e/calc-all-examples.e2e-spec.ts b/e2e/calc-all-examples.e2e-spec.ts index 8f228a167..adb93e8f1 100644 --- a/e2e/calc-all-examples.e2e-spec.ts +++ b/e2e/calc-all-examples.e2e-spec.ts @@ -2,6 +2,8 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; /** * Calculate all modules of all examples @@ -9,23 +11,20 @@ import { SideNav } from "./sidenav.po"; describe("ngHyd − example sessions −", () => { let calcPage: CalculatorPage; - let navbar: Navbar; + let navBar: Navbar; let prefPage: PreferencesPage; let sideNav: SideNav; beforeAll(() => { - jasmine.DEFAULT_TIMEOUT_INTERVAL = 100 * 1000; + // increase timeout to avoid "Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL" message + jasmine.DEFAULT_TIMEOUT_INTERVAL = 10 * 60 * 1000; // 10 min + calcPage = new CalculatorPage(); - navbar = new Navbar(); + navBar = new Navbar(); prefPage = new PreferencesPage(); sideNav = new SideNav(); }); - beforeEach(() => { - // increase timeout to avoid "Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL" message - jasmine.DEFAULT_TIMEOUT_INTERVAL = 10 * 60 * 1000; // 10 min - }); - it("calcul de tous les modules de tous les exemples −", async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); @@ -38,32 +37,39 @@ describe("ngHyd − example sessions −", () => { while (lastExampleFound) { if (i == 0) { // start page - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await browser.pause(200); } else { // empty session - await navbar.clickMenuButton(); - await browser.pause(200); - await sideNav.clickNewSessionButton(); - await browser.pause(1000); + // await navbar.clickMenuButton(); + // await browser.pause(200); + // await sideNav.clickNewSessionButton(); + // await browser.pause(1000); + await newSession(navBar, sideNav); } const examples = await $$("#examples-list .load-example"); await browser.pause(200); if (examples.length > i) { // click example #i - await (await examples.i).click(); + await examples[i].click(); await browser.pause(200); - const nbModules = await navbar.getCalculatorEntriesCount(); + const nbModules = await navBar.getCalculatorEntriesCount(); await browser.pause(200); for (let j = 0; j < nbModules; j++) { // select module - await navbar.openNthCalculator(j); - await browser.pause(50); + await navBar.openNthCalculator(j); + await browser.pause(300); + // await calcPage.closeSnackBar(); // opening a calculator can trigger a snackbar with "results invalidated for..." + // await browser.pause(300); + await calcPage.closeSnackBars(5, 500); // opening a calculator can trigger a snackbar with "results invalidated for..." + await browser.pause(500); // calculate module - await calcPage.getCalculateButton().click(); + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); // check results const hasResults = await calcPage.hasValidResults(); expect(hasResults).toBe(true, `example ${i + 1}, module ${j + 1} (starting at 1)`); diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 83882f4e7..0af1460ba 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -3,7 +3,10 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { testedCalcTypes } from "./tested_calctypes"; -import { scrollPageToTop } from "./util.po"; +import { openCalculator, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; +import { SideNav } from "./sidenav.po"; /** * For all calculators, try to calculate every parameter: check that only one parameter @@ -14,12 +17,14 @@ describe("ngHyd − calculate all parameters of all calculators", () => { let calcPage: CalculatorPage; let navBar: Navbar; let prefPage: PreferencesPage; + let sideNav: SideNav; beforeAll(async () => { listPage = new ListPage(); calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); navBar = new Navbar(); + sideNav = new SideNav(); // disable evil option "empty fields on module creation" await prefPage.navigateTo(); @@ -32,6 +37,24 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ const calcTypes = testedCalcTypes; + // const calcTypes = [0]; + // export const testedCalcTypes = [ + // 0, + // // omit 1 - LechaptCalmon + // 2, 3, 4, 5, 6, + // // omit 7 - Structure + // 8, 9, 10, 11, 12, 13, + // // omit 14 -Section + // 15, + // // omit 16 - CloisonAval + // 17, 18, 19, 20, 21, 22, 23, 24, 25, + // // omit 26 - YAXN + // 27, 28, 29, 30, + // // omit 31 - PbCloison and 32 - PbBassin + // 33, 34, 35 + // ]; + // const calcTypes =[30]; + // for each calculator for (const ct of calcTypes) { @@ -46,14 +69,22 @@ describe("ngHyd − calculate all parameters of all calculators", () => { } describe(" − calculate all parameters of calculator type [" + ct + "]", () => { it("", async () => { + await newSession(navBar, sideNav); + + //await browser.execute("window.moveTo(2000,30)") + // await browser.driver.moveTo(2000,30); + // go to list page - await navBar.clickNewCalculatorButton(); + // await navBar.clickNewCalculatorButton(); // click calculator button (instanciate) - await listPage.clickMenuEntryForCalcType(ct); + // await listPage.clickMenuEntryForCalcType(ct); + await openCalculator(ct, navBar, listPage); + // get all parameters IDs const inputs = await calcPage.getParamInputsHavingCalcMode(); + // if ((await inputs).length > 0) { if (inputs.length > 0) { // for each param for (let i = 0; i < inputs.length; i++) { @@ -68,7 +99,9 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // grab input again because calculating the module just refreshed all the fieldsets const input = (await calcPage.getParamInputsHavingCalcMode())[i]; // click "calc" mode button for this parameter + // await browser.pause(50); await calcPage.setParamMode(input, "cal"); + // await browser.pause(50); // check that only 1 button is in "calc" state const nbParamsCalc = await calcPage.getCheckedCalcModeButtons().length; expect(nbParamsCalc).toBe(1); @@ -76,6 +109,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); + await browser.pause(500); // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -86,11 +120,13 @@ describe("ngHyd − calculate all parameters of all calculators", () => { const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); + await browser.pause(500); // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } }); }); + // break; } }); diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index ee17d4f6d..d11a3f9ec 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Calculate button - ", () => { let listPage: ListPage; @@ -142,29 +143,31 @@ describe("Calculate button - ", () => { // open calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(calcType); - await browser.sleep(200); + await browser.pause(200); // for each input, set empty and check calculate button is not active - const inputs = calcPage.getParamInputs(); - const ninp = await inputs.count(); - for (let i = 0; i < ninp; i++) { - const inp = inputs.get(i); + // const pfls = await calcPage.getParamfieldlines(); + const inputs = await calcPage.getParamInputs(); + // for (const pfl of pfls) { + for (const inp of inputs) { // set input to fixed mode + // await calcPage.setParamMode(pfl, "fix"); await calcPage.setParamMode(inp, "fix"); - await browser.sleep(100); + await browser.pause(100); // clear input + // const inp = await calcPage.getParamfieldlineInput(pfl); await calcPage.clearInput(inp); - await browser.sleep(10); + await browser.pause(10); // check calculate button is disabled await calcPage.checkCalcButtonEnabled(false); - await browser.sleep(100); + await browser.pause(100); // refill input - await inp.sendKeys("1"); - await browser.sleep(100); + await browser.keys("1"); + await browser.pause(100); } } diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index 0f26d5a0d..ca0753940 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -3,7 +3,8 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, newSession } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Uses an example configuration to calculate : @@ -24,7 +25,7 @@ describe("ngHyd − calculate with linked parameters", () => { let listPage: ListPage; let calcPage: CalculatorPage; let navBar: Navbar; - let sidenav: SideNav; + let sideNav: SideNav; let prefPage: PreferencesPage; beforeAll(() => { @@ -32,27 +33,47 @@ describe("ngHyd − calculate with linked parameters", () => { calcPage = new CalculatorPage(); navBar = new Navbar(); prefPage = new PreferencesPage(); - sidenav = new SideNav(); + sideNav = new SideNav(); }); beforeEach(async () => { + await newSession(navBar, sideNav); + // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await prefPage.disableEvilEmptyFields(); await browser.pause(200); + await prefPage.disableEvilEmptyFields(); + await browser.pause(100); + }); + + afterEach(async () => { + //await browser.reloadSession(); + // await browser.pause(500); }); + // describe('webdriver.io page', () => { + // it('should reload my session with current capabilities', () => { + // console.log(browser.sessionId) + // browser.reloadSession() + // console.log(browser.sessionId) + // }) + // }); + async function computeAndCheckPresenceOfResults() { // check that "compute" button is active const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); + await browser.pause(200); // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } it(" − direct links : parameter linked to a single parameter", async () => { + // await browser.reloadSession(); + // await browser.pause(1000); + // create a Régime uniforme await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); @@ -61,12 +82,14 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y = calcPage.getInputById("Y"); + const Y = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y, "link"); const sel = await calcPage.getLinkedValueSelect(Y); await changeSelectValue(sel, 0); await computeAndCheckPresenceOfResults(); + // await browser.reloadSession(); + // await browser.closeWindow(); }); it(" − direct links : parameter linked to a single parameter, plus local variated parameter", async () => { @@ -78,15 +101,16 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y = calcPage.getInputById("Y"); + const Y = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y, "link"); const sel = await calcPage.getLinkedValueSelect(Y); await changeSelectValue(sel, 0); // vary W - const W = calcPage.getInputById("W"); + const W = await calcPage.getInputById("W"); await calcPage.setParamMode(W, "var"); await computeAndCheckPresenceOfResults(); + // await browser.reloadSession(); }); it(" − direct links : parameter linked to a variated parameter", async () => { @@ -94,14 +118,14 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); // vary Y - const Y1 = calcPage.getInputById("Y"); + const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "var"); // create a PAB : dimensions await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y2 = calcPage.getInputById("Y"); + const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); await changeSelectValue(sel, 0); @@ -114,14 +138,14 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); // calculate Y - const Y1 = calcPage.getInputById("Y"); + const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "cal"); // create a PAB : dimensions await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y2 = calcPage.getInputById("Y"); + const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); await changeSelectValue(sel, 0); @@ -134,19 +158,19 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); // calculate Y - const Y1 = calcPage.getInputById("Y"); + const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "cal"); // create a PAB : dimensions await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y2 = calcPage.getInputById("Y"); + const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); await changeSelectValue(sel, 0); // vary W - const W = calcPage.getInputById("W"); + const W = await calcPage.getInputById("W"); await calcPage.setParamMode(W, "var"); await computeAndCheckPresenceOfResults(); @@ -157,17 +181,17 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); // vary Q - const Q = calcPage.getInputById("Q"); + const Q = await calcPage.getInputById("Q"); await calcPage.setParamMode(Q, "var"); // calculate Y - const Y1 = calcPage.getInputById("Y"); + const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "cal"); // create a PAB : dimensions await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y2 = calcPage.getInputById("Y"); + const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); await changeSelectValue(sel, 0); @@ -184,7 +208,7 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(18); // link V0 to V (Régime uniforme) - const V0 = calcPage.getInputById("V0"); + const V0 = await calcPage.getInputById("V0"); await calcPage.setParamMode(V0, "link"); await computeAndCheckPresenceOfResults(); @@ -199,10 +223,10 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(18); // link V0 to V (Régime uniforme) - const V0 = calcPage.getInputById("V0"); + const V0 = await calcPage.getInputById("V0"); await calcPage.setParamMode(V0, "link"); // vary ZJ - const ZJ = calcPage.getInputById("ZJ"); + const ZJ = await calcPage.getInputById("ZJ"); await calcPage.setParamMode(ZJ, "var"); await computeAndCheckPresenceOfResults(); @@ -213,14 +237,14 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); // vary LargeurBerge - const LargeurBerge = calcPage.getInputById("LargeurBerge"); + const LargeurBerge = await calcPage.getInputById("LargeurBerge"); await calcPage.setParamMode(LargeurBerge, "var"); // create a Jet await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(18); // link V0 to V (Régime uniforme) - const V0 = calcPage.getInputById("V0"); + const V0 = await calcPage.getInputById("V0"); await calcPage.setParamMode(V0, "link"); await computeAndCheckPresenceOfResults(); @@ -231,16 +255,17 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickLoadSessionButton(); + await sideNav.clickLoadSessionButton(); await browser.pause(200); - await sidenav.loadSessionFile("./session/session-multivar-link.json"); + await sideNav.loadSessionFile("./session/session-multivar-link.json"); await browser.pause(500); expect(await navBar.getAllCalculatorTabs().length).toBe(2); // calculate await navBar.clickCalculatorTab(0); - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); // check that result is not empty const hasResults = await calcPage.hasResults(); @@ -251,12 +276,12 @@ describe("ngHyd − calculate with linked parameters", () => { expect(await calcPage.getAllVariatedResultsTableHeaders().length).toBe(7); // check that number of rows in the variated results table equals number of variated values - const varRows = calcPage.getAllVariatedResultsRows(); - const nbRows = await varRows.length; - expect(nbRows).toBe(191); // boundaries are included + const varRows = await calcPage.getAllVariatedResultsRows(); + // const nbRows = await varRows.length; + expect(varRows.length).toBe(191); // boundaries are included // check that all parameters have values for all iterations (Z2 might miss some if repeat strategy is not applied) - const lastRow = varRows.get(nbRows - 1); + const lastRow = varRows[varRows.length - 1]; const tds = await lastRow.$$("td"); tds.forEach((td) => { expect(td.getText()).not.toBe(""); @@ -268,9 +293,9 @@ describe("ngHyd − calculate with linked parameters", () => { // load session await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickLoadSessionButton(); + await sideNav.clickLoadSessionButton(); await browser.pause(200); - await sidenav.loadSessionFile("./session/session-pab-chain-nghyd-329.json"); + await sideNav.loadSessionFile("./session/session-pab-chain-nghyd-329.json"); await browser.pause(200); expect(await navBar.getAllCalculatorTabs().length).toBe(3); @@ -278,16 +303,18 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickCalculatorTab(2); await browser.pause(200); // click "compute" button - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(300); // check that result is not empty expect(await calcPage.hasResults()).toBe(true); // check that ERR is not present in Volume line of results table - let frt = calcPage.getFixedResultsTable(); - let volumeRow = calcPage.getNthRow(frt, 3); - let volumeCol = calcPage.getNthColumn(volumeRow, 2); - let volume = await volumeCol.getAttribute("textContent"); + let frt = await calcPage.getFixedResultsTable(); + let volumeRow = await calcPage.getNthRow(frt, 3); + let volumeCol = await calcPage.getNthColumn(volumeRow, 2); + // let volume = await volumeCol.getAttribute("textContent"); + let volume = await volumeCol.getText(); expect(Number(volume)).toBeCloseTo(44.565, 3); // click PAB-Nombre tab @@ -299,10 +326,11 @@ describe("ngHyd − calculate with linked parameters", () => { await browser.pause(200); // check that ERR is not present in Volume line of results table - frt = calcPage.getFixedResultsTable(); - volumeRow = calcPage.getNthRow(frt, 3); - volumeCol = calcPage.getNthColumn(volumeRow, 2); - volume = await volumeCol.getAttribute("textContent"); + frt = await calcPage.getFixedResultsTable(); + volumeRow = await calcPage.getNthRow(frt, 3); + volumeCol = await calcPage.getNthColumn(volumeRow, 2); + // volume = await volumeCol.getText("textContent"); + volume = await volumeCol.getText(); expect(Number(volume)).toBeCloseTo(44.565, 3); }); @@ -314,7 +342,7 @@ describe("ngHyd − calculate with linked parameters", () => { await browser.pause(200); // upstream water level should not have link mode (only one calculator) - const Z1_1 = calcPage.getInputById("Z1"); + const Z1_1 = await calcPage.getInputById("Z1"); expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(false); // create 2nd PAB-Chute @@ -335,7 +363,7 @@ describe("ngHyd − calculate with linked parameters", () => { await browser.pause(200); // link upstream water level in 2nd calculator to upstream water level in 1st one - const Z1_2 = calcPage.getInputById("Z1"); + const Z1_2 = await calcPage.getInputById("Z1"); await calcPage.setParamMode(Z1_2, "link"); // back to 1st calculator diff --git a/e2e/calculator.e2e-spec.ts b/e2e/calculator.e2e-spec.ts index 841a53047..5c41eba08 100644 --- a/e2e/calculator.e2e-spec.ts +++ b/e2e/calculator.e2e-spec.ts @@ -21,10 +21,11 @@ describe("ngHyd − calculator page", () => { }); it("when a calculator is open, no active label should be empty", async () => { - const labels = page.getInputLabels(); - await labels.each(async (l) => { + const labels = await page.getInputLabels(); + // await labels.each(async (l) => { + for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); - }); + } }); }); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 5d11fc5d9..531b0e195 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -1,5 +1,6 @@ import { scrollPageToTop, scrollToElement } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { Key } from 'webdriverio' export class CalculatorPage { @@ -11,14 +12,58 @@ export class CalculatorPage { return $$("ngparam-input input.form-control"); } + // getParamfieldlines() { + // return $$("param-field-line"); + // } + + // getParamfieldlineInput(pfl) { + // return pfl.$("ngparam-input input.form-control"); + // } + + // async getParamInputsHavingCalcMode() { + // const ret = []; + // const inputs = await this.getParamInputs(); + // // await inputs.each(async (i) => { + // // if (await this.inputHasCalcModeButton(i)) { + // // ret.push(i); + // // } + // // }); + + // // for await (const img of $$('img')) { + // // console.log(await img.getAttribute('src)) + // // } + + // for await (const i of inputs) { + // if (await this.inputHasCalcModeButton(i)) { + // ret.push(i); + // } + // } + + // return ret; + // } async getParamInputsHavingCalcMode() { const ret = []; - const inputs = this.getParamInputs(); - await inputs.each(async (i) => { - if (await this.inputHasCalcModeButton(i)) { - ret.push(i); + const inputs = await $$("param-field-line"); + // await inputs.each(async (i) => { + // if (await this.inputHasCalcModeButton(i)) { + // ret.push(i); + // } + // }); + + // for await (const img of $$('img')) { + // console.log(await img.getAttribute('src)) + // } + + for (const inp of inputs) { + // if (await this.inputHasCalcModeButton(i)) { + // ret.push(i); + // } + const toggle = await inp.$("mat-button-toggle.radio_cal > button"); + if (await toggle.isExisting()) { + ret.push(inp); } - }); + } + return ret; } @@ -36,14 +81,16 @@ export class CalculatorPage { /** * get the option count of a select */ - async getMatselectOptionCount(select: string | Element) { - const sel = select instanceof Element ? select : $(`#${select}`); + async getMatselectOptionCount(select) { + const sel = typeof (select) === "string" ? $(`#${select}`) : select; await scrollToElement(sel); if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); const options = $$(".cdk-overlay-container mat-option"); // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown + //await sel.keys('Escape'); // close dropdown + await browser.keys(Key.Escape); // close dropdown return await options.length; } } @@ -51,21 +98,25 @@ export class CalculatorPage { /** * get the text of the all given select options */ - async getMatselectOptionsText(select: string | Element): Promise<string[]> { - const sel = select instanceof Element ? select : $(`#${select}`); + async getMatselectOptionsText(select) { + const sel = typeof (select) === "string" ? await $(`#${select}`) : select; await scrollToElement(sel); + await browser.pause(200); if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); - const options = $$(".cdk-overlay-container mat-option span"); + await browser.pause(500); + const options = await $$(".cdk-overlay-container mat-option span"); let res = []; - const nopt = await options.length; + const nopt = options.length; for (let o = 0; o < nopt; o++) { - const opt = options.get(o); + const opt = options[o]; res.push(await opt.getText()) } // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown - + // await sel.keys('Escape'); // close dropdown + await browser.keys(Key.Escape); // close dropdown + await browser.pause(500); return res; } } @@ -83,11 +134,18 @@ export class CalculatorPage { */ async getMatselectCurrentOptionText(select): Promise<string> { const currentOption = await this.getSelectCurrentOption(select); - return await currentOption.$("span span").getText(); + await browser.pause(100); + // return await currentOption.$("span span").getText(); + const opt = await currentOption.$("span span"); + await browser.pause(100); + const res = await opt.getText(); + await browser.pause(100); + return res; } getSelectById(id: string) { - return $(`#${id}`); + // return $(`#${id}`); + return $(`mat-select[id='${id}']`); // IDs cannot by a number, so use this query form } async isMatSelectPresent(id: string) { @@ -96,7 +154,8 @@ export class CalculatorPage { } async getSelectValueText(select) { - return await select.$(".mat-select-value-text > span").getText(); + const span = await select.$(".mat-select-value-text > span"); + return await span.getText(); } async isSelectEmpty(select) { @@ -110,7 +169,12 @@ export class CalculatorPage { } getInputById(id: string) { - return $(`#${id}`); + // return $(`#${id}`); + return $(`input[id='${id}']`); // IDs cannot by a number, so use this query form + } + + getNgInputById(id: string) { + return $(`ngparam-input input[id='${id}']`); // IDs cannot by a number, so use this query form } getSaveSessionButton() { @@ -130,11 +194,11 @@ export class CalculatorPage { } getAddStructureButton() { - return $("structure-fieldset-container .hyd-window-btns button.add-structure"); + return $("fieldset-container .hyd-window-btns button.add-structure"); } getCopyStructureButton() { - return $("structure-fieldset-container .hyd-window-btns button.copy-structure"); + return $("fieldset-container .hyd-window-btns button.copy-structure"); } getAllLinkButtons() { @@ -182,34 +246,74 @@ export class CalculatorPage { } async isNgParamPresent(id: string) { - const inp = $("ngparam-input input#" + id); + // const inp = $("ngparam-input input#" + id); + const inp = await this.getNgInputById(id); return await inp.isExisting(); } - async inputHasCalcModeButton(input) { + /** + * find parameter mode radio button linked to an input + */ + async getInputRadioButton(input, mode: string) { + const tag = await input.getTagName(); + // this function may not be called with an input but a param-field-line + const root = tag === "input" ? await this.findParentContainer(input) : input; // get parent (div.container) - const container = await this.findParentContainer(input); - // find radio buttons - const button = container.$("mat-button-toggle.radio_cal > button"); + // const container = ; + // find radio button + // return await root.$(`mat-button-toggle.radio_${mode} > button`); + return await root.$(`mat-button-toggle.radio_${mode}`); + } + + /** + * find parameter mode radio button linked to an input + */ + async getInputRadioButtonFromId(id, mode) { + const input = await this.getInputById(id); + // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find radio button + // return await container.$(`mat-button-toggle.radio_${mode} > button`); + return await this.getInputRadioButton(input, mode); + } + + async inputHasCalcModeButton(input) { + // // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find radio buttons + // const button = await container.$("mat-button-toggle.radio_cal > button"); + const button = await this.getInputRadioButton(input, "cal"); return await button.isExisting(); } async inputHasLinkModeButton(input) { - // get parent (div.container) - const container = await this.findParentContainer(input); - // find radio buttons - const button = container.$("mat-button-toggle.radio_link > button"); + // // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find radio buttons + // const button = container.$("mat-button-toggle.radio_link > button"); + const button = await this.getInputRadioButton(input, "link"); return await button.isExisting(); } + async isRadioButtonChecked(radio) { + // return (await radio.getAttribute("ng-reflect-checked")) === "true"; + // if (await radio.getTagName() !== "mat-radio-button") { + if (await radio.getTagName() !== "mat-button-toggle") { + radio = await this.getParentElement(radio); + } + const a = await radio.getAttribute("ng-reflect-checked"); + return a === "true"; + } + /** * @returns true if "fixed mode" button linked to an input is selected */ async inputIsInFixedMode(input): Promise<boolean> { - // get parent (div.container) - const container = await this.findParentContainer(input); - // find fixed radio button - const button = container.$("mat-button-toggle.radio_fix"); + // // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find fixed radio button + // const button = container.$("mat-button-toggle.radio_fix"); + const button = await this.getInputRadioButton(input, "fix"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -217,10 +321,11 @@ export class CalculatorPage { * @returns true if "calculated mode" button linked to an input is selected */ async inputIsInCalculatedMode(input): Promise<boolean> { - // get parent (div.container) - const container = await this.findParentContainer(input); - // find calc radio button - const button = container.$("mat-button-toggle.radio_cal"); + // // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find calc radio button + // const button = container.$("mat-button-toggle.radio_cal"); + const button = await this.getInputRadioButton(input, "cal"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -228,32 +333,40 @@ export class CalculatorPage { * @returns true if "linked mode" button linked to an input is selected */ async inputIsInLinkedMode(input): Promise<boolean> { - // get parent (div.container) - const container = await this.findParentContainer(input); - // find calc radio button - const button = container.$("mat-button-toggle.radio_link"); + // // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find calc radio button + // const button = container.$("mat-button-toggle.radio_link"); + const button = await this.getInputRadioButton(input, "link"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } async hasResults() { - return ((await this.presentAndVisible("fixedvar-results fixed-results > .fixed-results-container")) - || - (await this.presentAndVisible("fixedvar-results results-chart > chart-results-container")) - || - (await this.presentAndVisible("section-results fixed-results > .fixed-results-container")) - || - (await this.presentAndVisible("remous-results #main-chart")) - || - (await this.presentAndVisible("pab-results pab-results-table")) - || - (await this.presentAndVisible("pb-results pb-results-table")) - || - (await this.presentAndVisible("macrorugo-compound-results macrorugo-compound-results-table")) || (await this.presentAndVisible("jet-results .fixed-results-container"))); - } - - async presentAndVisible(selector: string): Promise<boolean> { - const elt = $(selector); - return (await elt.isExisting()) && (await elt.isDisplayed()); + return (await (this.presentAndVisible("fixedvar-results fixed-results > .fixed-results-container")) + || + (await this.presentAndVisible("fixedvar-results results-chart > chart-results-container")) + || + (await this.presentAndVisible("section-results fixed-results > .fixed-results-container")) + || + (await this.presentAndVisible("remous-results #main-chart")) + || + (await this.presentAndVisible("pab-results pab-results-table")) + || + (await this.presentAndVisible("pb-results pb-results-table")) + || + (await this.presentAndVisible("macrorugo-compound-results macrorugo-compound-results-table")) + || + (await this.presentAndVisible("jet-results .fixed-results-container"))); + } + + async presentAndVisible(selector: string) { + const elt = await $(selector); + // return (await elt.isExisting()) && (await elt.isDisplayed()); + // console.log("presentAndVisible isExisting", selector, await elt.isExisting()) + // console.log("presentAndVisible isDisplayed", selector, await elt.isDisplayed()) + const res = (await elt.isExisting()) && (await elt.isDisplayed()); + // console.log("res", selector, res); + return res; } /** @@ -326,37 +439,89 @@ export class CalculatorPage { } async clickCloneCalcButton() { - const cloneButton = $("#clone-calc"); - return await cloneButton.click(); + const cloneButton = await $("#clone-calc"); + await scrollToElement(cloneButton); + await cloneButton.click(); } // check that "compute" button is in given enabled/disabled state async checkCalcButtonEnabled(enabled: boolean) { - const calcButton = this.getCalculateButton(); + const calcButton = await this.getCalculateButton(); expect(await calcButton.isEnabled()).toBe(enabled); return calcButton; } + async getParentElement(elt) { + return elt.$(".."); + } + // find parent element of elt having class "container" async findParentContainer(elt) { let i = 8; // garde fous while (((await elt.getAttribute("class")) !== "container") && (i >= 0)) { - elt = elt.$(".."); + // elt = await elt.$(".."); + elt = await this.getParentElement(elt) i--; } return elt; } + async logElement(elt, attr = undefined) { + console.log("ELT TAG", await elt.getTagName()); + console.log("ELT ID", await elt.getAttribute("id")); + console.log("ELT CLASS", await elt.getAttribute("class")); + // console.log("ELT VALUE '" + await elt.getAttribute("value") + "'"); + console.log("ELT VALUE '" + await elt.getValue() + "'"); + console.log("ELT TEXT '" + await elt.getText() + "'"); + if (attr !== undefined) { + console.log(`ELT ATTR '${attr}'='${await elt.getAttribute(attr)}'`); + } + } + + async logParamFieldLine(pfl) { + await this.logElement(pfl); + const inp = await pfl.$("ngparam-input input.form-control"); + await this.logElement(inp) + } + /** - * @param elt an <input> element + * @param paramFieldLine an <input> element * @param mode "fix", "var", "cal" or "link" */ async setParamMode(elt, mode: string) { + await scrollToElement(elt); + await browser.pause(100); + // // get parent (div.container) + // const container = await this.findParentContainer(elt); + // // find radio buttons + // const button = await container.$("mat-button-toggle.radio_" + mode + " > button"); + const button = await this.getInputRadioButton(elt, mode); + //await scrollPageToTop(); // sometimes button slides behind navbar and click() fails + await button.click(); + // for "var" mode, close the modal + if (mode === "var") { + await browser.pause(500); // wait for the modal to appear + //await element(by.css("dialog-edit-param-values .mat-dialog-actions button")).click(); // clique "annuler" et non "valider" : + const cancelBtn = await $("dialog-edit-param-values .mat-dialog-actions button.mat-warn"); + await cancelBtn.click(); + await browser.pause(500); // wait for the navbar to reappear after modal dismissal + } else { + await browser.pause(200); + } + } + + async setParamMode2(paramFieldLine, mode: string) { + // await elt.scrollIntoView({ block: 'center', inline: 'center' }); + // await paramFieldLine.waitForDisplayed(); + // await paramFieldLine.scrollIntoView({ block: 'center' }); + + // browser.executeScript("document.querySelector('#countries').scrollIntoView()") + //await browser.execute(e => { e.scrollIntoView({ block: 'center' }) }, paramFieldLine); + await scrollToElement(paramFieldLine); + // await browser.pause(100); // get parent (div.container) - const container = await this.findParentContainer(elt); - // find radio buttons - const button = container.$("mat-button-toggle.radio_" + mode + " > button"); - await scrollPageToTop(); // sometimes button slides behind navbar and click() fails + const button = await paramFieldLine.$("mat-button-toggle.radio_" + mode + " > button"); + //await scrollPageToTop(); // sometimes button slides behind navbar and click() fails await button.click(); // for "var" mode, close the modal if (mode === "var") { @@ -383,13 +548,14 @@ export class CalculatorPage { * by parameter ID */ async storeAllInputValues() { - const inputs = this.getParamInputs(); + const inputs = await this.getParamInputs(); const values = {}; - await inputs.each(async (i) => { + for (const i of inputs) { const inputId = await i.getAttribute("id"); - const inputValue = await i.getAttribute("value"); + // const inputValue = await i.getAttribute("value"); + const inputValue = await i.getValue(); values[inputId] = +inputValue; // cast to number to avoid false negative (integers starting with 0) - }); + }; return values; } @@ -397,24 +563,27 @@ export class CalculatorPage { * Modifies all the calculator's editable inputs values by adding a random digit other than 0 at the end */ async modifyAllInputValues() { - const inputs = this.getParamInputs(); - await inputs.each(async (i) => { + const inputs = await this.getParamInputs(); + for (const i of inputs) { if (await i.isDisplayed()) { // N in YAXN child of SPP module must not be float - const isN = (await i.getAttribute("id")).includes("_N"); // @TODO strengthen this clodo test + const id = await i.getAttribute("id"); + const isN = id.includes("_N"); // @TODO strengthen this clodo test // Ob in Grille is set to 0.5 but cannot exceed 0.58; do not touch it - const isOb = (await i.getAttribute("id")) === "Ob"; - const hasDot = (await i.getAttribute("value")).includes("."); - const hasExponent = (await i.getAttribute("value")).includes("e"); - let keys = "" + Math.floor(Math.random() * 9) + 1; + const isOb = id === "Ob"; + // const value = await i.getAttribute("value"); + const value = await i.getValue(); + const hasDot = value.includes("."); + const hasExponent = value.includes("e"); + let keys = "" + (Math.floor(Math.random() * 9) + 1); if (!hasDot && !hasExponent && !isN) { keys = "." + keys; } if (!isOb && (await i.getAttribute("disabled")) === null) { - await i.setValue(keys); + await i.addValue(keys); } } - }); + }; } /** @@ -423,8 +592,9 @@ export class CalculatorPage { * @param empty true to check input is empty, false to check it is NOT empty */ async checkEmptyInput(id: string, empty: boolean = true) { - const inp = this.getInputById(id); - const val = await inp.getAttribute("value"); + const inp = await this.getInputById(id); + // const val = inp.getAttribute("value"); + const val = await inp.getValue() if (empty) { expect(val).toEqual(""); } @@ -442,7 +612,8 @@ export class CalculatorPage { let n = 0; for (const id of inputIds) { const inp = await this.getInputById(id); - const txt = await inp.getAttribute("value"); + // const txt = await inp.getAttribute("value"); + const txt = await inp.getValue(); expect(txt === "").toEqual(emptys[n]); n++; } @@ -458,11 +629,31 @@ export class CalculatorPage { /** * reliable input clearing */ - async clearInput(inp: ElementFinder) { - const txt = await inp.getAttribute('value'); + async clearInput(inp) { + await inp.click(); // make input get focus for browser.keys() to send key sequence to it + const txt = await inp.getValue(); const len = txt.length; for (let n = 0; n < len; n++) { - await inp.sendKeys(Key.BACK_SPACE); + await browser.keys(Key.Backspace); } } + + async closeSnackBar() { + // const sb = $(".mat-simple-snackbar-action"); + const sb = $("simple-snack-bar button"); + if ((await sb.isExisting()) && (await sb.isDisplayed())) { + await sb.click(); + return true; + } + return false; + } + + async closeSnackBars(n: number, pause: number) { + let stop: boolean; + do { + stop = !await this.closeSnackBar(); + await browser.pause(pause); + n--; + } while (n > 0 && !stop); + } } diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index cd0493c6f..cd06561de 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -4,6 +4,7 @@ import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; import { testedCalcTypes } from "./tested_calctypes"; +import { browser, $, $$, expect } from '@wdio/globals' /** * For all calculators, try to calculate every parameter: check that only one parameter @@ -71,13 +72,17 @@ describe("ngHyd − check translation of all calculators", () => { if (!disabledState) { // click "compute" button await calcButton.click(); + await browser.pause(200); // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } // check absence of "*** message not found" in whole DOM - expect(await browser.getSource()).not.toContain("*** message not found", "missing translations found"); + // const source = document.body.innerHTML; + const source = await browser.execute("return document.body.innerHTML"); + // expect(await browser.getSource()).not.toContain("*** message not found", "missing translations found"); + expect(source).not.toContain("*** message not found", "missing translations found"); // empty session await navBar.clickMenuButton(); diff --git a/e2e/cloisons.e2e-spec.ts b/e2e/cloisons.e2e-spec.ts index f372175d1..b134960bf 100644 --- a/e2e/cloisons.e2e-spec.ts +++ b/e2e/cloisons.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Cloisons - différents tests qui n'ont pas tant de rapport que ça avec les cloisons :) @@ -38,23 +39,25 @@ describe("ngHyd − cloisons", () => { await browser.pause(300); // 3. link every parameter except Structure ones - await calcPage.setParamMode(calcPage.getInputById("calc_Q"), "link"); - await calcPage.setParamMode(calcPage.getInputById("Z1"), "link"); - await calcPage.setParamMode(calcPage.getInputById("LB"), "link"); - await calcPage.setParamMode(calcPage.getInputById("BB"), "link"); - await calcPage.setParamMode(calcPage.getInputById("PB"), "link"); - await calcPage.setParamMode(calcPage.getInputById("DH"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("calc_Q"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("Z1"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("LB"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("BB"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("PB"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("DH"), "link"); await browser.pause(300); // 4. change LoiDebit - await changeSelectValue(calcPage.getSelectById("select_loidebit"), 1); + await changeSelectValue(await calcPage.getSelectById("select_loidebit"), 1); await browser.pause(300); - + // 5. check number of inputs in CALC mode expect(await calcPage.getCheckedCalcModeButtons().length).toBe(1); - + // 6. try calculating the module - await calcPage.getCalculateButton().click(); - expect(calcPage.hasResults()).toBe(true); + const btn = await calcPage.getCalculateButton() + await btn.click(); + await browser.pause(200); + expect(await calcPage.hasResults()).toBe(true); }); }); diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index f8a588fec..3520cd7d9 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -3,7 +3,9 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { testedCalcTypes } from "./tested_calctypes"; -import { scrollPageToTop } from "./util.po"; +import { newSession, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { SideNav } from "./sidenav.po"; /** * Clone calculators @@ -11,14 +13,16 @@ import { scrollPageToTop } from "./util.po"; describe("ngHyd − clone all calculators with all possible <select> values", () => { let listPage: ListPage; let calcPage: CalculatorPage; - let navbar: Navbar; + let navBar: Navbar; let prefPage: PreferencesPage; + let sideNav: SideNav; beforeAll(async () => { listPage = new ListPage(); calcPage = new CalculatorPage(); - navbar = new Navbar(); + navBar = new Navbar(); prefPage = new PreferencesPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -26,6 +30,8 @@ describe("ngHyd − clone all calculators with all possible <select> values", () await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); await browser.pause(200); + + await navBar.clickNewCalculatorButton(); }); describe("", () => { @@ -40,9 +46,11 @@ describe("ngHyd − clone all calculators with all possible <select> values", () } describe(" − clone all variations of calculator type [" + ct + "]", () => { it("", async () => { - await navbar.clickNewCalculatorButton(); + await newSession(navBar, sideNav); + // click calculator button (instanciate) await listPage.clickMenuEntryForCalcType(ct); + await browser.pause(200); // get all select IDs outside Structures // get select IDs inside Structures @@ -56,12 +64,12 @@ describe("ngHyd − clone all calculators with all possible <select> values", () await scrollPageToTop(); await calcPage.clickCloneCalcButton(); await browser.pause(300); - + // check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().length).toBe(2); - + expect(await navBar.getAllCalculatorTabs().length).toBe(2); + // @TODO check <select> values - + // read all <input> values and compare them to stored ones const cloneValues = await calcPage.storeAllInputValues(); for (const k in cloneValues) { diff --git a/e2e/clone-calc.e2e-spec.ts b/e2e/clone-calc.e2e-spec.ts index 1fcb7dd4f..f52677838 100644 --- a/e2e/clone-calc.e2e-spec.ts +++ b/e2e/clone-calc.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Clone calculators @@ -32,7 +33,7 @@ describe("ngHyd − clone a calculator", () => { // 1. create target modules for linked parameter await listPage.clickMenuEntryForCalcType(3); // Régime uniforme await browser.pause(500); - const debitRU = calcPage.getInputById("calc_Q"); // "Débit" is calculated by default + const debitRU = await calcPage.getInputById("calc_Q"); // "Débit" is calculated by default await calcPage.setParamMode(debitRU, "fix"); await browser.pause(500); @@ -50,16 +51,18 @@ describe("ngHyd − clone a calculator", () => { k: 0.6, Ks: 42 }; - await changeSelectValue(calcPage.getSelectById("select_section"), 3); // mode "parabolique" + const selSection = await calcPage.getSelectById("select_section"); + await changeSelectValue(selSection, 3); // mode "parabolique" await calcPage.getInputById("k").clearValue(); await calcPage.getInputById("k").setValue(sourceValues["k"]); await calcPage.getInputById("Ks").clearValue(); await calcPage.getInputById("Ks").setValue(sourceValues["Ks"]); // link "Débit" to "Courbe de remous" - const debitSP = calcPage.getInputById("Q"); + const debitSP = await calcPage.getInputById("Q"); await calcPage.setParamMode(debitSP, "link"); await browser.pause(500); - await changeSelectValue(calcPage.getSelectById("linked_Q"), 1); // "Courbe de remous" + const selQ = await calcPage.getSelectById("linked_Q"); + await changeSelectValue(selQ, 1); // "Courbe de remous" await browser.pause(500); // otherwise clickCloneCalcButton() fails with "Element is not clickable at point" @@ -73,11 +76,15 @@ describe("ngHyd − clone a calculator", () => { await browser.pause(500); // 5. compare values - Object.keys(sourceValues).forEach(async (k) => { + // Object.keys(sourceValues).forEach(async (k) => { + // const v = sourceValues[k]; + for (const k in sourceValues) { const v = sourceValues[k]; - const displayedVal = await calcPage.getInputById(k).getAttribute("value"); + // const displayedVal = await calcPage.getInputById(k).getAttribute("value"); + const inp = await calcPage.getInputById(k); + const displayedVal = await inp.getValue(); expect(displayedVal).toBe("" + v); - }); + }; // @TODO check linked value (see above) }); diff --git a/e2e/compute-reset-chained-links.e2e-spec.ts b/e2e/compute-reset-chained-links.e2e-spec.ts index 6152104ec..73b01da87 100644 --- a/e2e/compute-reset-chained-links.e2e-spec.ts +++ b/e2e/compute-reset-chained-links.e2e-spec.ts @@ -3,6 +3,8 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; /** * Load a session containing 3 calculators, having linked parameters @@ -14,14 +16,14 @@ import { PreferencesPage } from "./preferences.po"; describe("ngHyd − compute then reset chained results − ", () => { let startPage: AppPage; let calcPage: CalculatorPage; - let navbar: Navbar; + let navBar: Navbar; let sidenav: SideNav; let prefPage: PreferencesPage; beforeAll(() => { startPage = new AppPage(); calcPage = new CalculatorPage(); - navbar = new Navbar(); + navBar = new Navbar(); sidenav = new SideNav(); prefPage = new PreferencesPage(); }); @@ -29,35 +31,36 @@ describe("ngHyd − compute then reset chained results − ", () => { it("when loading session-cascade-params.json, computation should not be chained, but results reset should be", async () => { // load session file await startPage.navigateTo(); - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-cascade-params.json"); await browser.pause(500); - expect(await navbar.getAllCalculatorTabs().length).toBe(3); + expect(await navBar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module - await navbar.clickCalculatorTabForUid("Y2l2Y3"); + await navBar.clickCalculatorTabForUid("Y2l2Y3"); // click "compute" button const calcButton = calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); // down-most module should have results let hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); // up-most should not - await navbar.clickCalculatorTabForUid("ZTFxeW"); + await navBar.clickCalculatorTabForUid("ZTFxeW"); hasResults = await calcPage.hasResults(); expect(hasResults).toBe(false); - await navbar.clickCalculatorTabForUid("Z3EwY2"); + await navBar.clickCalculatorTabForUid("Z3EwY2"); // middle one should hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); // 2. get up-most module - await navbar.clickCalculatorTabForUid("ZTFxeW"); + await navBar.clickCalculatorTabForUid("ZTFxeW"); // modify an input that is not linked await calcPage.getInputById("Ks").clearValue(); @@ -65,13 +68,13 @@ describe("ngHyd − compute then reset chained results − ", () => { // other 2 modules should still have their results for (let i = 1; i < 3; i++) { - await navbar.clickCalculatorTab(i); + await navBar.clickCalculatorTab(i); hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } // 3. get up-most module again - await navbar.clickCalculatorTabForUid("ZTFxeW"); + await navBar.clickCalculatorTabForUid("ZTFxeW"); // modify input that is linked await calcPage.getInputById("LargeurBerge").clearValue(); @@ -79,7 +82,7 @@ describe("ngHyd − compute then reset chained results − ", () => { // check all 3 modules for absence of results for (let i = 0; i < 3; i++) { - await navbar.clickCalculatorTab(i); + await navBar.clickCalculatorTab(i); hasResults = await calcPage.hasResults(); expect(hasResults).toBe(false); } @@ -88,30 +91,31 @@ describe("ngHyd − compute then reset chained results − ", () => { it("when loading session-cascade-results.json, computation and results reset should be chained", async () => { // load session file await startPage.navigateTo(); - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-cascade-results.json"); await browser.pause(500); - expect(await navbar.getAllCalculatorTabs().length).toBe(3); + expect(await navBar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module (PAB Dimensions) - await navbar.clickCalculatorTabForUid("eHh5YX"); + await navBar.clickCalculatorTabForUid("eHh5YX"); // click "compute" button const calcButton = calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); // check all 3 modules for results for (let i = 0; i < 3; i++) { - await navbar.clickCalculatorTab(i); + await navBar.clickCalculatorTab(i); const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } // 2. get up-most module (Macro-rugo) - await navbar.clickCalculatorTabForUid("MGg5OH"); + await navBar.clickCalculatorTabForUid("MGg5OH"); // modify any input (for ex. "Ks") await calcPage.getInputById("Ks").clearValue(); @@ -119,71 +123,75 @@ describe("ngHyd − compute then reset chained results − ", () => { // check all 3 modules for absence of results for (let i = 0; i < 3; i++) { - await navbar.clickCalculatorTab(i); + await navBar.clickCalculatorTab(i); const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(false); } }); it("when loading session-results-invalidation.json, results reset should not be triggered on calculation", async () => { + await newSession(navBar, sidenav); + // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); await browser.pause(200); // start page - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await browser.pause(200); // load session file - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-results-invalidation.json"); await browser.pause(500); - expect(await navbar.getAllCalculatorTabs().length).toBe(2); + expect(await navBar.getAllCalculatorTabs().length).toBe(2); // get down-most module (Ouvrages) - await navbar.clickCalculatorTabForUid("amd2OG"); + await navBar.clickCalculatorTabForUid("amd2OG"); // click "compute" button const calcButton = calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); // 2. get up-most module (Ouvrages 1) - await navbar.clickCalculatorTabForUid("aTgwMm"); + await navBar.clickCalculatorTabForUid("aTgwMm"); // modify an input that is not linked await calcPage.getInputById("Z2").clearValue(); await calcPage.getInputById("Z2").setValue("101.8"); // the down-most module should still have its results - await navbar.clickCalculatorTabForUid("amd2OG"); + await navBar.clickCalculatorTabForUid("amd2OG"); const hasResults2 = await calcPage.hasResults(); expect(hasResults2).toBe(true); // calculate the upmost module - await navbar.clickCalculatorTabForUid("aTgwMm"); + await navBar.clickCalculatorTabForUid("aTgwMm"); const calcButton2 = calcPage.getCalculateButton(); await calcButton2.click(); + await browser.pause(200); // the down-most module should still have its results - await navbar.clickCalculatorTabForUid("amd2OG"); + await navBar.clickCalculatorTabForUid("amd2OG"); const hasResults3 = await calcPage.hasResults(); expect(hasResults3).toBe(true); // modify an input that is linked - await navbar.clickCalculatorTabForUid("aTgwMm"); - await calcPage.getInputById("0_ZDV").clearValue(); - await calcPage.getInputById("0_ZDV").setValue("101"); + await navBar.clickCalculatorTabForUid("aTgwMm"); + const inpZDV = await calcPage.getInputById("0_ZDV"); + await inpZDV.clearValue(); + await inpZDV.setValue("101"); // the down-most module should not have its results anymore - await navbar.clickCalculatorTabForUid("amd2OG"); + await navBar.clickCalculatorTabForUid("amd2OG"); const hasResults4 = await calcPage.hasResults(); expect(hasResults4).toBe(false); - }); }); diff --git a/e2e/cote-amont-aval-bief.e2e-spec.ts b/e2e/cote-amont-aval-bief.e2e-spec.ts index 294151d0f..cee4caaee 100644 --- a/e2e/cote-amont-aval-bief.e2e-spec.ts +++ b/e2e/cote-amont-aval-bief.e2e-spec.ts @@ -2,18 +2,23 @@ import { PreferencesPage } from "./preferences.po" import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; +import { SideNav } from "./sidenav.po"; describe("ngHyd − up/downstream elevations of a reach", () => { let prefPage: PreferencesPage; let navBar: Navbar; let listPage: ListPage; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -37,32 +42,32 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await flowCalcBtn.click(); // check details buttons are disabled - const upDetailsBtn = $("#generate-sp-aval"); - expect(upDetailsBtn.isEnabled()).toBe(false); - const downDetailsBtn = $("#generate-sp-amont"); - expect(downDetailsBtn.isEnabled()).toBe(false); + const upDetailsBtn = await $("#generate-sp-aval"); + expect(await upDetailsBtn.isEnabled()).toBe(false); + const downDetailsBtn = await $("#generate-sp-amont"); + expect(await downDetailsBtn.isEnabled()).toBe(false); // set value to upstream water elevation so that flow calculation leads to no error - const upWEinput = calcPage.getInputById("Z1"); + const upWEinput = await calcPage.getInputById("Z1"); await upWEinput.clearValue(); await upWEinput.setValue("100.664"); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.pause(2000); + await browser.pause(300); // check details buttons are enabled - expect(upDetailsBtn.isEnabled()).toBe(true); - expect(downDetailsBtn.isEnabled()).toBe(true); + expect(await upDetailsBtn.isEnabled()).toBe(true); + expect(await downDetailsBtn.isEnabled()).toBe(true); // click upstream hydraulic details button await upDetailsBtn.click(); await browser.pause(500); // a second calculator should be created - let calcs = navBar.getAllCalculatorTabs(); - expect((await calcs).length).toEqual(2); + let calcs = await navBar.getAllCalculatorTabs(); + expect(calcs.length).toEqual(2); // click downstream hydraulic details button await navBar.openNthCalculator(0); @@ -70,38 +75,40 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await browser.pause(500); // a third calculator should be created - calcs = navBar.getAllCalculatorTabs(); - expect((await calcs).length).toEqual(3); + calcs = await navBar.getAllCalculatorTabs(); + expect(calcs.length).toEqual(3); }); it("check hydraulic details availability - upstream water elevation calculation", async () => { + await newSession(navBar, sideNav); + // open "up/downstream elevations of a reach" calculator - await navBar.clickNewCalculatorButton(); + // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(21); await browser.pause(200); // check details buttons status - const upDetailsBtn = $("#generate-sp-aval"); - expect(upDetailsBtn.isEnabled()).toBe(true); - const downDetailsBtn = $("#generate-sp-amont"); - expect(downDetailsBtn.isEnabled()).toBe(false); + const upDetailsBtn = await $("#generate-sp-aval"); + expect(await upDetailsBtn.isEnabled()).toBe(true); + const downDetailsBtn = await $("#generate-sp-amont"); + expect(await downDetailsBtn.isEnabled()).toBe(false); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); - await browser.pause(2000); + await browser.pause(300); // check details buttons are enabled - expect(upDetailsBtn.isEnabled()).toBe(true); - expect(downDetailsBtn.isEnabled()).toBe(true); + expect(await upDetailsBtn.isEnabled()).toBe(true); + expect(await downDetailsBtn.isEnabled()).toBe(true); // click upstream hydraulic details button await upDetailsBtn.click(); await browser.pause(500); // a second calculator should be created - let calcs = navBar.getAllCalculatorTabs(); - expect((await calcs).length).toEqual(2); + let calcs = await navBar.getAllCalculatorTabs(); + expect(calcs.length).toEqual(2); // click downstream hydraulic details button await navBar.openNthCalculator(0); @@ -109,7 +116,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await browser.pause(500); // a third calculator should be created - calcs = navBar.getAllCalculatorTabs(); - expect((await calcs).length).toEqual(3); + calcs = await navBar.getAllCalculatorTabs(); + expect(calcs.length).toEqual(3); }); }); diff --git a/e2e/courbe-remous-empty-fields.e2e-spec.ts b/e2e/courbe-remous-empty-fields.e2e-spec.ts index 35dbdf61b..39a08fd4c 100644 --- a/e2e/courbe-remous-empty-fields.e2e-spec.ts +++ b/e2e/courbe-remous-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'backwater curves' calculator when created with 'empty fields' option", () => { let listPage: ListPage; @@ -29,7 +30,7 @@ describe("Check fields are empty in 'backwater curves' calculator when created w await listPage.clickMenuEntryForCalcType(4); await browser.pause(200); - expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], - [true, true, true, true, true, true, true, true, true, true])) + await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], + [true, true, true, true, true, true, true, true, true, true]); }); }); diff --git a/e2e/diagramme-modules.e2e-spec.ts b/e2e/diagramme-modules.e2e-spec.ts index a10251f05..4d523a2bb 100644 --- a/e2e/diagramme-modules.e2e-spec.ts +++ b/e2e/diagramme-modules.e2e-spec.ts @@ -2,6 +2,7 @@ import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * convert Mermaid formatted id ("flowchat-id-xx") to id @@ -48,8 +49,8 @@ describe("modules diagram", () => { await browser.pause(200); // click first module - const nodes = $$("g.node.default"); - const node0 = nodes.get(0); + const nodes = await $$("g.node.default"); + const node0 = nodes[0]; const n0id = removeMermaidIdFormat(await node0.getAttribute("id")); await node0.click(); await browser.pause(200); diff --git a/e2e/documentation.e2e-spec.ts b/e2e/documentation.e2e-spec.ts index b1e8d50cc..39ae0c60f 100644 --- a/e2e/documentation.e2e-spec.ts +++ b/e2e/documentation.e2e-spec.ts @@ -2,17 +2,18 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("documentation − ", () => { let listPage: ListPage; let calcPage: CalculatorPage; let prefPage: PreferencesPage; - let navbar: Navbar; + let navBar: Navbar; beforeAll(() => { calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); - navbar = new Navbar(); + navBar = new Navbar(); listPage = new ListPage(); // browser.manage().window().setPosition(2000, 30); @@ -26,7 +27,7 @@ describe("documentation − ", () => { await browser.pause(200); // start page - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await browser.pause(200); // open "fish ladder: fall" calculator @@ -37,36 +38,28 @@ describe("documentation − ", () => { await calcPage.getCalculatorHelpButton().click(); await browser.pause(200); - browser.getWindowHandles().then(async (handles) => { - const old = browser.ignoreSynchronization + const handles = await browser.getWindowHandles(); - // switch to help tab - browser.switchToWindow(handles[1]).then(async () => { - await browser.pause(200); - // check Mathjax element is present - expect(await $("mjx-container").isExisting()).toBe(true); - }).then(async () => { - // close help tab - // await browser.close(); - // await browser.sleep(200); - // switch back to calculator (required to avoid failure of next language test) - await browser.switchToWindow(handles[0]); - await browser.pause(200); - // browser.ignoreSynchronization = false; - }).then(async () => { - // switch back to calculator (required to avoid failure of next language test) - await browser.switchToWindow(handles[0]); - await browser.pause(200); - }); - }); - } + // switch to help tab + await browser.switchToWindow(handles[1]) + await browser.pause(200); + // check Mathjax element is present + const cont = await $("mjx-container"); + expect(await cont.isExisting()).toBe(true); + + // close help tab + await browser.execute("window.close()"); + + // switch back to calculator (required to avoid failure of next language test) + await browser.switchToWindow(handles[0]); + await browser.pause(200); + }; - xit("check Mathjax formula are displayed in calculator French help", async () => { - debugger + it("check Mathjax formula are displayed in calculator French help", async () => { await checkMathjaxInHelp(1); // fr }); - xit("check Mathjax formula are displayed in calculator English help", async () => { + it("check Mathjax formula are displayed in calculator English help", async () => { await checkMathjaxInHelp(0); // en }); }); diff --git a/e2e/duplicate-results.e2e-spec.ts b/e2e/duplicate-results.e2e-spec.ts index aed31aaec..ae36dcc54 100644 --- a/e2e/duplicate-results.e2e-spec.ts +++ b/e2e/duplicate-results.e2e-spec.ts @@ -2,6 +2,7 @@ import { PreferencesPage } from "./preferences.po" import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("ngHyd − check that results are not duplicated", () => { let prefPage: PreferencesPage; @@ -31,12 +32,13 @@ describe("ngHyd − check that results are not duplicated", () => { await browser.pause(200); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); // check result count - const fixRows = calcPage.getAllFixedResultsRows(); - const nbRows = await fixRows.length; + const fixRows = await calcPage.getAllFixedResultsRows(); + const nbRows = fixRows.length; console.log(nbRows); expect(nbRows).toBe(24); // boundaries are included }); diff --git a/e2e/examples-empty-fields.e2e-spec.ts b/e2e/examples-empty-fields.e2e-spec.ts index eb6b8c32a..2c619e644 100644 --- a/e2e/examples-empty-fields.e2e-spec.ts +++ b/e2e/examples-empty-fields.e2e-spec.ts @@ -1,7 +1,9 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" -import { changeSelectValue } from "./util.po"; +import { SideNav } from "./sidenav.po"; +import { changeSelectValue, newSession } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * check that fields are empty on creation @@ -10,11 +12,13 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on let prefPage: PreferencesPage; let navBar: Navbar; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -32,7 +36,7 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on // open 1st example const examples = await $$("#examples-list .load-example"); - await (await examples)[0].click(); + await examples[0].click(); await browser.pause(50); // select wall module @@ -46,13 +50,15 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on }); it("calculated parameter initial value when discharge law is modified", async () => { + await newSession(navBar, sideNav); + // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); // open 1st example const examples = await $$("#examples-list .load-example"); - await (await examples)[0].click(); + await examples[0].click(); await browser.pause(50); // select wall module @@ -60,19 +66,21 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on await browser.pause(50); // modify 1st structure discharge law - const dischargeSelect = calcPage.getSelectById("select_loidebit"); + const dischargeSelect = await calcPage.getSelectById("select_loidebit"); await changeSelectValue(dischargeSelect, 1); await browser.pause(200); // open initial dialog - const initDlgButton = $(".param-computed-more"); + const initDlgButton = await $(".param-computed-more"); await initDlgButton.click(); await browser.pause(200); // check input value is not null - const input = calcPage.getInputById("initval-input"); - const underlyingInput = input.$("#0_h1"); - const txt = await underlyingInput.getAttribute("value"); + // const input = await calcPage.getInputById("initval-input"); + // const underlyingInput = await input.$("#0_h1"); + const underlyingInput = await $("ngparam-input input.form-control[id='0_h1']"); + // const txt = await underlyingInput.getAttribute("value"); + const txt = await underlyingInput.getValue(); expect(txt === "").toEqual(false); }); }); @@ -81,11 +89,13 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea let prefPage: PreferencesPage; let navBar: Navbar; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -97,13 +107,15 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea }); it("when calculation is run on a generated fish ladder calculator", async () => { + await newSession(navBar, sideNav); + // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); // open 1st example const examples = await $$("#examples-list .load-example"); - await (await examples)[0].click(); + await examples[0].click(); await browser.pause(50); // select wall module @@ -111,17 +123,17 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea await browser.pause(50); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); // click "generate PAB" button - const genButton = calcPage.getGeneratePabButton(); + const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); - await browser.pause(200); + await browser.pause(1000); // write "6" in basin count input - const nbBassins = calcPage.getInputById("generatePabNbBassins"); + const nbBassins = await calcPage.getInputById("generatePabNbBassins"); await nbBassins.setValue("6"); await browser.pause(50); @@ -130,7 +142,7 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea await browser.pause(1000); // calculate PAB - const calcButtonPAB = calcPage.getCalculateButton(); + const calcButtonPAB = await calcPage.getCalculateButton(); await calcButtonPAB.click(); await browser.pause(200); diff --git a/e2e/helpers/GremlinHelper.ts b/e2e/helpers/GremlinHelper.ts index 0da3f0619..434ffd860 100644 --- a/e2e/helpers/GremlinHelper.ts +++ b/e2e/helpers/GremlinHelper.ts @@ -18,7 +18,8 @@ function findFpsMessages(log: any[]) { } export function readGremlinsScript(): string { - return readFileSync(__dirname + "/gremlins.min.js", "UTF-8"); + // return readFileSync(__dirname + "/gremlins.min.js", "UTF-8"); + return readFileSync(__dirname + "/gremlins.min.js", "utf-8"); } export function unleashGremlins(callback: (args?: any) => void) { @@ -82,14 +83,14 @@ export function unleashGremlins(callback: (args?: any) => void) { // 2. <mat-icon> d'aide ? if ( element.tagName === "MAT-ICON" - && [ "help-calc", "help-fieldset", "help-fieldset-container", "help-input", "help-select" ].includes(element.id) + && ["help-calc", "help-fieldset", "help-fieldset-container", "help-input", "help-select"].includes(element.id) ) { return false; } else { // 3. file input ? let isFileInput = false; let curElem = element; - while (! isFileInput && curElem) { + while (!isFileInput && curElem) { isFileInput = ( curElem.tagName === "MAT-FORM-FIELD" && curElem.classList.contains("file-input-field") @@ -141,7 +142,7 @@ export function unleashGremlins(callback: (args?: any) => void) { // tslint:disable-next-line:quotemark 'input[type="text"]': function fillTextElement(element: HTMLInputElement) { // only send numbers in form fields - const num = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ][ Math.floor(Math.random() * 10) ]; + const num = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"][Math.floor(Math.random() * 10)]; element.value += num; element.dispatchEvent(new Event("input")); // so that the model is updated @TODO check that it works // @TODO wait before returning, needs async/await @@ -158,13 +159,13 @@ export function unleashGremlins(callback: (args?: any) => void) { ) .gremlin(Gremlins.species.toucher()) // OK // custom gremlin : click side menu, then an entry of the menu - .gremlin(function() { + .gremlin(function () { clickElementCenter("#open-menu"); const menuLinks = document.querySelectorAll("mat-sidenav .links-container > a"); const idx = Math.floor(Math.random() * menuLinks.length); const link = menuLinks.item(idx); // exclude links that would make us leave the app - if (! [ "side-nav-help", "side-nav-bug-report" ].includes(link.id)) { + if (!["side-nav-help", "side-nav-bug-report"].includes(link.id)) { doClickElementCenter(link); logs.log.push([ "gremlin", @@ -176,11 +177,11 @@ export function unleashGremlins(callback: (args?: any) => void) { } }) // custom gremlin : click new module button - .gremlin(function() { + .gremlin(function () { clickElementCenter("#new-calculator"); }) // custom gremlin : click calculate button - .gremlin(function() { + .gremlin(function () { clickElementCenter("#trigger-calculate"); }) @@ -193,7 +194,7 @@ export function unleashGremlins(callback: (args?: any) => void) { .strategy(Gremlins.strategies.distribution() .delay(delay) // default: 10 // .nb(100) // default: 100 - .distribution([ 0.62, 0.05, 0.05, 0.1, 0.02, 0.03, 0.03, 0.1 ]) + .distribution([0.62, 0.05, 0.05, 0.1, 0.02, 0.03, 0.03, 0.1]) // .distribution([ 0.72, 0.05, 0.05, 0.02, 0.03, 0.03, 0.1 ]) // same as above, without formFiller // .distribution([ 0.5, 0, 0, 0, 0, 0.5, 0, 0 ]) // only "open menu" and "click" ) @@ -230,7 +231,7 @@ export function unleashGremlins(callback: (args?: any) => void) { function doClickElementCenter(targetElement: Element): boolean { if (targetElement) { const evt = document.createEvent("MouseEvents"); - const [ posX, posY ] = getElementCenter(targetElement); + const [posX, posY] = getElementCenter(targetElement); evt.initMouseEvent("click", true, true, window, 0, 0, 0, posX, posY, false, false, false, false, 0, null); targetElement.dispatchEvent(evt); return true; @@ -242,21 +243,21 @@ export function unleashGremlins(callback: (args?: any) => void) { const rect = element.getBoundingClientRect(); const posX = rect.left + window.scrollX + (rect.width / 2); const posY = rect.top + window.scrollY + (rect.height / 2); - return [ posX, posY ]; + return [posX, posY]; } function getRandomPositionInsideElement(element: Element, modal: boolean = false) { const rect = element.getBoundingClientRect(); let minX = rect.left; - if (! modal) { + if (!modal) { minX += window.scrollX; } let minY = rect.top; - if (! modal) { + if (!modal) { minY += window.scrollY; } const posX = minX + Math.floor(Math.random() * rect.width); const posY = minY + Math.floor(Math.random() * rect.height); - return [ posX, posY ]; + return [posX, posY]; } } diff --git a/e2e/lechapt-calmon.e2e-spec.ts b/e2e/lechapt-calmon.e2e-spec.ts index 7a0f68ddd..3d4eaf9b9 100644 --- a/e2e/lechapt-calmon.e2e-spec.ts +++ b/e2e/lechapt-calmon.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Check that created/cloned structures have empty fields when @@ -43,17 +44,18 @@ describe("Lechapt&Calmon - ", () => { await setup(); // select last material type - const materialSelect = calcPage.getSelectById("select_material"); + const materialSelect = await calcPage.getSelectById("select_material"); await changeSelectValue(materialSelect, 8); await browser.pause(200); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); // store total pressure loss result - const res1 = calcPage.getAllFixedResultsRows().get(4); + const rows = await calcPage.getAllFixedResultsRows(); + const res1 = rows[4]; const pl1 = await res1.$$("td")[1].getText(); // select first material type @@ -65,7 +67,8 @@ describe("Lechapt&Calmon - ", () => { await browser.pause(200); // compare total pressure loss result with first calculaiotn - const res2 = calcPage.getAllFixedResultsRows().get(4); + const rows2 = await calcPage.getAllFixedResultsRows(); + const res2 = rows2[4]; const pl2 = await res2.$$("td")[1].getText(); expect(pl1).not.toEqual(pl2); diff --git a/e2e/link-parallel-devices.e2e-spec.ts b/e2e/link-parallel-devices.e2e-spec.ts index 845ccfdad..b4d62ae25 100644 --- a/e2e/link-parallel-devices.e2e-spec.ts +++ b/e2e/link-parallel-devices.e2e-spec.ts @@ -2,18 +2,23 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; +import { SideNav } from "./sidenav.po"; describe("ngHyd − parallel structures with multiple linked parameters − ", () => { let listPage: ListPage; let calcPage: CalculatorPage; let prefPage: PreferencesPage; let navBar: Navbar; + let sideNav: SideNav; beforeAll(() => { calcPage = new CalculatorPage(); listPage = new ListPage(); prefPage = new PreferencesPage(); navBar = new Navbar(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -26,23 +31,34 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( it("when creating Parallel Structures, devices should be linkable to one another", async () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(8); - await calcPage.getAddStructureButton().click(); + await browser.pause(200); + const addBtn = await calcPage.getAddStructureButton(); + await addBtn.click(); + await browser.pause(200); const nb1 = await calcPage.getAllLinkButtons().length; expect(nb1).toBe(8); // link buttons on children but not on parent }); - + it("when creating Cloisons, devices should be linkable to one another", async () => { - await navBar.clickNewCalculatorButton(); + await newSession(navBar, sideNav); + // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await calcPage.getAddStructureButton().click(); + await browser.pause(200); + const addBtn = await calcPage.getAddStructureButton(); + await addBtn.click(); + await browser.pause(200); const nb2 = await calcPage.getAllLinkButtons().length; expect(nb2).toBe(6); // link buttons on children but not on parent }); - + it("when creating Dever, devices should be linkable to one another", async () => { - await navBar.clickNewCalculatorButton(); + await newSession(navBar, sideNav); + // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(9); - await calcPage.getAddStructureButton().click(); + await browser.pause(200); + const addBtn = await calcPage.getAddStructureButton(); + await addBtn.click(); + await browser.pause(200); const nb3 = await calcPage.getAllLinkButtons().length; expect(nb3).toBe(6); // link buttons on children but not on parent }); diff --git a/e2e/link-to-deleted-module.e2e-spec.ts b/e2e/link-to-deleted-module.e2e-spec.ts index da428de98..fe62a73bc 100644 --- a/e2e/link-to-deleted-module.e2e-spec.ts +++ b/e2e/link-to-deleted-module.e2e-spec.ts @@ -2,18 +2,23 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; +import { SideNav } from "./sidenav.po"; describe("linked parameter - ", () => { let calcPage: CalculatorPage; let prefPage: PreferencesPage; let navBar: Navbar; let listPage: ListPage; + let sideNav: SideNav; beforeAll(() => { calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); navBar = new Navbar(); listPage = new ListPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -30,7 +35,7 @@ describe("linked parameter - ", () => { it("delete linked module", async () => { // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); - await (await examples)[1].click(); + await examples[1].click(); await browser.pause(500); // select "up/downstream elevations of a reach" tab @@ -51,11 +56,13 @@ describe("linked parameter - ", () => { await navBar.middleClickCalculatorTab(0); // check Z2 input is in "fixed" state in remaining calculator - const inpZ2 = calcPage.getInputById("Z2"); + const inpZ2 = await calcPage.getInputById("Z2"); expect(await calcPage.inputIsInFixedMode(inpZ2)).toBe(true); }); it("delete linked module and duplicate remaining one", async () => { + await newSession(navBar, sideNav); + // open "fish ladder: fall" calculator await listPage.clickMenuEntryForCalcType(12); await browser.pause(200); @@ -65,7 +72,7 @@ describe("linked parameter - ", () => { await browser.pause(200); // set DH in link mode - let inpDH = calcPage.getInputById("DH"); + let inpDH = await calcPage.getInputById("DH"); await calcPage.setParamMode(inpDH, "link"); await browser.pause(200); @@ -74,11 +81,12 @@ describe("linked parameter - ", () => { await browser.pause(200); // check DH input is in "fixed" state in remaining calculator (not the aim of this test) - inpDH = calcPage.getInputById("DH"); + inpDH = await calcPage.getInputById("DH"); expect(await calcPage.inputIsInFixedMode(inpDH)).toBe(true); // set DH to calculated mode await calcPage.setParamMode(inpDH, "cal"); + await browser.pause(100); // clone calculator await calcPage.clickCloneCalcButton(); @@ -89,7 +97,7 @@ describe("linked parameter - ", () => { await browser.pause(500); // check DH input is in "calc" mode - inpDH = calcPage.getInputById("DH"); + inpDH = await calcPage.getInputById("DH"); expect(await calcPage.inputIsInCalculatedMode(inpDH)).toBe(true); }); }); diff --git a/e2e/linked-parameter-section-type.e2e-spec.ts b/e2e/linked-parameter-section-type.e2e-spec.ts index e663ff009..d663d2d9e 100644 --- a/e2e/linked-parameter-section-type.e2e-spec.ts +++ b/e2e/linked-parameter-section-type.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { CalculatorPage } from "./calculator.po"; import { changeSelectValue } from "./util.po"; +import { browser } from "@wdio/globals"; describe("linked parameter in calculator with section - ", () => { let listPage: ListPage; @@ -10,7 +11,7 @@ describe("linked parameter in calculator with section - ", () => { let calcPage: CalculatorPage; let prefPage: PreferencesPage; - beforeAll( () => { + beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); @@ -38,11 +39,11 @@ describe("linked parameter in calculator with section - ", () => { await browser.pause(200); // set Q parameter to linked mode - const inputQ = calcPage.getInputById("Q"); + const inputQ = await calcPage.getInputById("Q"); await calcPage.setParamMode(inputQ, "link"); // change section type - await changeSelectValue(calcPage.getSelectById("select_section"), 3); // mode "parabolique" + await changeSelectValue(await calcPage.getSelectById("select_section"), 3); // mode "parabolique" // check Q is still in linked mode expect(await calcPage.inputIsInLinkedMode(inputQ)).toBe(true); diff --git a/e2e/list.e2e-spec.ts b/e2e/list.e2e-spec.ts index c89367c94..955247a97 100644 --- a/e2e/list.e2e-spec.ts +++ b/e2e/list.e2e-spec.ts @@ -1,4 +1,5 @@ import { ListPage } from "./list.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Show calculators list (home page) @@ -12,13 +13,13 @@ describe("ngHyd − list page", () => { it("when list is open, user should see the list of available compute nodes", async () => { await page.navigateTo(); - expect(page.getThemesCardsLength()).toBeGreaterThan(4); - expect(page.getCalculatorsMenuLength()).toBeGreaterThan(8); + expect(await page.getThemesCardsLength()).toBeGreaterThan(4); + expect(await page.getCalculatorsMenuLength()).toBeGreaterThan(8); }); it("when list is open, link to doc should be well-formed (2-letter language code)", async () => { await page.navigateTo(); - const docLink = $("a#header-doc"); + const docLink = await $("a#header-doc"); const href = await docLink.getAttribute("href"); const re = new RegExp("assets/docs/[a-z]{2}/index.html"); expect(re.test(href)).toBe(true); diff --git a/e2e/list.po.ts b/e2e/list.po.ts index bfe96bb14..83e65b63e 100644 --- a/e2e/list.po.ts +++ b/e2e/list.po.ts @@ -23,8 +23,8 @@ export class ListPage { async getAvailableCalcTypes() { const ids = []; - const menuEntries = this.getCalculatorsMenuEntries(); - await menuEntries.each(async (elt, i) => { + const menuEntries = await this.getCalculatorsMenuEntries(); + for (const elt of menuEntries) { const eltid = await elt.getAttribute("id"); const ct = eltid.replace("create-calc-", ""); const nct = Number(ct); @@ -32,20 +32,21 @@ export class ListPage { if (!ids.includes(nct)) { ids.push(nct); } - }); + }; return ids; } async clickRandomCalculatorMenuEntry() { - const menuEntries = this.getCalculatorsMenuEntries(); - const l = await menuEntries.length; + const menuEntries = await this.getCalculatorsMenuEntries(); + const l = menuEntries.length; const r = Math.min((Math.floor(Math.random() * l)), (l - 1)); - return menuEntries[r].click(); + return await menuEntries[r].click(); } async clickMenuEntryForCalcType(type: number) { - const but = $("#create-calc-" + type); - return but.click(); + const but = await $("#create-calc-" + type); + return await but.click(); + // await browser.execute(e => { e.click() }, but); // await but.click() fails with "element not interactable" error } async getCalcMenuTextForCalcType(type: number): Promise<string> { diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index dbeb39faf..02d856f7f 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -2,6 +2,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Load a session containing 5 calculators, having multiple linked parameters @@ -14,7 +15,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { let navbar: Navbar; let sidenav: SideNav; - beforeAll(()=> { + beforeAll(() => { calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); navbar = new Navbar(); @@ -50,7 +51,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { await browser.pause(500); // check target params values - const sp_lb = calcPage.getSelectById("linked_LargeurBerge"); + const sp_lb = await calcPage.getSelectById("linked_LargeurBerge"); const sp_lbv = await calcPage.getSelectValueText(sp_lb); expect(sp_lbv).toContain("Largeur du déversoir (Ouvrages, ouvrage 3)"); @@ -59,11 +60,11 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { await browser.pause(500); // check target params values - const mr_zf1 = calcPage.getSelectById("linked_ZF1"); + const mr_zf1 = await calcPage.getSelectById("linked_ZF1"); const mr_zf1v = await calcPage.getSelectValueText(mr_zf1); expect(mr_zf1v).toContain("Cote de l'eau amont (Ouvrages)"); - const mr_q = calcPage.getSelectById("linked_Q"); + const mr_q = await calcPage.getSelectById("linked_Q"); const mr_qv = await calcPage.getSelectValueText(mr_q); expect(mr_qv).toContain("Débit (Sec. param., section)"); @@ -82,16 +83,18 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { * jalhyd#289/adf6009 * nghyd#551 */ - const inpZ2 = calcPage.getInputById("Z2"); - expect(await inpZ2.getAttribute("value")).toEqual(""); + const inpZ2 = await calcPage.getInputById("Z2"); + // expect(await inpZ2.getAttribute("value")).toEqual(""); + expect(await inpZ2.getValue()).toEqual(""); // const lo_l = calcPage.getSelectById("1_linked_L"); // const lo_lv = await calcPage.getSelectValueText(lo_l); // expect(lo_lv).toContain("Largeur au miroir (Sec. param.)"); - const inpL = calcPage.getInputById("1_L"); - expect(await inpL.getAttribute("value")).toEqual(""); + const inpL = await calcPage.getInputById("1_L"); + // expect(await inpL.getAttribute("value")).toEqual(""); + expect(await inpL.getValue()).toEqual(""); - const lo_w = calcPage.getSelectById("2_linked_W"); + const lo_w = await calcPage.getSelectById("2_linked_W"); const lo_wv = await calcPage.getSelectValueText(lo_w); expect(lo_wv).toContain("Ouverture de vanne (Ouvrages, ouvrage 2)"); @@ -103,7 +106,8 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // const lo_br = calcPage.getSelectById("linked_BR"); // const lo_brv = await calcPage.getSelectValueText(lo_br); // expect(lo_brv).toContain("Largeur au miroir (Sec. param.)"); - const inpBR = calcPage.getInputById("BR"); - expect(await inpBR.getAttribute("value")).toEqual(""); + const inpBR = await calcPage.getInputById("BR"); + // expect(await inpBR.getAttribute("value")).toEqual(""); + expect(await inpBR.getValue()).toEqual(""); }); }); diff --git a/e2e/load-malformed-files.e2e-spec.ts b/e2e/load-malformed-files.e2e-spec.ts index f8ad8dc99..344f4102a 100644 --- a/e2e/load-malformed-files.e2e-spec.ts +++ b/e2e/load-malformed-files.e2e-spec.ts @@ -1,6 +1,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Load 4 malformed session files : @@ -37,7 +38,7 @@ describe("ngHyd − load malformed session files − ", () => { await browser.pause(200); await sidenav.loadSessionFile("./session/session-bad-syntax.json"); - const err = $(".file-problem .mat-list-item-content"); + const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); @@ -49,7 +50,7 @@ describe("ngHyd − load malformed session files − ", () => { await browser.pause(200); await sidenav.loadSessionFile("./session/session-missing-info.json"); - const err = $(".file-problem .mat-list-item-content"); + const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); @@ -61,7 +62,7 @@ describe("ngHyd − load malformed session files − ", () => { await browser.pause(200); await sidenav.loadSessionFile("./session/session-empty-modules-list.json"); - const err = $(".file-problem .mat-list-item-content"); + const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Le fichier ne contient aucun module"); }); @@ -73,7 +74,7 @@ describe("ngHyd − load malformed session files − ", () => { await browser.pause(200); await sidenav.loadSessionFile("./session/session-format-too-old.json", false); - const err = $(".file-problem .mat-list-item-content"); + const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Mauvaise version du format de fichier"); }); }); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 7bce10834..3ddf46ce7 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -5,6 +5,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue, expectNumber } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' const fs = require("fs"); const path = require("path"); @@ -18,9 +19,9 @@ let sidenav: SideNav; let prefPage: PreferencesPage; function findDownloadedFile(filename: string): string { - const downloadDirs = ["Téléchargements", "Downloads", "/tmp"]; + const downloadDirs = ["Téléchargements", "Downloads", "/tmp", "."]; for (const d of downloadDirs) { - const download_prefix = d.charAt(0) === "/" ? d : path.resolve(os.homedir(), d); + const download_prefix = (d.charAt(0) === "/" || (d.length === 1 && d.charAt(0) === ".")) ? d : path.resolve(os.homedir(), d); const fp = path.resolve(download_prefix, filename); if (fs.existsSync(fp)) { return fp; @@ -38,50 +39,18 @@ function deleteDownloadedFile(filename: string) { } async function saveSession(): Promise<string> { - const sessionFile = "session.json"; + const sessionFile = "session-e2e-tests.json"; deleteDownloadedFile(sessionFile); await calcPage.clickSaveCalcButton(); - await browser.pause(500); - - // cf. protractor.conf.fs, exports.config.capabilities.chromeOptions.prefs.download.default_directory - // protractor.conf.fs/exports.config.capabilities.chromeOptions.prefs.download.default_directory DOES NOT WORK ! - - // Le code laissé en commentaire tente de corriger un bug : - // il s'écoule 40 secondes entre le clic sur le bouton menu (en haut à gauche) et l'ouverture du sidenav. - // Ceci ne se produit que lorsqu'on sauve effectivement la session : si on annule la sauvegarde, il n'y a pas de délai. - // https://stackoverflow.com/questions/75235558/delay-after-downloading-a-file-in-protractor-test - - //browser.manage().timeouts().implicitlyWait(100); - //browser.ignoreSynchronization = true; - // await browser.waitForAngularEnabled(false); - - if (true) { - await calcPage.getSaveSessionButton().click(); - } else { - const cancel = $("dialog-save-session button.mat-primary"); - await cancel.click(); - } - await browser.pause(200); - // browser.ignoreSynchronization = false; - // await browser.waitForAngularEnabled(true); - - // browser.executeScript('window.stop();'); - - // const wins = await browser.driver.getAllWindowHandles(); - // await browser.switchTo().window(wins[0]); - - // await browser.switchTo().activeElement(); + await browser.pause(300); - // const bd = element(by.css("body")); - // await browser.actions().mouseMove(bd, { x: 0, y: 0 }).click().perform(); + const inpName = await $("dialog-save-session input.mat-input-element"); + await inpName.setValue(sessionFile); - // await navbar.clickCalculatorTab(0); - // await browser.sleep(200); - - // browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + await calcPage.getSaveSessionButton().click(); + await browser.pause(500); - console.log("saveSession() saved to ", findDownloadedFile(sessionFile)); return findDownloadedFile(sessionFile); } @@ -110,7 +79,7 @@ describe("ngHyd − save and load sessions", () => { beforeEach(() => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 45 * 60 * 1000; // 45 min - browser.manage().window().setPosition(2000, 30); + // browser.manage().window().setPosition(2000, 30); }); it("when loading session-6-calc.test.json file from home page, 6 calculators should be loaded", async () => { @@ -139,14 +108,15 @@ describe("ngHyd − save and load sessions", () => { await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); // Section paramétrée - await browser.pause(500); + await browser.pause(200); - await changeSelectValue(calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" + await changeSelectValue(await calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" - await calcPage.getInputById("Ks").clearValue(); // coefficient de Strickler - await browser.pause(200); - await calcPage.getInputById("Ks").setValue("42"); - await browser.pause(200); + const inpKs = await calcPage.getInputById("Ks"); + // await inpKs.clearValue(); // coefficient de Strickler + // await browser.pause(200); + await inpKs.setValue("42"); + // await browser.pause(200); const filename = await saveSession(); await browser.pause(500); @@ -155,14 +125,17 @@ describe("ngHyd − save and load sessions", () => { expect(fileContent).toContain(`"nodeType":"SectionTrapeze"`); expect(fileContent).toContain(`{"symbol":"Ks","mode":"SINGLE","value":42}`); + + deleteDownloadedFile(filename); }); - xit("select value must be recovered when loading a session file", async () => { + it("select value must be recovered when loading a session file", async () => { // start page await startPage.navigateTo(); await browser.pause(200); const calcTypes = await listPage.getAvailableCalcTypes(); + // const calcTypes = [10]; const excludedCalculators = [ 34, // vérificateur (nécessite d'ouvrir plusieurs calculettes) @@ -194,10 +167,11 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(200); // detect selects - const selects = calcPage.getAllCalculatorSelects(); - const nsel = await selects.length; - for (let s = 0; s < nsel; s++) { // /!\ ElementArrayFinder.each() is ASYNCHRONOUS !! https://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.each - const sel = selects.get(s); + const selects = await calcPage.getAllCalculatorSelects(); + const nsel = selects.length; + for (let s = 0; s < nsel; s++) { + // const sel = selects.get(s); + const sel = selects[s]; const selId = await sel.getAttribute("id"); const options = await calcPage.getMatselectOptionsText(sel); @@ -215,24 +189,23 @@ describe("ngHyd − save and load sessions", () => { // save session const filename = await saveSession(); - await browser.pause(200); + await browser.pause(500); // load session await loadSession(filename); // bug here : the click on the menu button (top left) takes 40s to take effect and open the side nav!) - await browser.pause(200); + await browser.pause(500); // the displayed calculator is now the loaded one // check the calculator has been loaded expectNumber(`calc ${ct} select ${selId} : num calcs`, await navbar.getCalculatorEntriesCount(), 2); // check the select in the loaded session points to the same option - const sel2 = calcPage.getSelectById(selId); + const sel2 = await calcPage.getSelectById(selId); // check the same option is in the select const optTxt2 = await calcPage.getMatselectCurrentOptionText(sel2); - await browser.pause(100); const ind2 = options.indexOf(optTxt2); - expectNumber(`calc ${ct} select ${selId} : opt index`, ind2, nextInd); + expectNumber(`calc ${ct} select ${selId} : opt '${optTxt2}' index`, ind2, nextInd); // close last calculator (the loaded one) await navbar.middleClickCalculatorTab(1); @@ -240,6 +213,8 @@ describe("ngHyd − save and load sessions", () => { // check last calculator has been closed expectNumber(`calc ${ct} select ${selId} : num calcs(2)`, await navbar.getCalculatorEntriesCount(), 1); + + deleteDownloadedFile(filename); } } } diff --git a/e2e/monkey-test/monkey.e2e-spec.ts b/e2e/monkey-test/monkey.e2e-spec.ts index 7166aca40..27313fdf4 100644 --- a/e2e/monkey-test/monkey.e2e-spec.ts +++ b/e2e/monkey-test/monkey.e2e-spec.ts @@ -1,51 +1,50 @@ -import { browser } from "protractor"; - -import { readGremlinsScript, getFpsResults, unleashGremlins } from "../helpers/GremlinHelper"; - -import { PreferencesPage } from "../preferences.po"; -import { Navbar } from "../navbar.po"; - -let prefPage: PreferencesPage; -let navBar: Navbar; - -describe("Monkey test with Gremlins.js −", async () => { - - beforeEach(() => { - prefPage = new PreferencesPage(); - navBar = new Navbar(); - }); - - // keep greater than setTimeout() in GremlinHelper.ts (twice as much sounds good) - const specificLongTimeout = 120 * 1000; - - it("bennes-y tout là -bas d'dans !", async () => { - // disable evil option "empty fields on module creation" - await prefPage.navigateTo(); - await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); - // go to list page - await navBar.clickNewCalculatorButton(); - - // unleash the gremlins ! - await browser.executeScript((readGremlinsScript())); - const logs: any = await browser.executeAsyncScript(unleashGremlins); - - /* console.log("----------- ERRORS -----------"); - console.log(logs.error); - console.log("----------- WARNINGS -----------"); - console.log(logs.warn); - console.log("----------- INFO -----------"); - console.log(logs.info); - console.log("----------- FPS -----------"); - console.log(getFpsResults(logs)); - console.log("----------- ACTIONS -----------"); - console.log(logs.log); - - browser.manage().logs().get("browser").then(function(browserLog) { - console.log("log: " + require("util").inspect(browserLog)); - }); */ - - expect(logs.error.length).toBe(0, logs.error); - - }, specificLongTimeout); -}); +// import { readGremlinsScript, getFpsResults, unleashGremlins } from "../helpers/GremlinHelper"; + +// import { PreferencesPage } from "../preferences.po"; +// import { Navbar } from "../navbar.po"; +// import { browser, $, $$, expect } from '@wdio/globals' + +// let prefPage: PreferencesPage; +// let navBar: Navbar; + +// describe("Monkey test with Gremlins.js −", async () => { + +// beforeEach(() => { +// prefPage = new PreferencesPage(); +// navBar = new Navbar(); +// }); + +// // keep greater than setTimeout() in GremlinHelper.ts (twice as much sounds good) +// const specificLongTimeout = 120 * 1000; + +// it("bennes-y tout là -bas d'dans !", async () => { +// // disable evil option "empty fields on module creation" +// await prefPage.navigateTo(); +// await prefPage.disableEvilEmptyFields(); +// await browser.pause(200); +// // go to list page +// await navBar.clickNewCalculatorButton(); + +// // unleash the gremlins ! +// await browser.executeScript(readGremlinsScript()); +// const logs: any = await browser.executeAsyncScript(unleashGremlins); + +// /* console.log("----------- ERRORS -----------"); +// console.log(logs.error); +// console.log("----------- WARNINGS -----------"); +// console.log(logs.warn); +// console.log("----------- INFO -----------"); +// console.log(logs.info); +// console.log("----------- FPS -----------"); +// console.log(getFpsResults(logs)); +// console.log("----------- ACTIONS -----------"); +// console.log(logs.log); + +// browser.manage().logs().get("browser").then(function(browserLog) { +// console.log("log: " + require("util").inspect(browserLog)); +// }); */ + +// expect(logs.error.length).toBe(0, logs.error); + +// }, specificLongTimeout); +// }); diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index aa2c8630d..3e9d2ceea 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -1,4 +1,6 @@ import { browser, $, $$, expect } from '@wdio/globals' +import { Key } from 'webdriverio' +import { scrollToElement } from './util.po'; export class Navbar { getAllCalculatorTabs() { @@ -11,14 +13,18 @@ export class Navbar { */ async getCalculatorEntriesCount() { // if dropDown calculators select is visible - const dropDown = $("mat-select#selectCalculator"); + const dropDown = await $("mat-select#selectCalculator"); if ((await dropDown.isExisting()) && (await dropDown.isDisplayed())) { await dropDown.click(); - const options = $$(".cdk-overlay-container mat-option"); + browser.pause(100); + const options = await $$(".cdk-overlay-container mat-option"); // FIXME>>>>await dropDown.sendKeys(protractor.Key.ESCAPE); // close dropdown - return await options.length; + //await dropDown.keys('Escape'); // close dropdown + await browser.keys(Key.Escape); // close dropdown + return options.length; } else { - return (await $$("#tabs-container button.calculator-button")).length; + // return (await $$("#tabs-container button.calculator-button")).length; + return (await this.getAllCalculatorTabs()).length; } } @@ -33,13 +39,13 @@ export class Navbar { await dropDown.click(); // 1st option is not necessarly "mat-option-0"... - const options = $$(".cdk-overlay-container mat-option"); - const option = options.get(n); + const options = await $$(".cdk-overlay-container mat-option"); + const option = options[n]; await option.click(); } else { - const tabs = this.getAllCalculatorTabs(); - await (await tabs.n).click(); + const tabs = await this.getAllCalculatorTabs(); + await tabs[n].click(); } } @@ -56,8 +62,11 @@ export class Navbar { } async clickCalculatorTab(n: number) { - const tabs = this.getAllCalculatorTabs(); - await (await tabs.n).click(); + const tabs = await this.getAllCalculatorTabs(); + // await (await tabs.n).click(); + + // await tabs[n].click(); + await browser.execute(e => { e.click() }, tabs[n]); // await tabs[n].click() fails with "element not interactable" error } async clickCalculatorTabForUid(uid: string) { @@ -66,10 +75,12 @@ export class Navbar { } async clickRandomCalculatorTab(n: number) { - const tabs = this.getAllCalculatorTabs(); - const l = await tabs.length; + const tabs = await this.getAllCalculatorTabs(); + const l = tabs.length; const r = Math.min((Math.floor(Math.random() * l)), (l - 1)); - await (await tabs.r).click(); + + //await tabs[r].click(); + await browser.execute(e => { e.click() }, tabs[r]); // await tabs[r].click() fails with "element not interactable" error } /** @@ -77,11 +88,12 @@ export class Navbar { * @param confirmCloseDialog true to confirm opening dialog and indeed close calculator */ async middleClickCalculatorTab(n: number, confirmCloseDialog: boolean = true) { - const calcTabs = this.getAllCalculatorTabs(); + const calcTabs = await this.getAllCalculatorTabs(); // FIXME>>>> await browser.actions().click(calcTabs.get(n), Button.MIDDLE).perform(); + await calcTabs[n].click({ button: 'middle' }); if (confirmCloseDialog) { - const btns = $$("dialog-confirm-close-calc .mat-dialog-actions button"); - await (await btns)[1].click(); + const btns = await $$("dialog-confirm-close-calc .mat-dialog-actions button"); + await btns[1].click(); } } @@ -91,7 +103,7 @@ export class Navbar { } async clickMenuButton() { - const ncb = this.getMenuButton(); + const ncb = await this.getMenuButton(); await ncb.click(); } } diff --git a/e2e/navigate-through-calculators.e2e-spec.ts b/e2e/navigate-through-calculators.e2e-spec.ts index e7631f47f..85f0d0c53 100644 --- a/e2e/navigate-through-calculators.e2e-spec.ts +++ b/e2e/navigate-through-calculators.e2e-spec.ts @@ -1,6 +1,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Use navbar buttons to navigate from one open calculator to another @@ -25,16 +26,19 @@ describe("ngHyd − create calculators and navigate among them", () => { await browser.pause(200); } await listPage.clickRandomCalculatorMenuEntry(); + await browser.pause(200); } // navigate among them for (let i = 0; i < 10; i++) { await navbar.clickRandomCalculatorTab(i); + await browser.pause(200); // test all form labels - const labels = calculatorPage.getInputLabels(); - await labels.each(async (l) => { + const labels = await calculatorPage.getInputLabels(); + //await labels.each(async (l) => { + for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); - }); + }; } // expect no error ? }); diff --git a/e2e/notes.e2e-spec.ts b/e2e/notes.e2e-spec.ts index 40bf8caa1..9704016ec 100644 --- a/e2e/notes.e2e-spec.ts +++ b/e2e/notes.e2e-spec.ts @@ -2,6 +2,7 @@ import { AppPage } from "./app.po"; import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { SideNav } from "./sidenav.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("check calculator notes", () => { let startPage: AppPage; @@ -31,7 +32,7 @@ describe("check calculator notes", () => { await browser.pause(200); // input some text - const ta = $("textarea"); + const ta = await $("textarea"); await ta.clearValue(); await ta.setValue("azerty123"); await browser.pause(200); @@ -47,7 +48,7 @@ describe("check calculator notes", () => { await browser.pause(200); // check text - const md = $("markdown p"); + const md = await $("markdown p"); await browser.pause(200); expect(await md.getText()).toEqual("azerty123"); }); @@ -67,7 +68,7 @@ describe("check calculator notes", () => { await browser.pause(200); // input some text - const ta = $("textarea"); + const ta = await $("textarea"); await ta.clearValue(); await ta.setValue("azerty123"); await browser.pause(200); @@ -79,12 +80,12 @@ describe("check calculator notes", () => { await browser.pause(200); // open notes - const notesLink = $("#show-notes a"); + const notesLink = await $("#show-notes a"); notesLink.click(); await browser.pause(200); // check text - const md = $("markdown p"); + const md = await $("markdown p"); await browser.pause(200); expect(await md.getText()).toEqual("azerty123"); }); diff --git a/e2e/ouvrages-empty-fields.e2e-spec.ts b/e2e/ouvrages-empty-fields.e2e-spec.ts index 2b7e3620b..24078502a 100644 --- a/e2e/ouvrages-empty-fields.e2e-spec.ts +++ b/e2e/ouvrages-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Check that created/cloned structures have empty fields when @@ -49,7 +50,7 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await calcPage.checkEmptyOrFilledFields(inputIds, emptys); // change 1st structure type to rectangular weir - const structSelect = calcPage.getSelectById("select_structure"); + const structSelect = await calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); await browser.pause(200); @@ -63,8 +64,9 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // add structure - const addStruct = calcPage.getAddStructureButton(); + const addStruct = await calcPage.getAddStructureButton(); await addStruct.click(); + await browser.pause(200); // check 2nd structure empty fields const inputIds = ["1_ZDV", "1_L", "1_W", "1_CdGR"]; @@ -76,8 +78,9 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // copy structure - const addStruct = calcPage.getCopyStructureButton(); + const addStruct = await calcPage.getCopyStructureButton(); await addStruct.click(); + await browser.pause(200); // check 2nd structure empty fields const inputIds = ["1_ZDV", "1_L", "1_W", "1_CdGR"]; @@ -89,12 +92,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // change 1st structure type to rectangular weir - const structSelect = calcPage.getSelectById("select_structure"); + const structSelect = await calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); await browser.pause(200); // copy structure - const addStruct = calcPage.getCopyStructureButton(); + const addStruct = await calcPage.getCopyStructureButton(); await addStruct.click(); await browser.pause(200); @@ -114,12 +117,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // fill - const inp = calcPage.getInputById("0_ZDV"); + const inp = await calcPage.getInputById("0_ZDV"); await inp.clearValue(); await inp.setValue("1"); // copy structure - const addStruct = calcPage.getCopyStructureButton(); + const addStruct = await calcPage.getCopyStructureButton(); await addStruct.click(); await browser.pause(200); @@ -133,12 +136,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // change 1st structure type to rectangular weir - const structSelect = calcPage.getSelectById("select_structure"); + const structSelect = await calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); await browser.pause(200); // change discharge law to Larinier - const dischargeSelect = calcPage.getSelectById("select_loidebit"); + const dischargeSelect = await calcPage.getSelectById("select_loidebit"); await changeSelectValue(dischargeSelect, 3); await browser.pause(200); @@ -152,12 +155,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // fill - const inp = calcPage.getInputById("0_ZDV"); + const inp = await calcPage.getInputById("0_ZDV"); await inp.clearValue(); await inp.setValue("1"); // copy structure - const addStruct = calcPage.getAddStructureButton(); + const addStruct = await calcPage.getAddStructureButton(); await addStruct.click(); await browser.pause(200); diff --git a/e2e/pab-cloisons-empty-fields.e2e-spec.ts b/e2e/pab-cloisons-empty-fields.e2e-spec.ts index 1885d8fe6..8f1d76c55 100644 --- a/e2e/pab-cloisons-empty-fields.e2e-spec.ts +++ b/e2e/pab-cloisons-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { PreferencesPage } from "./preferences.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * enable evil option "empty fields on module creation" @@ -65,7 +66,7 @@ describe("ngHyd - check the cross walls calculator has empty fields - ", () => { // click "generate PAB" button const genButton = calcPage.getGeneratePabButton(); await genButton.click(); - await browser.pause(200); + await browser.pause(1000); await calcPage.checkEmptyOrFilledFields(["generatePabNbBassins"], [true]); }); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 2bf3c72b2..21b75dac9 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -4,7 +4,8 @@ import { Navbar } from "./navbar.po"; import { AppPage } from "./app.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, scrollPageToTop } from "./util.po"; +import { changeSelectValue, newSession, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Clone calculators @@ -13,16 +14,16 @@ describe("ngHyd − Passe à Bassins", () => { let startPage: AppPage; let listPage: ListPage; let calcPage: CalculatorPage; - let navbar: Navbar; - let sidenav: SideNav; + let navBar: Navbar; + let sideNav: SideNav; let prefPage: PreferencesPage; beforeAll(() => { startPage = new AppPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); - navbar = new Navbar(); - sidenav = new SideNav(); + navBar = new Navbar(); + sideNav = new SideNav(); prefPage = new PreferencesPage(); }); @@ -36,15 +37,17 @@ describe("ngHyd − Passe à Bassins", () => { it("when PAB is created from scratch", async () => { // create PAB - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(15); // check that pab-table is present - const innerFieldsets = $$(".pab-data-table"); + const innerFieldsets = await $$(".pab-data-table"); expect(await innerFieldsets.length).toBe(1); // calculate PAB - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -55,82 +58,84 @@ describe("ngHyd − Passe à Bassins", () => { it("complete example of all PAB modules", async () => { // PAB - chute - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); - const c_Z1 = calcPage.getInputById("Z1"); - await c_Z1.clearValue(); + const c_Z1 = await calcPage.getInputById("Z1"); + // await c_Z1.clearValue(); await c_Z1.setValue("78.27"); - const c_Z2 = calcPage.getInputById("Z1"); - await c_Z2.clearValue(); + const c_Z2 = await calcPage.getInputById("Z1"); + // await c_Z2.clearValue(); await c_Z2.setValue("74.86"); // PAB - nombre - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(13); - const n_DHT = calcPage.getInputById("DHT"); + const n_DHT = await calcPage.getInputById("DHT"); await calcPage.setParamMode(n_DHT, "link"); - const n_DH = calcPage.getInputById("DH"); + const n_DH = await calcPage.getInputById("DH"); await calcPage.setParamMode(n_DH, "cal"); - const n_N = calcPage.getInputById("N"); + const n_N = await calcPage.getInputById("N"); await n_N.clearValue(); await n_N.setValue("15"); // PAB - dimensions - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); - const d_V = calcPage.getInputById("V"); + const d_V = await calcPage.getInputById("V"); await calcPage.setParamMode(d_V, "cal"); - const d_Y = calcPage.getInputById("Y"); - await d_Y.clearValue(); + const d_Y = await calcPage.getInputById("Y"); + // await d_Y.clearValue(); await d_Y.setValue("1.5"); - const d_L = calcPage.getInputById("L"); - await d_L.clearValue(); + const d_L = await calcPage.getInputById("L"); + // await d_L.clearValue(); await d_L.setValue("3.100"); - const d_W = calcPage.getInputById("W"); - await d_W.clearValue(); + const d_W = await calcPage.getInputById("W"); + // await d_W.clearValue(); await d_W.setValue("2.5"); // PAB - puissance dissipée (volume) - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(6); - const p_DH = calcPage.getInputById("DH"); + const p_DH = await calcPage.getInputById("DH"); await calcPage.setParamMode(p_DH, "link"); - const p_Q = calcPage.getInputById("Q"); + const p_Q = await calcPage.getInputById("Q"); await calcPage.setParamMode(p_Q, "cal"); - const p_V = calcPage.getInputById("V"); + const p_V = await calcPage.getInputById("V"); await calcPage.setParamMode(p_V, "link"); - const p_PV = calcPage.getInputById("PV"); + const p_PV = await calcPage.getInputById("PV"); await p_PV.clearValue(); await p_PV.setValue("150"); // PAB - cloisons - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - const cl_LB = calcPage.getInputById("LB"); + const cl_LB = await calcPage.getInputById("LB"); await calcPage.setParamMode(cl_LB, "link"); - const cl_BB = calcPage.getInputById("BB"); + const cl_BB = await calcPage.getInputById("BB"); await calcPage.setParamMode(cl_BB, "link"); - const cl_DH = calcPage.getInputById("DH"); + const cl_DH = await calcPage.getInputById("DH"); await calcPage.setParamMode(cl_DH, "link"); - const cl_Z1 = calcPage.getInputById("Z1"); + const cl_Z1 = await calcPage.getInputById("Z1"); await calcPage.setParamMode(cl_Z1, "link"); - const cl_PB = calcPage.getInputById("PB"); - await cl_PB.clearValue(); + const cl_PB = await calcPage.getInputById("PB"); + // await cl_PB.clearValue(); await cl_PB.setValue("1.5"); // calculate Cloisons - const calcButtonCl = calcPage.getCalculateButton(); + const calcButtonCl = await calcPage.getCalculateButton(); await calcButtonCl.click(); + await browser.pause(200); // make sure "Generate PAB" button is visible (it might be hidden behind navbar) await scrollPageToTop(); // generate PAB - const genButton = calcPage.getGeneratePabButton(); + const genButton = await calcPage.getGeneratePabButton(); await genButton.isExisting(); await genButton.isDisplayed(); await genButton.click(); - const nbBassins = calcPage.getInputById("generatePabNbBassins"); - await nbBassins.clearValue(); + await browser.pause(1000); + const nbBassins = await calcPage.getInputById("generatePabNbBassins"); + // await nbBassins.clearValue(); await nbBassins.setValue("9"); // click "Generate" @@ -138,8 +143,10 @@ describe("ngHyd − Passe à Bassins", () => { await browser.pause(1000); // calculate PAB - const calcButtonPAB = calcPage.getCalculateButton(); + const calcButtonPAB = await calcPage.getCalculateButton(); await calcButtonPAB.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -157,71 +164,78 @@ describe("ngHyd − Passe à Bassins", () => { }); it("from a Cloisons among many", async () => { + await newSession(navBar, sideNav); + // create many Cloisons - await navbar.clickNewCalculatorButton(); + // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); // choose one of them and change its parameters - await navbar.clickCalculatorTab(1); - const Z1 = calcPage.getInputById("Z1"); - await Z1.clearValue(); + await navBar.clickCalculatorTab(1); + const Z1 = await calcPage.getInputById("Z1"); + // await Z1.clearValue(); await Z1.setValue("114"); - const LB = calcPage.getInputById("LB"); - await LB.clearValue(); + const LB = await calcPage.getInputById("LB"); + // await LB.clearValue(); await LB.setValue("11.5"); - const DH = calcPage.getInputById("DH"); - await DH.clearValue(); + const DH = await calcPage.getInputById("DH"); + // await DH.clearValue(); await DH.setValue("0.72"); // calculate Cloisons - const calcButtonCl = calcPage.getCalculateButton(); + const calcButtonCl = await calcPage.getCalculateButton(); await calcButtonCl.click(); + await browser.pause(200); // make sure "Generate PAB" button is visible (it might be hidden behind navbar) await scrollPageToTop(); // create PAB from it, changing modal parameters - const genButton = calcPage.getGeneratePabButton(); + const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); - const debit = calcPage.getInputById("generatePabDebit"); - expect(await debit.getAttribute("value")).toBe("0.564"); - await debit.clearValue(); - await browser.pause(300); + await browser.pause(1000); + const debit = await calcPage.getInputById("generatePabDebit"); + expect(await debit.getValue()).toBe("0.564"); + // await debit.clearValue(); + // await browser.pause(300); // send "1.6" in 3 movements, because "." triggers an error and Angular can't cope with the subsequent keys await debit.setValue("1"); - await browser.pause(300); - await debit.setValue("."); - await browser.pause(300); - await debit.setValue("6"); - await browser.pause(300); - const coteAmont = calcPage.getInputById("generatePabCoteAmont"); - expect(await coteAmont.getAttribute("value")).toBe("114"); - await coteAmont.clearValue(); + // await browser.pause(50); + await debit.addValue("."); + // await browser.pause(50); + await debit.addValue("6"); + // await browser.pause(50); + const coteAmont = await calcPage.getInputById("generatePabCoteAmont"); + expect(await coteAmont.getValue()).toBe("114"); + // await coteAmont.clearValue(); await coteAmont.setValue("115"); - const nbBassins = calcPage.getInputById("generatePabNbBassins"); - expect(await nbBassins.getAttribute("value")).toBe("6"); - await nbBassins.clearValue(); + const nbBassins = await calcPage.getInputById("generatePabNbBassins"); + expect(await nbBassins.getValue()).toBe("6"); + // await nbBassins.clearValue(); await nbBassins.setValue("5"); // click "Generate" - await $("dialog-generate-pab button#do-generate").click(); + const btnGenerate = await $("dialog-generate-pab button#do-generate"); + await btnGenerate.click(); await browser.pause(1000); // check parameters values - const P_Q = calcPage.getInputById("Q"); - expect(await P_Q.getAttribute("value")).toBe("1.6"); - const P_Z2 = calcPage.getInputById("Z2"); - expect(await P_Z2.getAttribute("value")).toBe("111.4"); + const P_Q = await calcPage.getInputById("Q"); + expect(await P_Q.getValue()).toBe("1.6"); + const P_Z2 = await calcPage.getInputById("Z2"); + expect(await P_Z2.getValue()).toBe("111.4"); // check number of basins - const innerFieldsets = $$("td.basin_number"); - expect(await innerFieldsets.length).toBe(5); + const innerFieldsets = await $$("td.basin_number"); + expect(innerFieldsets.length).toBe(5); // calculate PAB - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -232,29 +246,31 @@ describe("ngHyd − Passe à Bassins", () => { it("complete example of all PAB modules", async () => { await startPage.navigateTo(); // load - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickLoadSessionButton(); + await sideNav.clickLoadSessionButton(); await browser.pause(200); - await sidenav.loadSessionFile("./session/session-pab-complete.json"); + await sideNav.loadSessionFile("./session/session-pab-complete.json"); await browser.pause(500); // check existence of the loaded modules - expect(await navbar.getAllCalculatorTabs().length).toBe(6); + expect(await navBar.getAllCalculatorTabs().length).toBe(6); // check parameters values - await navbar.clickCalculatorTab(5); + await navBar.clickCalculatorTab(5); await browser.pause(700); - const P_Q = calcPage.getInputById("Q"); - expect(await P_Q.getAttribute("value")).toBe("0.275"); - const P_Z2 = calcPage.getInputById("Z2"); - expect(await P_Z2.getAttribute("value")).toBe("74.865"); + const P_Q = await calcPage.getInputById("Q"); + expect(await P_Q.getValue()).toBe("0.275"); + const P_Z2 = await calcPage.getInputById("Z2"); + expect(await P_Z2.getValue()).toBe("74.865"); // check number of basins - const innerFieldsets = $$("td.basin_number"); + const innerFieldsets = await $$("td.basin_number"); expect(await innerFieldsets.length).toBe(15); // calculate PAB - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -268,19 +284,21 @@ describe("ngHyd − Passe à Bassins", () => { it("should display logs", async () => { await startPage.navigateTo(); // load - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickLoadSessionButton(); + await sideNav.clickLoadSessionButton(); await browser.pause(200); - await sidenav.loadSessionFile("./session/session-pab-regulee-variee.json"); + await sideNav.loadSessionFile("./session/session-pab-regulee-variee.json"); await browser.pause(500); // check existence of the loaded module - expect(await navbar.getAllCalculatorTabs().length).toBe(1); - await navbar.clickCalculatorTab(0); + expect(await navBar.getAllCalculatorTabs().length).toBe(1); + await navBar.clickCalculatorTab(0); // calculate - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -290,7 +308,7 @@ describe("ngHyd − Passe à Bassins", () => { expect(await calcPage.nbLogEntries()).toBe(2); // change iteration - const pve = calcPage.getSelectById("pab-variating-element"); + const pve = await calcPage.getSelectById("pab-variating-element"); await changeSelectValue(pve, 3); await browser.pause(300); // check absence of logs diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index 4d257594b..f1dff3784 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check calculated parameter remains the same when copying a structure", () => { let listPage: ListPage; @@ -26,29 +27,37 @@ describe("Check calculated parameter remains the same when copying a structure", it("", async () => { // open "fish ladder: cross walls" calculator await navBar.clickNewCalculatorButton(); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(10); await browser.pause(200); // check L in first structure calc toggle is not checked - const L1 = calcPage.getInputById("0_L"); + const L1 = await calcPage.getInputById("0_L"); // const h11 = calcPage.getInputById("0_h1"); // set L to calculated in first structure await calcPage.setParamMode(L1, "cal"); + await browser.pause(500); // check L calc toggle is checked expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); // copy 1st structure - const copyStruct = calcPage.getCopyStructureButton(); - await copyStruct.click(); + const copyStruct = await calcPage.getCopyStructureButton(); + + // await copyStruct.click(); + await browser.execute(e => { e.click() }, copyStruct); // await copyStruct.click() fails with "element not interactable" error + await browser.pause(200); + + await calcPage.closeSnackBar(); + await browser.pause(200); // check L in first structure is still in "calc" state expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); // // check L in second structure is still in "fix" state - const L2 = calcPage.getInputById("1_L"); + const L2 = await calcPage.getInputById("1_L"); expect(await calcPage.inputIsInFixedMode(L2)).toBe(true); }); }); diff --git a/e2e/predam-empty-fields.e2e-spec.ts b/e2e/predam-empty-fields.e2e-spec.ts index 8c4182b1a..0915297ae 100644 --- a/e2e/predam-empty-fields.e2e-spec.ts +++ b/e2e/predam-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" +import { browser, $, $$, expect } from '@wdio/globals' /** * check that fields are empty on creation @@ -40,29 +41,30 @@ describe("ngHyd − check that predam fields are empty", () => { await calcPage.checkEmptyInput("Z2"); // check basin 1 inputs - let node = $("g.node.basin"); + let node = await $("g.node.basin"); await node.click(); await browser.pause(200); await calcPage.checkEmptyInput("0_S"); await calcPage.checkEmptyInput("0_ZF"); // check walls inputs - const walls = $$("g.node.wall"); + const walls = await $$("g.node.wall"); expect(walls.length).toEqual(2); - await walls.each(async (w) => { + // await walls.each(async (w) => { + for (const w of walls) { await w.click(); await browser.pause(200); await calcPage.checkEmptyInput("0_ZDV"); await calcPage.checkEmptyInput("0_L"); - }); + }; // check downstream basin inputs - node = $("g[id^='flowchart-aval-']"); // Mermaid generated id + node = await $("g[id^='flowchart-aval-']"); // Mermaid generated id await node.click(); await browser.pause(200); - calcPage.checkEmptyInput("Q"); + await calcPage.checkEmptyInput("Q"); // Z1 is calculated - calcPage.checkEmptyInput("Z2"); + await calcPage.checkEmptyInput("Z2"); }); it("when a basin is added", async () => { @@ -72,18 +74,20 @@ describe("ngHyd − check that predam fields are empty", () => { await browser.pause(200); // add basin - const addBasinBtn = $("#add-basin"); + const addBasinBtn = await $("#add-basin"); await addBasinBtn.click(); await browser.pause(200); // check "surface" input is empty - let inp = calcPage.getInputById("3_S"); - let txt = await inp.getAttribute("value"); + let inp = await calcPage.getInputById("3_S"); + // let txt = await inp.getAttribute("value"); + let txt = await inp.getValue(); expect(txt).toEqual(""); // check "cote de fond" input is empty - inp = calcPage.getInputById("3_ZF"); - txt = await inp.getAttribute("value"); + inp = await calcPage.getInputById("3_ZF"); + // txt = await inp.getAttribute("value"); + txt = await inp.getValue(); expect(txt).toEqual(""); }); @@ -94,27 +98,29 @@ describe("ngHyd − check that predam fields are empty", () => { await browser.pause(200); // add wall - const addWallBtn = $("#add-wall"); + const addWallBtn = await $("#add-wall"); await addWallBtn.click(); // connect basins - const connectBasinsBtn = $("#validate-connect-basins"); + const connectBasinsBtn = await $("#validate-connect-basins"); await connectBasinsBtn.click(); // check ZDV input is empty - let inp = calcPage.getInputById("0_ZDV"); - let txt = await inp.getAttribute("value"); + let inp = await calcPage.getInputById("0_ZDV"); + let txt = await inp.getValue(); expect(txt).toEqual(""); // check L input is empty - inp = calcPage.getInputById("0_L"); - txt = await inp.getAttribute("value"); + inp = await calcPage.getInputById("0_L"); + // txt = await inp.getAttribute("value"); + txt = await inp.getValue(); expect(txt).toEqual(""); // check CdWSL input is empty (in this case, the structure happens to be a Larinier weir // which discharge coefficient must be empty) - inp = calcPage.getInputById("0_CdWSL"); - txt = await inp.getAttribute("value"); + inp = await calcPage.getInputById("0_CdWSL"); + // txt = await inp.getAttribute("value"); + txt = await inp.getValue(); expect(txt).toEqual(""); }); }); diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 102fb8194..85b7b5951 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -2,6 +2,7 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" +import { browser, $, $$, expect } from '@wdio/globals' describe("check that low iteration count leads to log messages", () => { let listPage: ListPage; @@ -25,7 +26,7 @@ describe("check that low iteration count leads to log messages", () => { }); it("", async () => { - browser.manage().window().setPosition(2000, 30); + // browser.manage().window().setPosition(2000, 30); // set low iteration count await prefPage.setIterationCount(5); @@ -34,12 +35,13 @@ describe("check that low iteration count leads to log messages", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); await browser.pause(200); - + // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); // check log messages presence - expect(calcPage.hasLog()).toBe(true); + expect(await calcPage.hasLog()).toBe(true); }); }); diff --git a/e2e/preferences.e2e-spec.ts b/e2e/preferences.e2e-spec.ts index 6b00a4d81..0e09c1128 100644 --- a/e2e/preferences.e2e-spec.ts +++ b/e2e/preferences.e2e-spec.ts @@ -1,4 +1,5 @@ import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Open app preferences, check the default values, the validators, the language change @@ -10,52 +11,74 @@ describe("ngHyd − preferences page", () => { page = new PreferencesPage(); }); - it("when preferences are open, user should see a heading title", async () => { + beforeEach(async () => { await page.navigateTo(); + browser.pause(200); + }); + + it("when preferences are open, user should see a heading title", async () => { const text = await page.getHeader1().getText(); expect(text.length).toBeGreaterThan(0); }); it("when preferences are open, no label should be empty", async () => { - const labels = page.getInputLabels(); - await labels.each(async (l) => { + const labels = await page.getInputLabels(); + // await labels.each(async (l) => { + for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); - }); + }; }); it("when preferences are open, no input field should be empty", async () => { - const numericFields = page.getNumericFormFields(); - await numericFields.each(async (nf) => { - const input = page.getInputForField(nf); - const val = await input.getAttribute("value"); + const numericFields = await page.getNumericFormFields(); + // await numericFields.each(async (nf) => { + for (const nf of numericFields) { + const input = await page.getInputForField(nf); + // const val = await input.getAttribute("value"); + const val = await input.getValue(); expect(val).toBeTruthy(); - }); + }; }); it("when erroneous values are input, errors should appear", async () => { - const numericFields = page.getNumericFormFields(); - await numericFields.each(async (nf) => { + const numericFields = await page.getNumericFormFields(); + // await numericFields.each(async (nf) => { + for (const nf of numericFields) { + const inp = await page.getInputForField(nf); // add a letter after the numerical value - await page.getInputForField(nf).setValue("d"); - expect(page.getErrorsForField(nf).isExisting()).toBe(true); + // await page.getInputForField(nf).addValue("d"); + await inp.addValue("d"); + let errorField = await page.getErrorsForField(nf); + expect(await errorField.isExisting()).toBe(true); // empty input - await page.getInputForField(nf).clearValue(); - expect(page.getErrorsForField(nf).isExisting()).toBe(true); + // await page.getInputForField(nf).clearValue(); + await inp.clearValue(); + // expect(page.getErrorsForField(nf).isExisting()).toBe(true); + errorField = await page.getErrorsForField(nf); + expect(await errorField.isExisting()).toBe(true); // send bad value - await page.getInputForField(nf).setValue("50000"); - expect(page.getErrorsForField(nf).isExisting()).toBe(true); - }); + // await page.getInputForField(nf).setValue("50000"); + await inp.setValue("50000"); + // expect(page.getErrorsForField(nf).isExisting()).toBe(true); + errorField = await page.getErrorsForField(nf); + expect(await errorField.isExisting()).toBe(true); + }; }); it("when correct values are input, errors should disappear", async () => { - const numericFields = page.getNumericFormFields(); - await numericFields.each(async (nf) => { + const numericFields = await page.getNumericFormFields(); + // await numericFields.each(async (nf) => { + for (const nf of numericFields) { // send correct value - await page.getInputForField(nf).clearValue(); - await page.getInputForField(nf).setValue("1"); - expect(page.getErrorsForField(nf).isExisting()).toBe(false); - }); + const inp = await page.getInputForField(nf); + // await page.getInputForField(nf).clearValue(); + // await page.getInputForField(nf).setValue("1"); + await inp.setValue("1"); + const errorField = await page.getErrorsForField(nf); + // expect(page.getErrorsForField(nf).isExisting()).toBe(false); + expect(await errorField.isExisting()).toBe(false); + }; }); it("when language is changed, language should change", async () => { diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index eddb67807..ea4429794 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -43,22 +43,22 @@ export class PreferencesPage { } async changeLanguage(index: number) { - const select = this.getLanguageSelect(); + const select = await this.getLanguageSelect(); await changeSelectValue(select, index); } async enableEvilEmptyFields() { - const cb = this.getEmptyFieldsCheckbox(); - const underlyingCB = cb.$(`input.mat-checkbox-input`); - if (!underlyingCB.isSelected()) { + const cb = await this.getEmptyFieldsCheckbox(); + const underlyingCB = await cb.$(`input.mat-checkbox-input`); + if (!await underlyingCB.isSelected()) { await cb.click(); } } async disableEvilEmptyFields() { - const cb = this.getEmptyFieldsCheckbox(); - const underlyingCB = cb.$(`input.mat-checkbox-input`); - if (underlyingCB.isSelected()) { + const cb = await this.getEmptyFieldsCheckbox(); + const underlyingCB = await cb.$(`input.mat-checkbox-input`); + if (await underlyingCB.isSelected()) { await cb.click(); } } @@ -81,8 +81,8 @@ export class PreferencesPage { } async setIterationCount(n: number) { - const input = this.getInputFromName("nmi"); - input.clearValue(); + const input = await this.getInputFromName("nmi"); + // input.clearValue(); await input.setValue(n.toString()); } } diff --git a/e2e/pressure-loss-empty-fields.e2e-spec.ts b/e2e/pressure-loss-empty-fields.e2e-spec.ts index b040c04cc..53b14e380 100644 --- a/e2e/pressure-loss-empty-fields.e2e-spec.ts +++ b/e2e/pressure-loss-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'pressure loss' calculator when created with 'empty fields' option -", () => { let listPage: ListPage; @@ -31,10 +32,10 @@ describe("Check fields are empty in 'pressure loss' calculator when created with await browser.pause(200); // select Lechapt-Calmon pressure loss law - const materialSelect = calcPage.getSelectById("select_pressurelosstype"); + const materialSelect = await calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 0); await browser.pause(200); - expect(calcPage.checkEmptyOrFilledFields(["Q", "D", "Lg", "Kloc"], [true, true, true, true])); + expect(await calcPage.checkEmptyOrFilledFields(["Q", "D", "Lg", "Kloc"], [true, true, true, true])); }); }); diff --git a/e2e/pressure-loss.e2e-spec.ts b/e2e/pressure-loss.e2e-spec.ts index 38b8e993a..e4d6e530c 100644 --- a/e2e/pressure-loss.e2e-spec.ts +++ b/e2e/pressure-loss.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Pressure loss - ", () => { let listPage: ListPage; @@ -32,7 +33,7 @@ describe("Pressure loss - ", () => { await browser.pause(200); // select Lechapt-Calmon pressure loss law - const materialSelect = calcPage.getSelectById("select_pressurelosstype"); + const materialSelect = await calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 0); await browser.pause(200); @@ -48,7 +49,7 @@ describe("Pressure loss - ", () => { }); it("Strickler", async () => { - browser.manage().window().setPosition(2000, 30); + // browser.manage().window().setPosition(2000, 30); // open "pressure loss" calculator await navBar.clickNewCalculatorButton(); @@ -56,16 +57,13 @@ describe("Pressure loss - ", () => { await browser.pause(200); // select Strickler pressure loss law - const materialSelect = calcPage.getSelectById("select_pressurelosstype"); + const materialSelect = await calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 1); await browser.pause(200); - debugger // check inputs presence - const ks = $("#0_Ks"); - expect(await ks.isExisting()).toBe(true); // isNgParamPresent does not work on "0_Ks". Why ? Mystery... - + expect(await calcPage.isNgParamPresent("0_Ks")).toBe(true); expect(await calcPage.isNgParamPresent("Q")).toBe(true); expect(await calcPage.isNgParamPresent("D")).toBe(true); expect(await calcPage.isNgParamPresent("J")).toBe(true); diff --git a/e2e/regime-uniforme-empty-fields.e2e-spec.ts b/e2e/regime-uniforme-empty-fields.e2e-spec.ts index 636ba6336..f91783104 100644 --- a/e2e/regime-uniforme-empty-fields.e2e-spec.ts +++ b/e2e/regime-uniforme-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'uniform flow' calculator when created with 'empty fields' option", () => { let listPage: ListPage; @@ -29,6 +30,6 @@ describe("Check fields are empty in 'uniform flow' calculator when created with await listPage.clickMenuEntryForCalcType(3); await browser.pause(200); - expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])) + expect(await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])) }); }); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index 80fb6cd12..fb2b14b63 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -4,6 +4,7 @@ import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Remous @@ -38,7 +39,10 @@ describe("ngHyd − remous", () => { await browser.pause(300); // 2. calculate it, there should be 6 messages in the log - await calcPage.getCalculateButton().click(); + const calcBtn = await calcPage.getCalculateButton() + await calcBtn.click(); + await browser.pause(200); + expect(await calcPage.nbLogEntries()).toBe(6); await browser.pause(300); @@ -62,7 +66,7 @@ describe("ngHyd − remous", () => { await browser.pause(300); // 2. Set to trapezoidal section with bank slope of 2m/m and 20 meter width bed - await changeSelectValue(calcPage.getSelectById("select_section"), 2); + await changeSelectValue(await calcPage.getSelectById("select_section"), 2); await browser.pause(300); await calcPage.getInputById("LargeurFond").clearValue(); await browser.pause(300); @@ -72,7 +76,10 @@ describe("ngHyd − remous", () => { await calcPage.getInputById("Fruit").setValue("2"); // 3. Calculate, the calculation should succeed - await calcPage.getCalculateButton().click(); + const calcBtn = await calcPage.getCalculateButton() + await calcBtn.click(); + await browser.pause(200); + const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); }); @@ -80,15 +87,16 @@ describe("ngHyd − remous", () => { it("Check that calculation with dx >= reach length fails", async () => { // load backwater curve session file with Dx>=Long await navBar.clickMenuButton(); - await browser.pause(500); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.pause(500); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-remous-dx-bief.json"); - await browser.pause(1000); + await browser.pause(300); // Calculate, the calculation should fail - await calcPage.getCalculateButton().click(); - await browser.pause(1000); + const calcBtn = await calcPage.getCalculateButton() + await calcBtn.click(); + await browser.pause(200); // check error message in log expect(await calcPage.nbLogEntries()).toBe(1); diff --git a/e2e/reset-param-mode.e2e-spec.ts b/e2e/reset-param-mode.e2e-spec.ts index f8a061df1..d5e85ef80 100644 --- a/e2e/reset-param-mode.e2e-spec.ts +++ b/e2e/reset-param-mode.e2e-spec.ts @@ -1,4 +1,9 @@ import { ListPage } from "./list.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; +import { Navbar } from "./navbar.po"; +import { SideNav } from "./sidenav.po"; +import { CalculatorPage } from "./calculator.po"; /** * Parameter mode should be set to its previous mode (fixed/var/...) when cancel is pressed @@ -6,76 +11,92 @@ import { ListPage } from "./list.po"; */ describe("ngHyd - check parameter mode is set to its previous value - ", () => { let listPage: ListPage; + let navBar: Navbar; + let sideNav: SideNav; + let calcPage: CalculatorPage; beforeAll(() => { listPage = new ListPage(); + // navBar = new Navbar(); + // sideNav = new SideNav(); + calcPage = new CalculatorPage(); }); it("when min/max/list values dialog is cancelled on 'fish ladder: fall' calculator", async () => { // start page await listPage.navigateTo(); - await browser.pause(500); + await browser.pause(300); // open 'PAB fall' calculator await listPage.clickMenuEntryForCalcType(12); - await browser.pause(500); + await browser.pause(200); // click "calc" radio on Z1 parameter - const z1calcbtn = $("#mat-button-toggle-3"); + // const z1calcbtn = await $("#mat-button-toggle-3"); + const z1calcbtn = await calcPage.getInputRadioButtonFromId("Z1", "cal"); await z1calcbtn.click(); await browser.pause(200); // click "var" radio on Z1 parameter - const z1varbtn = $("#mat-button-toggle-2"); + // const z1varbtn = await $("#mat-button-toggle-2"); + const z1varbtn = await calcPage.getInputRadioButtonFromId("Z1", "var"); await z1varbtn.click(); await browser.pause(200); // click cancel button - const cancelbtn = $("#btn-cancel"); + const cancelbtn = await $("#btn-cancel"); await cancelbtn.click(); - await browser.pause(200); + await browser.pause(500); // check Z1 var toggle is not checked - expect(await z1varbtn.getAttribute("ng-reflect-checked")).toBe("false"); + // expect(await z1varbtn.getASttribute("ng-reflect-checked")).toBe("false"); + expect(await calcPage.isRadioButtonChecked(z1varbtn)).toEqual(false); // check Z1 calc toggle is checked - expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); + // expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); + expect(await calcPage.isRadioButtonChecked(z1calcbtn)).toEqual(true); }); it("when min/max/list values dialog is cancelled on 'fish ladder' calculator", async () => { // start page await listPage.navigateTo(); - await browser.pause(500); + await browser.pause(300); + // await newSession(navBar, sideNav); // open PAB calculator await listPage.clickMenuEntryForCalcType(15); await browser.pause(500); // "fixed" radio on Q parameter - const qfixbtn = $("#mat-button-toggle-1"); - await browser.pause(50); + // const qfixbtn = await $("#mat-button-toggle-1"); + const qfixbtn = await calcPage.getInputRadioButtonFromId("Q", "fix"); + // await browser.pause(50); // "var" radio on Z1 parameter - const z1varbtn = $("#mat-button-toggle-6"); - await browser.pause(50); + // const z1varbtn = await $("#mat-button-toggle-6"); + const z1varbtn = await calcPage.getInputRadioButtonFromId("Z1", "var"); + // await browser.pause(50); // "calc" radio on Z1 parameter - const z1calcbtn = $("#mat-button-toggle-7"); - await browser.pause(50); + // const z1calcbtn = await $("#mat-button-toggle-7"); + const z1calcbtn = await calcPage.getInputRadioButtonFromId("Z1", "cal"); + // await browser.pause(50); // click "var" radio on Z1 parameter await z1varbtn.click(); await browser.pause(200); // click cancel button - const cancelbtn = $("#btn-cancel"); + const cancelbtn = await $("#btn-cancel"); await cancelbtn.click(); - await browser.pause(200); + await browser.pause(500); // check Q fix toggle is checked - expect(await qfixbtn.getAttribute("ng-reflect-checked")).toBe("true"); + // expect(await qfixbtn.getAttribute("ng-reflect-checked")).toBe("true"); + expect(await calcPage.isRadioButtonChecked(qfixbtn)).toEqual(true); // check Z1 calc toggle is checked - expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); + // expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); + expect(await calcPage.isRadioButtonChecked(z1calcbtn)).toEqual(true); }); }); diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index 9d1e3dba6..5811449db 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check results are reset after application settings modification - ", () => { let listPage: ListPage; @@ -28,13 +29,13 @@ describe("Check results are reset after application settings modification - ", ( await browser.pause(200); }); - async function runTestWithParamater(param: string, val1: number, val2: number) { + async function runTestWithParameter(param: string, val1: number, val2: number) { // set starting compute precision - const input = prefPage.getInputFromName(param); - await input.clearValue(); - await browser.pause(20); + const input = await prefPage.getInputFromName(param); + // await input.clearValue(); + // await browser.pause(20); await input.setValue(val1.toString()); - await browser.pause(200); + // await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); @@ -42,7 +43,7 @@ describe("Check results are reset after application settings modification - ", ( await browser.pause(200); // click "compute" button - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); @@ -58,10 +59,10 @@ describe("Check results are reset after application settings modification - ", ( await browser.pause(200); // modify compute precision - await input.clearValue(); - await browser.pause(20); + // await input.clearValue(); + // await browser.pause(20); await input.setValue(val2.toString()); - await browser.pause(200); + await browser.pause(500); // back to calculator await navBar.openNthCalculator(0); @@ -69,14 +70,13 @@ describe("Check results are reset after application settings modification - ", ( // results should not be here hasResults = await calcPage.hasResults(); expect(hasResults).toBe(false); - } it("compute precision", async () => { - await runTestWithParamater("cp", 0.001, 0.0001); + await runTestWithParameter("cp", 0.001, 0.0001); }); it("max iterations", async () => { - await runTestWithParamater("nmi", 10, 100); + await runTestWithParameter("nmi", 10, 100); }); }); diff --git a/e2e/section-empty-fields.e2e-spec.ts b/e2e/section-empty-fields.e2e-spec.ts index 947930354..5d867024c 100644 --- a/e2e/section-empty-fields.e2e-spec.ts +++ b/e2e/section-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'parametric section' calculator when created with 'empty fields' option", () => { let listPage: ListPage; @@ -29,6 +30,6 @@ describe("Check fields are empty in 'parametric section' calculator when created await listPage.clickMenuEntryForCalcType(2); await browser.pause(200); - expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])); + expect(await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])); }); }); diff --git a/e2e/select-default-value.e2e-spec.ts b/e2e/select-default-value.e2e-spec.ts index a1323b092..058408310 100644 --- a/e2e/select-default-value.e2e-spec.ts +++ b/e2e/select-default-value.e2e-spec.ts @@ -2,6 +2,7 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("check the select default value - ", () => { let prefPage: PreferencesPage; @@ -34,7 +35,7 @@ describe("check the select default value - ", () => { // in the calculator configuration file, the default resolution method is 'Trapezes'. // let's check this... - const sel = calcPage.getSelectById("select_resolution"); + const sel = await calcPage.getSelectById("select_resolution"); const val = await calcPage.getSelectValueText(sel); expect(val).toBe("Intégration par trapèzes"); }); @@ -47,7 +48,7 @@ describe("check the select default value - ", () => { // in the calculator configuration file, the default section method is 'Rectangulaire'. // let's check this... - const sel = calcPage.getSelectById("select_section"); + const sel = await calcPage.getSelectById("select_section"); const val = await calcPage.getSelectValueText(sel); expect(val).toBe("Rectangulaire"); }); diff --git a/e2e/sidenav.po.ts b/e2e/sidenav.po.ts index 94ba72779..e7e79bbe2 100644 --- a/e2e/sidenav.po.ts +++ b/e2e/sidenav.po.ts @@ -1,4 +1,7 @@ import * as path from "path"; +import { browser, $, $$, expect } from '@wdio/globals' +import { CalculatorPage } from "./calculator.po"; +import { scrollToElement } from "./util.po"; export class SideNav { @@ -20,6 +23,7 @@ export class SideNav { getFileInput() { return $(`dialog-load-session input[type="file"]`); + // return $(`dialog-load-session ngx-mat-file-input`); } getFileLoadButton() { @@ -35,7 +39,7 @@ export class SideNav { } async clickLoadSessionButton() { - const ncb = this.getLoadSessionButton(); + const ncb = await this.getLoadSessionButton(); await browser.pause(500); await ncb.click(); } @@ -47,20 +51,25 @@ export class SideNav { } async clickNewSessionButton() { - const ncb = this.getNewSessionButton(); - await browser.pause(200); + const ncb = await this.getNewSessionButton(); + // await browser.pause(200); await ncb.click(); await browser.pause(200); - await this.getConfirmNewSessionButton().click(); + const cb = await this.getConfirmNewSessionButton(); + await cb.click(); } async loadSessionFile(file: string, click: boolean = true) { const absolutePath = path.resolve(__dirname, file); - const input = this.getFileInput(); - await input.setValue(absolutePath); - await browser.pause(500); + const input = await this.getFileInput(); + // await input.click(); + // await scrollToElement(input) + // await input.setValue(absolutePath); + await input.addValue(absolutePath); + // await browser.pause(500); if (click) { - await this.getFileLoadButton().click(); + const btn = await this.getFileLoadButton(); + await btn.click(); } } diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 2b09a3387..1aa86e1dd 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -3,7 +3,8 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, scrollPageToTop } from "./util.po"; +import { changeSelectValue, newSession, openCalculator, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Clone calculators @@ -11,16 +12,16 @@ import { changeSelectValue, scrollPageToTop } from "./util.po"; describe("Solveur - ", () => { let listPage: ListPage; let calcPage: CalculatorPage; - let navbar: Navbar; - let sidenav: SideNav; + let navBar: Navbar; + let sideNav: SideNav; let prefPage: PreferencesPage; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); - navbar = new Navbar(); - sidenav = new SideNav(); + navBar = new Navbar(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -29,35 +30,39 @@ describe("Solveur - ", () => { // force language to prevent issues due to default browser language await prefPage.changeLanguage(1); // fr await browser.pause(200); - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); }); it("load > calculate", async () => { - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickLoadSessionButton(); + await sideNav.clickLoadSessionButton(); await browser.pause(200); - await sidenav.loadSessionFile("./session/session-solveur-chutes.json"); + await sideNav.loadSessionFile("./session/session-solveur-chutes.json"); await browser.pause(200); - expect(await navbar.getAllCalculatorTabs().length).toBe(4); - await navbar.clickCalculatorTab(3); // n°3 should be the latest + expect(await navBar.getAllCalculatorTabs().length).toBe(4); + await navBar.clickCalculatorTab(3); // n°3 should be the latest // check input values - expect(await calcPage.getInputById("Xinit").getAttribute("value")).toBe("0.5"); - expect(await calcPage.getInputById("Ytarget").getAttribute("value")).toBe("252"); + // expect(await calcPage.getInputById("Xinit").getAttribute("value")).toBe("0.5"); + const inpXinit = await calcPage.getInputById("Xinit"); + expect(await inpXinit.getValue()).toBe("0.5"); + // expect(await calcPage.getInputById("Ytarget").getAttribute("value")).toBe("252"); + const inpYtarget = await calcPage.getInputById("Ytarget"); + expect(await inpYtarget.getValue()).toBe("252"); // check Nub to calculate - const ntc = calcPage.getSelectById("select_target_nub"); + const ntc = await calcPage.getSelectById("select_target_nub"); const ntcV = await calcPage.getSelectValueText(ntc); expect(ntcV).toContain("PAB : puissance / Puissance dissipée (PV)"); // check targetted result - const ntt = calcPage.getSelectById("select_target_result"); + const ntt = await calcPage.getSelectById("select_target_result"); const nttV = await calcPage.getSelectValueText(ntt); expect(nttV).toContain("Puissance dissipée (PV)"); // check searched Parameter - const sp = calcPage.getSelectById("select_searched_param"); + const sp = await calcPage.getSelectById("select_searched_param"); const spV = await calcPage.getSelectValueText(sp); expect(spV).toContain("Z2 - Cote aval (PAB : chute)"); @@ -65,6 +70,8 @@ describe("Solveur - ", () => { const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -76,45 +83,52 @@ describe("Solveur - ", () => { }); it("create > feed > calculate > clone > calculate clone", async () => { + await newSession(navBar, sideNav); + // 1. create empty Solveur - await listPage.clickMenuEntryForCalcType(22); // Solveur - await browser.pause(500); + // await listPage.clickMenuEntryForCalcType(22); // Solveur + // await browser.pause(500); + openCalculator(22, navBar, listPage); // 2. create PAB:Chute, PAB:Nombre and PAB:Puissance linked to one another - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); // PAB:Chute await browser.pause(500); - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(13); // PAB:Nombre await browser.pause(500); // link DHT to PAB:Chute.DH - const dht = calcPage.getInputById("DHT"); + const dht = await calcPage.getInputById("DHT"); await calcPage.setParamMode(dht, "link"); // Calculate DH - const dh_nombre = calcPage.getInputById("DH"); + const dh_nombre = await calcPage.getInputById("DH"); await calcPage.setParamMode(dh_nombre, "cal"); - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(6); // PAB:Puissance await browser.pause(500); // link DH to PAB:Nombre.DH - const dh_puiss = calcPage.getInputById("DH"); + const dh_puiss = await calcPage.getInputById("DH"); await calcPage.setParamMode(dh_puiss, "link"); // Go back to Solveur - await navbar.clickCalculatorTab(0); + await navBar.clickCalculatorTab(0); - await changeSelectValue(calcPage.getSelectById("select_target_nub"), 1); // "Puissance / PV" + await changeSelectValue(await calcPage.getSelectById("select_target_nub"), 1); // "Puissance / PV" await browser.pause(500); - await changeSelectValue(calcPage.getSelectById("select_searched_param"), 2); // "Chute / Z2" + await changeSelectValue(await calcPage.getSelectById("select_searched_param"), 2); // "Chute / Z2" await browser.pause(500); await calcPage.getInputById("Ytarget").setValue("318"); // check that "compute" button is active const calcButton = await calcPage.checkCalcButtonEnabled(true); + await browser.pause(200); + // click "compute" button await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -125,8 +139,8 @@ describe("Solveur - ", () => { await browser.pause(500); // 4. check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().length).toBe(5); - await navbar.clickCalculatorTab(4); // n°4 should be the latest + expect(await navBar.getAllCalculatorTabs().length).toBe(5); + await navBar.clickCalculatorTab(4); // n°4 should be the latest // check that result is empty const hasResultsClone1 = await calcPage.hasResults(); @@ -134,31 +148,37 @@ describe("Solveur - ", () => { // check that "compute" button is active const calcButtonClone = await calcPage.checkCalcButtonEnabled(true); + await browser.pause(200); + // click "compute" button await calcButtonClone.click(); + await browser.pause(200); + // check that result is not empty const hasResultsClone2 = await calcPage.hasResults(); expect(hasResultsClone2).toBe(true); }); it("channel flow example > solver > change searched parameter > run calculation", async () => { + await newSession(navBar, sideNav); + // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); - await (await examples)[1].click(); + await examples[1].click(); await browser.pause(500); // select solver tab - await navbar.clickCalculatorTab(3); + await navBar.clickCalculatorTab(3); await browser.pause(500); // modify searched parameter - const sel = calcPage.getSelectById("select_searched_param"); + const sel = await calcPage.getSelectById("select_searched_param"); await changeSelectValue(sel, 11); await browser.pause(300); const selText = await calcPage.getSelectValueText(sel); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(500); @@ -167,17 +187,19 @@ describe("Solveur - ", () => { }); it("check solver searched parameter is set to 'bottom slope'", async () => { + await newSession(navBar, sideNav); + // open "canal critical slope" example const examples = await $$("#examples-list .load-example"); - await (await examples)[3].click(); + await examples[3].click(); await browser.pause(500); // select solver tab - await navbar.clickCalculatorTab(2); + await navBar.clickCalculatorTab(2); await browser.pause(500); // check selected searched parameter text - const sel = calcPage.getSelectById("select_searched_param"); + const sel = await calcPage.getSelectById("select_searched_param"); const selText = await calcPage.getSelectValueText(sel); expect(selText).toEqual("If - Pente du fond (Sec. param.)"); }); @@ -191,24 +213,19 @@ describe("Solveur - nghyd#601 with empty fields option", () => { let navBar: Navbar; let listPage: ListPage; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); listPage = new ListPage(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); - async function openCalculator(id: number) { - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - - await listPage.clickMenuEntryForCalcType(id); - await browser.pause(200); - } async function openSolver() { - await openCalculator(22); + await openCalculator(22, navBar, listPage); } beforeEach(async () => { @@ -217,6 +234,8 @@ describe("Solveur - nghyd#601 with empty fields option", () => { }); it("check solver with empty fields option does not fill inputs - solver alone", async () => { + await newSession(navBar, sideNav); + // open new solver calculator await openSolver(); @@ -230,13 +249,13 @@ describe("Solveur - nghyd#601 with empty fields option", () => { it("check solver with empty fields option does not fill target parameter input", async () => { // open "parallel structures" calculator - await openCalculator(8); + await openCalculator(8, navBar, listPage); // open second "parallel structures" calculator - await openCalculator(8); + await openCalculator(8, navBar, listPage); // link Q to first calculator's - const inpQ = calcPage.getInputById("Q"); + const inpQ = await calcPage.getInputById("Q"); await calcPage.setParamMode(inpQ, "link"); await browser.pause(200); @@ -245,20 +264,22 @@ describe("Solveur - nghyd#601 with empty fields option", () => { // check target parameter input is empty await calcPage.checkEmptyInput("Ytarget"); - await browser.pause(200); + await browser.pause(100); // check initial value input is not empty await calcPage.checkEmptyInput("Xinit"); - await browser.pause(200); + await browser.pause(100); }); it("check removing and recreating solver with empty fields option does not fill target parameter input", async () => { - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + await newSession(navBar, sideNav); + + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); - await (await examples)[1].click(); + await examples[1].click(); await browser.pause(500); // close existing "solver" calculator @@ -286,24 +307,26 @@ describe("Solveur - nghyd#601 without empty fields option", () => { let navBar: Navbar; let listPage: ListPage; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); listPage = new ListPage(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); - async function openCalculator(id: number) { - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + // async function openCalculator(id: number) { + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); - await listPage.clickMenuEntryForCalcType(id); - await browser.pause(200); - } + // await listPage.clickMenuEntryForCalcType(id); + // await browser.pause(200); + // } async function openSolver() { - await openCalculator(22); + await openCalculator(22, navBar, listPage); } beforeEach(async () => { @@ -314,6 +337,8 @@ describe("Solveur - nghyd#601 without empty fields option", () => { }); it("check solver without empty fields option does not fill inputs - solver alone", async () => { + await newSession(navBar, sideNav); + // open new solver calculator await openSolver(); @@ -327,13 +352,13 @@ describe("Solveur - nghyd#601 without empty fields option", () => { it("check solver without empty fields option fills inputs", async () => { // open "parallel structures" calculator - await openCalculator(8); + await openCalculator(8, navBar, listPage); // open second "parallel structures" calculator - await openCalculator(8); + await openCalculator(8, navBar, listPage); // link Q to first calculator's - const inpQ = calcPage.getInputById("Q"); + const inpQ = await calcPage.getInputById("Q"); await calcPage.setParamMode(inpQ, "link"); await browser.pause(200); @@ -350,12 +375,14 @@ describe("Solveur - nghyd#601 without empty fields option", () => { }); it("check removing and recreating solver without empty fields option fills inputs", async () => { - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + await newSession(navBar, sideNav); + + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); - await (await examples)[1].click(); + await examples[1].click(); await browser.pause(500); // close existing "solver" calculator @@ -384,7 +411,7 @@ describe("Solveur - nghyd#601 without empty fields option", () => { // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); - await (await examples)[1].click(); + await examples[1].click(); await browser.pause(500); // close existing "solver" calculator @@ -396,7 +423,7 @@ describe("Solveur - nghyd#601 without empty fields option", () => { await browser.pause(500); // select other target module - const ntc = calcPage.getSelectById("select_target_nub"); + const ntc = await calcPage.getSelectById("select_target_nub"); await changeSelectValue(ntc, 1); // check target value input is empty @@ -410,24 +437,26 @@ describe("Solveur - nghyd#606 - a single module cannot be used with solver", () let navBar: Navbar; let listPage: ListPage; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); listPage = new ListPage(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); - async function openCalculator(id: number) { - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + // async function openCalculator(id: number) { + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); - await listPage.clickMenuEntryForCalcType(id); - await browser.pause(200); - } + // await listPage.clickMenuEntryForCalcType(id); + // await browser.pause(200); + // } async function openSolver() { - await openCalculator(22); + await openCalculator(22, navBar, listPage); } beforeEach(async () => { @@ -438,19 +467,21 @@ describe("Solveur - nghyd#606 - a single module cannot be used with solver", () }); it("", async () => { + await newSession(navBar, sideNav); + // open uniform flow calculator - await openCalculator(3); + await openCalculator(3, navBar, listPage); // open a solver module await openSolver(); // set speed as target parameter - const trs = calcPage.getSelectById("select_target_result"); + const trs = await calcPage.getSelectById("select_target_result"); await changeSelectValue(trs, 1); await browser.pause(200); // check searched parameter has options - const sps = calcPage.getSelectById("select_searched_param"); + const sps = await calcPage.getSelectById("select_searched_param"); expect(await calcPage.isSelectEmpty(sps)).toBe(false); }); }); diff --git a/e2e/translation.e2e-spec.ts b/e2e/translation.e2e-spec.ts index 00f0e3316..93bcb3f48 100644 --- a/e2e/translation.e2e-spec.ts +++ b/e2e/translation.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check translation", () => { let listPage: ListPage; @@ -26,8 +27,9 @@ describe("Check translation", () => { it("variables in results", async () => { // *** results in french *** - prefPage.changeLanguage(1); // fr - await browser.pause(200); + await prefPage.navigateTo(); + await prefPage.changeLanguage(1); // fr + // await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); @@ -35,7 +37,7 @@ describe("Check translation", () => { await browser.pause(200); // set Z2 to variated mode - const inpZ2 = calcPage.getInputById("Z2"); + const inpZ2 = await calcPage.getInputById("Z2"); await calcPage.setParamMode(inpZ2, "var"); // run calculation @@ -43,20 +45,22 @@ describe("Check translation", () => { await browser.pause(500); // "variable for X axis" select label - const selXaxis = calcPage.getSelectById("selectX"); + const selXaxis = await calcPage.getSelectById("selectX"); expect(await calcPage.getMatselectCurrentOptionText(selXaxis)).toEqual("Cote aval"); // "variable for Y axis" select label - const selYaxis = calcPage.getSelectById("selectY"); + const selYaxis = await calcPage.getSelectById("selectY"); expect(await calcPage.getMatselectCurrentOptionText(selYaxis)).toEqual("DH : Chute (m)"); // fixed results variables - const frr = calcPage.getAllFixedResultsRows(); - let lbl1 = await frr.$$("td")[0].getText(); + const frr = await calcPage.getAllFixedResultsRows(); + let row0 = frr[0]; + // let lbl1 = await frr.$$("td")[0].getText(); + let lbl1 = await row0.$("td").getText(); expect(lbl1).toEqual("Cote amont (m)"); // variated results headers - const vrh = calcPage.getAllVariatedResultsTableHeaders(); + const vrh = await calcPage.getAllVariatedResultsTableHeaders(); let lbl2 = await vrh[0].getText(); expect(lbl2).toEqual("Cote aval"); let lbl3 = await vrh[1].getText(); @@ -65,11 +69,12 @@ describe("Check translation", () => { // *** results in english *** // setup -> english - await navBar.clickMenuButton(); - await browser.pause(200); - const setupBtn = sideNav.getSetupButton(); - await setupBtn.click(); - await browser.pause(200); + // await navBar.clickMenuButton(); + // await browser.pause(200); + // const setupBtn = await sideNav.getSetupButton(); + // await setupBtn.click(); + // await browser.pause(200); + await prefPage.navigateTo(); await prefPage.changeLanguage(0); // en await browser.pause(200); @@ -84,7 +89,9 @@ describe("Check translation", () => { expect(await calcPage.getMatselectCurrentOptionText(selYaxis)).toEqual("DH : Fall (m)"); // fixed results variables - lbl1 = await frr.$$("td")[0].getText(); + row0 = frr[0]; + // lbl1 = await frr.$$("td")[0].getText(); + lbl1 = await row0.$("td").getText(); expect(lbl1).toEqual("Upstream elevation (m)"); // variated results headers diff --git a/e2e/util.po.ts b/e2e/util.po.ts index c7717900f..6e3d63c2e 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -1,11 +1,16 @@ import { browser, $, $$, expect } from '@wdio/globals' +import { Navbar } from './navbar.po'; +import { SideNav } from './sidenav.po'; +import { ListPage } from './list.po'; /** * scroll page to make element visible */ export async function scrollToElement(elem) { - await browser.execute("arguments[0].scrollIntoView({ block: 'center' });", elem); - await browser.pause(50); + // await browser.execute("arguments[0].scrollIntoView({ block: 'center' });", elem); + // await browser.pause(50); + await browser.execute(e => { e.scrollIntoView({ block: 'center' }) }, elem); + await browser.pause(100); } /** @@ -13,6 +18,7 @@ export async function scrollToElement(elem) { */ export async function scrollPageToTop() { await browser.execute("window.scrollTo(0, 0);"); + // await browser.scroll(0, 0); } /** @@ -29,9 +35,42 @@ export function expectNumber(msg: string, val: number, expected: number) { } export async function changeSelectValue(elt, index: number) { + await scrollToElement(elt); + await browser.pause(100); await elt.click(); + await browser.pause(100); const optionId = ".cdk-overlay-container mat-option:nth-of-type(" + (index + 1) + ")"; - const option = $(optionId); + const option = await $(optionId); await option.click(); await browser.pause(200); } + +// Remove all calculators from current session. +// Often used since WebDriverIO migration since it()s in a single e2e-spec file +// reuse the same browser window, hence calculators from previous it()s remain +// and may disturb subsequent tests. +// Avoids splitting it()s into multiple e2e-spec files... +export async function newSession(navBar: Navbar, sideNav: SideNav) { + const tabs = await navBar.getAllCalculatorTabs(); + if (tabs.length > 0) { + await navBar.clickMenuButton(); + await browser.pause(200); + await sideNav.clickNewSessionButton(); + await browser.pause(200); + // après ça, le bouton "#new-calculator" est absent + } +} + +export async function openCalculator(id: number, navBar: Navbar, listPage: ListPage) { + const ncButton = await navBar.getNewCalculatorButton(); + if (await ncButton.isExisting()) { + await scrollToElement(ncButton); + if (await ncButton.isDisplayed()) { + await ncButton.click() + await browser.pause(200); + } + } + + await listPage.clickMenuEntryForCalcType(id); + await browser.pause(200); +} diff --git a/e2e/valeurs-erronees.e2e-spec.ts b/e2e/valeurs-erronees.e2e-spec.ts index 716ce4060..5f2ca99b4 100644 --- a/e2e/valeurs-erronees.e2e-spec.ts +++ b/e2e/valeurs-erronees.e2e-spec.ts @@ -2,6 +2,7 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("ngHyd - check invalid values are removed - ", () => { let listPage: ListPage; @@ -31,12 +32,12 @@ describe("ngHyd - check invalid values are removed - ", () => { await browser.pause(200); // modify W input with invalid value - const inputW = calcPage.getInputById("W"); - await browser.pause(200); - await inputW.clearValue(); - await browser.pause(200); + const inputW = await calcPage.getInputById("W"); + // await browser.pause(200); + // await inputW.clearValue(); + // await browser.pause(200); await inputW.setValue("-1"); - await browser.pause(200); + // await browser.pause(200); // open another calculator await navBar.clickNewCalculatorButton(); @@ -48,8 +49,9 @@ describe("ngHyd - check invalid values are removed - ", () => { await browser.pause(200); // check invalid value is removed - const w = await inputW.getAttribute("value"); - await browser.pause(200); + // const w = await inputW.getAttribute("value"); + const w = await inputW.getValue(); + // await browser.pause(200); expect(w).toEqual(""); // check that "compute" button is disabled diff --git a/e2e/variable-param-cancel.e2e-spec.ts b/e2e/variable-param-cancel.e2e-spec.ts index 46219fd4b..534e3cc9c 100644 --- a/e2e/variable-param-cancel.e2e-spec.ts +++ b/e2e/variable-param-cancel.e2e-spec.ts @@ -1,4 +1,7 @@ +import { brotliCompress } from "zlib"; +import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Check that a cancel button is present in min/max/list edition dialog @@ -6,24 +9,31 @@ import { ListPage } from "./list.po"; */ describe("ngHyd - check cancel button for variable parameters - ", () => { let listPage: ListPage; + let calcPage: CalculatorPage; beforeAll(() => { listPage = new ListPage(); + calcPage = new CalculatorPage(); }); it("when min/max/list values dialog opens, a cancel button should be present", async () => { + debugger // start page await listPage.navigateTo(); + await browser.pause(200); // open PAB chute await listPage.clickMenuEntryForCalcType(12); + await browser.pause(200); // click "var" radio on Z1 parameter - const z1btn = $("#mat-button-toggle-2-button"); + // const z1btn = $("#mat-button-toggle-2-button"); + const z1btn = await calcPage.getInputRadioButtonFromId("Z1", "var"); await z1btn.click(); + await browser.pause(300); // cancel button presence - const cancelbtn = $("#btn-cancel"); - expect((await cancelbtn.isExisting()) && (await cancelbtn.isDisplayed())).toBeTruthy(); + const cancelbtn = await $("#btn-cancel"); + expect((await cancelbtn.isExisting()) && (await cancelbtn.isDisplayed())).toEqual(true); }); }); diff --git a/wdio.conf.ts b/wdio.conf.ts index 8f5d4c440..f66acf321 100644 --- a/wdio.conf.ts +++ b/wdio.conf.ts @@ -14,8 +14,8 @@ export const config: Options.Testrunner = { transpileOnly: true } }, - - + + // // ================== // Specify Test Files @@ -69,7 +69,7 @@ export const config: Options.Testrunner = { // maxInstances can get overwritten per capability. So if you have an in-house Selenium // grid with only 5 firefox instances available you can make sure that not more than // 5 instances get started at a time. - maxInstances: 5, + maxInstances: 1, // browserName: 'chrome', acceptInsecureCerts: true @@ -85,7 +85,9 @@ export const config: Options.Testrunner = { // Define all options that are relevant for the WebdriverIO instance here // // Level of logging verbosity: trace | debug | info | warn | error | silent - logLevel: 'info', + // logLevel: 'info', + logLevel: 'warn', + // logLevel: 'error', // // Set specific log levels per logger // loggers: @@ -126,7 +128,7 @@ export const config: Options.Testrunner = { // your test setup with almost no effort. Unlike plugins, they don't add new // commands. Instead, they hook themselves up into the test process. services: ['chromedriver'], - + // Framework you want to run your specs with. // The following are supported: Mocha, Jasmine, and Cucumber // see also: https://webdriver.io/docs/frameworks @@ -150,7 +152,7 @@ export const config: Options.Testrunner = { reporters: ['spec'], - + // // Options to be passed to Jasmine. jasmineOpts: { @@ -160,11 +162,11 @@ export const config: Options.Testrunner = { // The Jasmine framework allows interception of each assertion in order to log the state of the application // or website depending on the result. For example, it is pretty handy to take a screenshot every time // an assertion fails. - expectationResultHandler: function(passed, assertion) { + expectationResultHandler: function (passed, assertion) { // do something } }, - + // // ===== // Hooks -- GitLab From 8b006623605e5a6e83eb073c6d5fa902cc53da74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 26 Apr 2023 11:16:07 +0200 Subject: [PATCH 248/285] refactor(e2e): code cleanup refs #618 --- e2e/calc-all-examples.e2e-spec.ts | 6 - e2e/calculate-all-params.e2e-spec.ts | 31 ----- e2e/calculate-button-validation.e2e-spec.ts | 4 - e2e/calculate-linked-params.e2e-spec.ts | 22 ---- e2e/calculator.e2e-spec.ts | 1 - e2e/calculator.po.ts | 129 +------------------ e2e/check-translations.e2e-spec.ts | 2 - e2e/clone-all-calc.e2e-spec.ts | 7 +- e2e/clone-calc.e2e-spec.ts | 3 - e2e/examples-empty-fields.e2e-spec.ts | 11 -- e2e/helpers/GremlinHelper.ts | 1 - e2e/link-parallel-devices.e2e-spec.ts | 2 - e2e/list.po.ts | 1 - e2e/load-linked-params.e2e-spec.ts | 3 - e2e/load-save-session.e2e-spec.ts | 6 - e2e/navbar.po.ts | 8 -- e2e/navigate-through-calculators.e2e-spec.ts | 1 - e2e/pab.e2e-spec.ts | 18 --- e2e/parallel-structures.e2e-spec.ts | 1 - e2e/predam-empty-fields.e2e-spec.ts | 5 - e2e/predam-log.e2e-spec.ts | 4 +- e2e/preferences.e2e-spec.ts | 13 -- e2e/preferences.po.ts | 1 - e2e/pressure-loss.e2e-spec.ts | 2 - e2e/reset-param-mode.e2e-spec.ts | 15 --- e2e/reset-results.e2e-spec.ts | 5 - e2e/sidenav.po.ts | 6 - e2e/solveur.e2e-spec.ts | 26 ---- e2e/translation.e2e-spec.ts | 8 -- e2e/util.po.ts | 3 - e2e/valeurs-erronees.e2e-spec.ts | 6 - e2e/variable-param-cancel.e2e-spec.ts | 2 - 32 files changed, 7 insertions(+), 346 deletions(-) diff --git a/e2e/calc-all-examples.e2e-spec.ts b/e2e/calc-all-examples.e2e-spec.ts index adb93e8f1..04a64a3e3 100644 --- a/e2e/calc-all-examples.e2e-spec.ts +++ b/e2e/calc-all-examples.e2e-spec.ts @@ -42,10 +42,6 @@ describe("ngHyd − example sessions −", () => { } else { // empty session - // await navbar.clickMenuButton(); - // await browser.pause(200); - // await sideNav.clickNewSessionButton(); - // await browser.pause(1000); await newSession(navBar, sideNav); } @@ -62,8 +58,6 @@ describe("ngHyd − example sessions −", () => { // select module await navBar.openNthCalculator(j); await browser.pause(300); - // await calcPage.closeSnackBar(); // opening a calculator can trigger a snackbar with "results invalidated for..." - // await browser.pause(300); await calcPage.closeSnackBars(5, 500); // opening a calculator can trigger a snackbar with "results invalidated for..." await browser.pause(500); // calculate module diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 0af1460ba..744c83877 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -37,24 +37,6 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ const calcTypes = testedCalcTypes; - // const calcTypes = [0]; - // export const testedCalcTypes = [ - // 0, - // // omit 1 - LechaptCalmon - // 2, 3, 4, 5, 6, - // // omit 7 - Structure - // 8, 9, 10, 11, 12, 13, - // // omit 14 -Section - // 15, - // // omit 16 - CloisonAval - // 17, 18, 19, 20, 21, 22, 23, 24, 25, - // // omit 26 - YAXN - // 27, 28, 29, 30, - // // omit 31 - PbCloison and 32 - PbBassin - // 33, 34, 35 - // ]; - // const calcTypes =[30]; - // for each calculator for (const ct of calcTypes) { @@ -70,21 +52,11 @@ describe("ngHyd − calculate all parameters of all calculators", () => { describe(" − calculate all parameters of calculator type [" + ct + "]", () => { it("", async () => { await newSession(navBar, sideNav); - - //await browser.execute("window.moveTo(2000,30)") - // await browser.driver.moveTo(2000,30); - - // go to list page - // await navBar.clickNewCalculatorButton(); - - // click calculator button (instanciate) - // await listPage.clickMenuEntryForCalcType(ct); await openCalculator(ct, navBar, listPage); // get all parameters IDs const inputs = await calcPage.getParamInputsHavingCalcMode(); - // if ((await inputs).length > 0) { if (inputs.length > 0) { // for each param for (let i = 0; i < inputs.length; i++) { @@ -99,9 +71,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // grab input again because calculating the module just refreshed all the fieldsets const input = (await calcPage.getParamInputsHavingCalcMode())[i]; // click "calc" mode button for this parameter - // await browser.pause(50); await calcPage.setParamMode(input, "cal"); - // await browser.pause(50); // check that only 1 button is in "calc" state const nbParamsCalc = await calcPage.getCheckedCalcModeButtons().length; expect(nbParamsCalc).toBe(1); @@ -127,6 +97,5 @@ describe("ngHyd − calculate all parameters of all calculators", () => { } }); }); - // break; } }); diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index d11a3f9ec..a0634d81a 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -147,17 +147,13 @@ describe("Calculate button - ", () => { // for each input, set empty and check calculate button is not active - // const pfls = await calcPage.getParamfieldlines(); const inputs = await calcPage.getParamInputs(); - // for (const pfl of pfls) { for (const inp of inputs) { // set input to fixed mode - // await calcPage.setParamMode(pfl, "fix"); await calcPage.setParamMode(inp, "fix"); await browser.pause(100); // clear input - // const inp = await calcPage.getParamfieldlineInput(pfl); await calcPage.clearInput(inp); await browser.pause(10); diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index ca0753940..557484db9 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -46,19 +46,6 @@ describe("ngHyd − calculate with linked parameters", () => { await browser.pause(100); }); - afterEach(async () => { - //await browser.reloadSession(); - // await browser.pause(500); - }); - - // describe('webdriver.io page', () => { - // it('should reload my session with current capabilities', () => { - // console.log(browser.sessionId) - // browser.reloadSession() - // console.log(browser.sessionId) - // }) - // }); - async function computeAndCheckPresenceOfResults() { // check that "compute" button is active const calcButton = await calcPage.checkCalcButtonEnabled(true); @@ -71,9 +58,6 @@ describe("ngHyd − calculate with linked parameters", () => { } it(" − direct links : parameter linked to a single parameter", async () => { - // await browser.reloadSession(); - // await browser.pause(1000); - // create a Régime uniforme await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); @@ -88,8 +72,6 @@ describe("ngHyd − calculate with linked parameters", () => { await changeSelectValue(sel, 0); await computeAndCheckPresenceOfResults(); - // await browser.reloadSession(); - // await browser.closeWindow(); }); it(" − direct links : parameter linked to a single parameter, plus local variated parameter", async () => { @@ -110,7 +92,6 @@ describe("ngHyd − calculate with linked parameters", () => { await calcPage.setParamMode(W, "var"); await computeAndCheckPresenceOfResults(); - // await browser.reloadSession(); }); it(" − direct links : parameter linked to a variated parameter", async () => { @@ -277,7 +258,6 @@ describe("ngHyd − calculate with linked parameters", () => { // check that number of rows in the variated results table equals number of variated values const varRows = await calcPage.getAllVariatedResultsRows(); - // const nbRows = await varRows.length; expect(varRows.length).toBe(191); // boundaries are included // check that all parameters have values for all iterations (Z2 might miss some if repeat strategy is not applied) @@ -313,7 +293,6 @@ describe("ngHyd − calculate with linked parameters", () => { let frt = await calcPage.getFixedResultsTable(); let volumeRow = await calcPage.getNthRow(frt, 3); let volumeCol = await calcPage.getNthColumn(volumeRow, 2); - // let volume = await volumeCol.getAttribute("textContent"); let volume = await volumeCol.getText(); expect(Number(volume)).toBeCloseTo(44.565, 3); @@ -329,7 +308,6 @@ describe("ngHyd − calculate with linked parameters", () => { frt = await calcPage.getFixedResultsTable(); volumeRow = await calcPage.getNthRow(frt, 3); volumeCol = await calcPage.getNthColumn(volumeRow, 2); - // volume = await volumeCol.getText("textContent"); volume = await volumeCol.getText(); expect(Number(volume)).toBeCloseTo(44.565, 3); }); diff --git a/e2e/calculator.e2e-spec.ts b/e2e/calculator.e2e-spec.ts index 5c41eba08..47f0cf969 100644 --- a/e2e/calculator.e2e-spec.ts +++ b/e2e/calculator.e2e-spec.ts @@ -22,7 +22,6 @@ describe("ngHyd − calculator page", () => { it("when a calculator is open, no active label should be empty", async () => { const labels = await page.getInputLabels(); - // await labels.each(async (l) => { for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 531b0e195..845251555 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -12,58 +12,15 @@ export class CalculatorPage { return $$("ngparam-input input.form-control"); } - // getParamfieldlines() { - // return $$("param-field-line"); - // } - - // getParamfieldlineInput(pfl) { - // return pfl.$("ngparam-input input.form-control"); - // } - - // async getParamInputsHavingCalcMode() { - // const ret = []; - // const inputs = await this.getParamInputs(); - // // await inputs.each(async (i) => { - // // if (await this.inputHasCalcModeButton(i)) { - // // ret.push(i); - // // } - // // }); - - // // for await (const img of $$('img')) { - // // console.log(await img.getAttribute('src)) - // // } - - // for await (const i of inputs) { - // if (await this.inputHasCalcModeButton(i)) { - // ret.push(i); - // } - // } - - // return ret; - // } async getParamInputsHavingCalcMode() { const ret = []; const inputs = await $$("param-field-line"); - // await inputs.each(async (i) => { - // if (await this.inputHasCalcModeButton(i)) { - // ret.push(i); - // } - // }); - - // for await (const img of $$('img')) { - // console.log(await img.getAttribute('src)) - // } - for (const inp of inputs) { - // if (await this.inputHasCalcModeButton(i)) { - // ret.push(i); - // } const toggle = await inp.$("mat-button-toggle.radio_cal > button"); if (await toggle.isExisting()) { ret.push(inp); } } - return ret; } @@ -88,8 +45,6 @@ export class CalculatorPage { if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); const options = $$(".cdk-overlay-container mat-option"); - // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown - //await sel.keys('Escape'); // close dropdown await browser.keys(Key.Escape); // close dropdown return await options.length; } @@ -113,8 +68,6 @@ export class CalculatorPage { const opt = options[o]; res.push(await opt.getText()) } - // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown - // await sel.keys('Escape'); // close dropdown await browser.keys(Key.Escape); // close dropdown await browser.pause(500); return res; @@ -135,7 +88,6 @@ export class CalculatorPage { async getMatselectCurrentOptionText(select): Promise<string> { const currentOption = await this.getSelectCurrentOption(select); await browser.pause(100); - // return await currentOption.$("span span").getText(); const opt = await currentOption.$("span span"); await browser.pause(100); const res = await opt.getText(); @@ -145,7 +97,7 @@ export class CalculatorPage { getSelectById(id: string) { // return $(`#${id}`); - return $(`mat-select[id='${id}']`); // IDs cannot by a number, so use this query form + return $(`mat-select[id='${id}']`); // IDs cannot start by a number, so use this query form } async isMatSelectPresent(id: string) { @@ -170,11 +122,11 @@ export class CalculatorPage { getInputById(id: string) { // return $(`#${id}`); - return $(`input[id='${id}']`); // IDs cannot by a number, so use this query form + return $(`input[id='${id}']`); // IDs cannot start by a number, so use this query form } getNgInputById(id: string) { - return $(`ngparam-input input[id='${id}']`); // IDs cannot by a number, so use this query form + return $(`ngparam-input input[id='${id}']`); // IDs cannot start by a number, so use this query form } getSaveSessionButton() { @@ -221,12 +173,6 @@ export class CalculatorPage { return $$("fixedvar-results var-results table tbody tr"); } - // scrollTo(elt: ElementFinder) { - // browser.controlFlow().execute(function () { - // browser.executeScript("arguments[0].scrollIntoView(true)", elt.getWebElement()); - // }); - // } - getFixedResultsTable() { return $(".fixed-results-inner-container table"); } @@ -246,7 +192,6 @@ export class CalculatorPage { } async isNgParamPresent(id: string) { - // const inp = $("ngparam-input input#" + id); const inp = await this.getNgInputById(id); return await inp.isExisting(); } @@ -256,12 +201,7 @@ export class CalculatorPage { */ async getInputRadioButton(input, mode: string) { const tag = await input.getTagName(); - // this function may not be called with an input but a param-field-line const root = tag === "input" ? await this.findParentContainer(input) : input; - // get parent (div.container) - // const container = ; - // find radio button - // return await root.$(`mat-button-toggle.radio_${mode} > button`); return await root.$(`mat-button-toggle.radio_${mode}`); } @@ -270,34 +210,20 @@ export class CalculatorPage { */ async getInputRadioButtonFromId(id, mode) { const input = await this.getInputById(id); - // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find radio button - // return await container.$(`mat-button-toggle.radio_${mode} > button`); return await this.getInputRadioButton(input, mode); } async inputHasCalcModeButton(input) { - // // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find radio buttons - // const button = await container.$("mat-button-toggle.radio_cal > button"); const button = await this.getInputRadioButton(input, "cal"); return await button.isExisting(); } async inputHasLinkModeButton(input) { - // // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find radio buttons - // const button = container.$("mat-button-toggle.radio_link > button"); const button = await this.getInputRadioButton(input, "link"); return await button.isExisting(); } async isRadioButtonChecked(radio) { - // return (await radio.getAttribute("ng-reflect-checked")) === "true"; - // if (await radio.getTagName() !== "mat-radio-button") { if (await radio.getTagName() !== "mat-button-toggle") { radio = await this.getParentElement(radio); } @@ -309,10 +235,6 @@ export class CalculatorPage { * @returns true if "fixed mode" button linked to an input is selected */ async inputIsInFixedMode(input): Promise<boolean> { - // // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find fixed radio button - // const button = container.$("mat-button-toggle.radio_fix"); const button = await this.getInputRadioButton(input, "fix"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -321,10 +243,6 @@ export class CalculatorPage { * @returns true if "calculated mode" button linked to an input is selected */ async inputIsInCalculatedMode(input): Promise<boolean> { - // // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find calc radio button - // const button = container.$("mat-button-toggle.radio_cal"); const button = await this.getInputRadioButton(input, "cal"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -333,10 +251,6 @@ export class CalculatorPage { * @returns true if "linked mode" button linked to an input is selected */ async inputIsInLinkedMode(input): Promise<boolean> { - // // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find calc radio button - // const button = container.$("mat-button-toggle.radio_link"); const button = await this.getInputRadioButton(input, "link"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -361,11 +275,7 @@ export class CalculatorPage { async presentAndVisible(selector: string) { const elt = await $(selector); - // return (await elt.isExisting()) && (await elt.isDisplayed()); - // console.log("presentAndVisible isExisting", selector, await elt.isExisting()) - // console.log("presentAndVisible isDisplayed", selector, await elt.isDisplayed()) const res = (await elt.isExisting()) && (await elt.isDisplayed()); - // console.log("res", selector, res); return res; } @@ -459,7 +369,6 @@ export class CalculatorPage { async findParentContainer(elt) { let i = 8; // garde fous while (((await elt.getAttribute("class")) !== "container") && (i >= 0)) { - // elt = await elt.$(".."); elt = await this.getParentElement(elt) i--; } @@ -491,12 +400,7 @@ export class CalculatorPage { async setParamMode(elt, mode: string) { await scrollToElement(elt); await browser.pause(100); - // // get parent (div.container) - // const container = await this.findParentContainer(elt); - // // find radio buttons - // const button = await container.$("mat-button-toggle.radio_" + mode + " > button"); const button = await this.getInputRadioButton(elt, mode); - //await scrollPageToTop(); // sometimes button slides behind navbar and click() fails await button.click(); // for "var" mode, close the modal if (mode === "var") { @@ -510,28 +414,6 @@ export class CalculatorPage { } } - async setParamMode2(paramFieldLine, mode: string) { - // await elt.scrollIntoView({ block: 'center', inline: 'center' }); - // await paramFieldLine.waitForDisplayed(); - // await paramFieldLine.scrollIntoView({ block: 'center' }); - - // browser.executeScript("document.querySelector('#countries').scrollIntoView()") - //await browser.execute(e => { e.scrollIntoView({ block: 'center' }) }, paramFieldLine); - await scrollToElement(paramFieldLine); - // await browser.pause(100); - // get parent (div.container) - const button = await paramFieldLine.$("mat-button-toggle.radio_" + mode + " > button"); - //await scrollPageToTop(); // sometimes button slides behind navbar and click() fails - await button.click(); - // for "var" mode, close the modal - if (mode === "var") { - await browser.pause(500); // wait for the modal to appear - //await element(by.css("dialog-edit-param-values .mat-dialog-actions button")).click(); // clique "annuler" et non "valider" : - await $("dialog-edit-param-values .mat-dialog-actions button.mat-warn").click(); - await browser.pause(500); // wait for the navbar to reappear after modal dismissal - } - } - /** * @param elt an <input> element */ @@ -552,7 +434,6 @@ export class CalculatorPage { const values = {}; for (const i of inputs) { const inputId = await i.getAttribute("id"); - // const inputValue = await i.getAttribute("value"); const inputValue = await i.getValue(); values[inputId] = +inputValue; // cast to number to avoid false negative (integers starting with 0) }; @@ -571,7 +452,6 @@ export class CalculatorPage { const isN = id.includes("_N"); // @TODO strengthen this clodo test // Ob in Grille is set to 0.5 but cannot exceed 0.58; do not touch it const isOb = id === "Ob"; - // const value = await i.getAttribute("value"); const value = await i.getValue(); const hasDot = value.includes("."); const hasExponent = value.includes("e"); @@ -593,7 +473,6 @@ export class CalculatorPage { */ async checkEmptyInput(id: string, empty: boolean = true) { const inp = await this.getInputById(id); - // const val = inp.getAttribute("value"); const val = await inp.getValue() if (empty) { expect(val).toEqual(""); @@ -612,7 +491,6 @@ export class CalculatorPage { let n = 0; for (const id of inputIds) { const inp = await this.getInputById(id); - // const txt = await inp.getAttribute("value"); const txt = await inp.getValue(); expect(txt === "").toEqual(emptys[n]); n++; @@ -639,7 +517,6 @@ export class CalculatorPage { } async closeSnackBar() { - // const sb = $(".mat-simple-snackbar-action"); const sb = $("simple-snack-bar button"); if ((await sb.isExisting()) && (await sb.isDisplayed())) { await sb.click(); diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index cd06561de..0fa31f1fe 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -79,9 +79,7 @@ describe("ngHyd − check translation of all calculators", () => { } // check absence of "*** message not found" in whole DOM - // const source = document.body.innerHTML; const source = await browser.execute("return document.body.innerHTML"); - // expect(await browser.getSource()).not.toContain("*** message not found", "missing translations found"); expect(source).not.toContain("*** message not found", "missing translations found"); // empty session diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index 3520cd7d9..b7df34623 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -30,7 +30,6 @@ describe("ngHyd − clone all calculators with all possible <select> values", () await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); await browser.pause(200); - await navBar.clickNewCalculatorButton(); }); @@ -64,12 +63,12 @@ describe("ngHyd − clone all calculators with all possible <select> values", () await scrollPageToTop(); await calcPage.clickCloneCalcButton(); await browser.pause(300); - + // check existence of the cloned module expect(await navBar.getAllCalculatorTabs().length).toBe(2); - + // @TODO check <select> values - + // read all <input> values and compare them to stored ones const cloneValues = await calcPage.storeAllInputValues(); for (const k in cloneValues) { diff --git a/e2e/clone-calc.e2e-spec.ts b/e2e/clone-calc.e2e-spec.ts index f52677838..e6eff73a3 100644 --- a/e2e/clone-calc.e2e-spec.ts +++ b/e2e/clone-calc.e2e-spec.ts @@ -76,11 +76,8 @@ describe("ngHyd − clone a calculator", () => { await browser.pause(500); // 5. compare values - // Object.keys(sourceValues).forEach(async (k) => { - // const v = sourceValues[k]; for (const k in sourceValues) { const v = sourceValues[k]; - // const displayedVal = await calcPage.getInputById(k).getAttribute("value"); const inp = await calcPage.getInputById(k); const displayedVal = await inp.getValue(); expect(displayedVal).toBe("" + v); diff --git a/e2e/examples-empty-fields.e2e-spec.ts b/e2e/examples-empty-fields.e2e-spec.ts index 2c619e644..5c3ea9628 100644 --- a/e2e/examples-empty-fields.e2e-spec.ts +++ b/e2e/examples-empty-fields.e2e-spec.ts @@ -52,10 +52,6 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on it("calculated parameter initial value when discharge law is modified", async () => { await newSession(navBar, sideNav); - // start page - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - // open 1st example const examples = await $$("#examples-list .load-example"); await examples[0].click(); @@ -76,10 +72,7 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on await browser.pause(200); // check input value is not null - // const input = await calcPage.getInputById("initval-input"); - // const underlyingInput = await input.$("#0_h1"); const underlyingInput = await $("ngparam-input input.form-control[id='0_h1']"); - // const txt = await underlyingInput.getAttribute("value"); const txt = await underlyingInput.getValue(); expect(txt === "").toEqual(false); }); @@ -109,10 +102,6 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea it("when calculation is run on a generated fish ladder calculator", async () => { await newSession(navBar, sideNav); - // start page - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - // open 1st example const examples = await $$("#examples-list .load-example"); await examples[0].click(); diff --git a/e2e/helpers/GremlinHelper.ts b/e2e/helpers/GremlinHelper.ts index 434ffd860..99f9c19b6 100644 --- a/e2e/helpers/GremlinHelper.ts +++ b/e2e/helpers/GremlinHelper.ts @@ -18,7 +18,6 @@ function findFpsMessages(log: any[]) { } export function readGremlinsScript(): string { - // return readFileSync(__dirname + "/gremlins.min.js", "UTF-8"); return readFileSync(__dirname + "/gremlins.min.js", "utf-8"); } diff --git a/e2e/link-parallel-devices.e2e-spec.ts b/e2e/link-parallel-devices.e2e-spec.ts index b4d62ae25..5bae9aa32 100644 --- a/e2e/link-parallel-devices.e2e-spec.ts +++ b/e2e/link-parallel-devices.e2e-spec.ts @@ -41,7 +41,6 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( it("when creating Cloisons, devices should be linkable to one another", async () => { await newSession(navBar, sideNav); - // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); await browser.pause(200); const addBtn = await calcPage.getAddStructureButton(); @@ -53,7 +52,6 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( it("when creating Dever, devices should be linkable to one another", async () => { await newSession(navBar, sideNav); - // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(9); await browser.pause(200); const addBtn = await calcPage.getAddStructureButton(); diff --git a/e2e/list.po.ts b/e2e/list.po.ts index 83e65b63e..8572f152d 100644 --- a/e2e/list.po.ts +++ b/e2e/list.po.ts @@ -46,7 +46,6 @@ export class ListPage { async clickMenuEntryForCalcType(type: number) { const but = await $("#create-calc-" + type); return await but.click(); - // await browser.execute(e => { e.click() }, but); // await but.click() fails with "element not interactable" error } async getCalcMenuTextForCalcType(type: number): Promise<string> { diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index 02d856f7f..cb55bcb06 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -84,14 +84,12 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { * nghyd#551 */ const inpZ2 = await calcPage.getInputById("Z2"); - // expect(await inpZ2.getAttribute("value")).toEqual(""); expect(await inpZ2.getValue()).toEqual(""); // const lo_l = calcPage.getSelectById("1_linked_L"); // const lo_lv = await calcPage.getSelectValueText(lo_l); // expect(lo_lv).toContain("Largeur au miroir (Sec. param.)"); const inpL = await calcPage.getInputById("1_L"); - // expect(await inpL.getAttribute("value")).toEqual(""); expect(await inpL.getValue()).toEqual(""); const lo_w = await calcPage.getSelectById("2_linked_W"); @@ -107,7 +105,6 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // const lo_brv = await calcPage.getSelectValueText(lo_br); // expect(lo_brv).toContain("Largeur au miroir (Sec. param.)"); const inpBR = await calcPage.getInputById("BR"); - // expect(await inpBR.getAttribute("value")).toEqual(""); expect(await inpBR.getValue()).toEqual(""); }); }); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 3ddf46ce7..405f779b0 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -79,7 +79,6 @@ describe("ngHyd − save and load sessions", () => { beforeEach(() => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 45 * 60 * 1000; // 45 min - // browser.manage().window().setPosition(2000, 30); }); it("when loading session-6-calc.test.json file from home page, 6 calculators should be loaded", async () => { @@ -113,10 +112,7 @@ describe("ngHyd − save and load sessions", () => { await changeSelectValue(await calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" const inpKs = await calcPage.getInputById("Ks"); - // await inpKs.clearValue(); // coefficient de Strickler - // await browser.pause(200); await inpKs.setValue("42"); - // await browser.pause(200); const filename = await saveSession(); await browser.pause(500); @@ -135,7 +131,6 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(200); const calcTypes = await listPage.getAvailableCalcTypes(); - // const calcTypes = [10]; const excludedCalculators = [ 34, // vérificateur (nécessite d'ouvrir plusieurs calculettes) @@ -170,7 +165,6 @@ describe("ngHyd − save and load sessions", () => { const selects = await calcPage.getAllCalculatorSelects(); const nsel = selects.length; for (let s = 0; s < nsel; s++) { - // const sel = selects.get(s); const sel = selects[s]; const selId = await sel.getAttribute("id"); diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index 3e9d2ceea..f1fa0a1e5 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -18,12 +18,9 @@ export class Navbar { await dropDown.click(); browser.pause(100); const options = await $$(".cdk-overlay-container mat-option"); - // FIXME>>>>await dropDown.sendKeys(protractor.Key.ESCAPE); // close dropdown - //await dropDown.keys('Escape'); // close dropdown await browser.keys(Key.Escape); // close dropdown return options.length; } else { - // return (await $$("#tabs-container button.calculator-button")).length; return (await this.getAllCalculatorTabs()).length; } } @@ -63,9 +60,6 @@ export class Navbar { async clickCalculatorTab(n: number) { const tabs = await this.getAllCalculatorTabs(); - // await (await tabs.n).click(); - - // await tabs[n].click(); await browser.execute(e => { e.click() }, tabs[n]); // await tabs[n].click() fails with "element not interactable" error } @@ -79,7 +73,6 @@ export class Navbar { const l = tabs.length; const r = Math.min((Math.floor(Math.random() * l)), (l - 1)); - //await tabs[r].click(); await browser.execute(e => { e.click() }, tabs[r]); // await tabs[r].click() fails with "element not interactable" error } @@ -89,7 +82,6 @@ export class Navbar { */ async middleClickCalculatorTab(n: number, confirmCloseDialog: boolean = true) { const calcTabs = await this.getAllCalculatorTabs(); - // FIXME>>>> await browser.actions().click(calcTabs.get(n), Button.MIDDLE).perform(); await calcTabs[n].click({ button: 'middle' }); if (confirmCloseDialog) { const btns = await $$("dialog-confirm-close-calc .mat-dialog-actions button"); diff --git a/e2e/navigate-through-calculators.e2e-spec.ts b/e2e/navigate-through-calculators.e2e-spec.ts index 85f0d0c53..6e4e7ae79 100644 --- a/e2e/navigate-through-calculators.e2e-spec.ts +++ b/e2e/navigate-through-calculators.e2e-spec.ts @@ -34,7 +34,6 @@ describe("ngHyd − create calculators and navigate among them", () => { await browser.pause(200); // test all form labels const labels = await calculatorPage.getInputLabels(); - //await labels.each(async (l) => { for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 21b75dac9..acdab5e0b 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -61,10 +61,8 @@ describe("ngHyd − Passe à Bassins", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); const c_Z1 = await calcPage.getInputById("Z1"); - // await c_Z1.clearValue(); await c_Z1.setValue("78.27"); const c_Z2 = await calcPage.getInputById("Z1"); - // await c_Z2.clearValue(); await c_Z2.setValue("74.86"); // PAB - nombre @@ -84,13 +82,10 @@ describe("ngHyd − Passe à Bassins", () => { const d_V = await calcPage.getInputById("V"); await calcPage.setParamMode(d_V, "cal"); const d_Y = await calcPage.getInputById("Y"); - // await d_Y.clearValue(); await d_Y.setValue("1.5"); const d_L = await calcPage.getInputById("L"); - // await d_L.clearValue(); await d_L.setValue("3.100"); const d_W = await calcPage.getInputById("W"); - // await d_W.clearValue(); await d_W.setValue("2.5"); // PAB - puissance dissipée (volume) @@ -118,7 +113,6 @@ describe("ngHyd − Passe à Bassins", () => { const cl_Z1 = await calcPage.getInputById("Z1"); await calcPage.setParamMode(cl_Z1, "link"); const cl_PB = await calcPage.getInputById("PB"); - // await cl_PB.clearValue(); await cl_PB.setValue("1.5"); // calculate Cloisons @@ -135,7 +129,6 @@ describe("ngHyd − Passe à Bassins", () => { await genButton.click(); await browser.pause(1000); const nbBassins = await calcPage.getInputById("generatePabNbBassins"); - // await nbBassins.clearValue(); await nbBassins.setValue("9"); // click "Generate" @@ -167,7 +160,6 @@ describe("ngHyd − Passe à Bassins", () => { await newSession(navBar, sideNav); // create many Cloisons - // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); @@ -176,13 +168,10 @@ describe("ngHyd − Passe à Bassins", () => { // choose one of them and change its parameters await navBar.clickCalculatorTab(1); const Z1 = await calcPage.getInputById("Z1"); - // await Z1.clearValue(); await Z1.setValue("114"); const LB = await calcPage.getInputById("LB"); - // await LB.clearValue(); await LB.setValue("11.5"); const DH = await calcPage.getInputById("DH"); - // await DH.clearValue(); await DH.setValue("0.72"); // calculate Cloisons @@ -198,22 +187,15 @@ describe("ngHyd − Passe à Bassins", () => { await browser.pause(1000); const debit = await calcPage.getInputById("generatePabDebit"); expect(await debit.getValue()).toBe("0.564"); - // await debit.clearValue(); - // await browser.pause(300); // send "1.6" in 3 movements, because "." triggers an error and Angular can't cope with the subsequent keys await debit.setValue("1"); - // await browser.pause(50); await debit.addValue("."); - // await browser.pause(50); await debit.addValue("6"); - // await browser.pause(50); const coteAmont = await calcPage.getInputById("generatePabCoteAmont"); expect(await coteAmont.getValue()).toBe("114"); - // await coteAmont.clearValue(); await coteAmont.setValue("115"); const nbBassins = await calcPage.getInputById("generatePabNbBassins"); expect(await nbBassins.getValue()).toBe("6"); - // await nbBassins.clearValue(); await nbBassins.setValue("5"); // click "Generate" diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index f1dff3784..1abbb2032 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -46,7 +46,6 @@ describe("Check calculated parameter remains the same when copying a structure", // copy 1st structure const copyStruct = await calcPage.getCopyStructureButton(); - // await copyStruct.click(); await browser.execute(e => { e.click() }, copyStruct); // await copyStruct.click() fails with "element not interactable" error await browser.pause(200); diff --git a/e2e/predam-empty-fields.e2e-spec.ts b/e2e/predam-empty-fields.e2e-spec.ts index 0915297ae..66ad0806c 100644 --- a/e2e/predam-empty-fields.e2e-spec.ts +++ b/e2e/predam-empty-fields.e2e-spec.ts @@ -50,7 +50,6 @@ describe("ngHyd − check that predam fields are empty", () => { // check walls inputs const walls = await $$("g.node.wall"); expect(walls.length).toEqual(2); - // await walls.each(async (w) => { for (const w of walls) { await w.click(); await browser.pause(200); @@ -80,13 +79,11 @@ describe("ngHyd − check that predam fields are empty", () => { // check "surface" input is empty let inp = await calcPage.getInputById("3_S"); - // let txt = await inp.getAttribute("value"); let txt = await inp.getValue(); expect(txt).toEqual(""); // check "cote de fond" input is empty inp = await calcPage.getInputById("3_ZF"); - // txt = await inp.getAttribute("value"); txt = await inp.getValue(); expect(txt).toEqual(""); }); @@ -112,14 +109,12 @@ describe("ngHyd − check that predam fields are empty", () => { // check L input is empty inp = await calcPage.getInputById("0_L"); - // txt = await inp.getAttribute("value"); txt = await inp.getValue(); expect(txt).toEqual(""); // check CdWSL input is empty (in this case, the structure happens to be a Larinier weir // which discharge coefficient must be empty) inp = await calcPage.getInputById("0_CdWSL"); - // txt = await inp.getAttribute("value"); txt = await inp.getValue(); expect(txt).toEqual(""); }); diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 85b7b5951..11326ca7b 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -26,8 +26,6 @@ describe("check that low iteration count leads to log messages", () => { }); it("", async () => { - // browser.manage().window().setPosition(2000, 30); - // set low iteration count await prefPage.setIterationCount(5); @@ -35,7 +33,7 @@ describe("check that low iteration count leads to log messages", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); await browser.pause(200); - + // run calculation const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); diff --git a/e2e/preferences.e2e-spec.ts b/e2e/preferences.e2e-spec.ts index 0e09c1128..761ab3ae1 100644 --- a/e2e/preferences.e2e-spec.ts +++ b/e2e/preferences.e2e-spec.ts @@ -23,7 +23,6 @@ describe("ngHyd − preferences page", () => { it("when preferences are open, no label should be empty", async () => { const labels = await page.getInputLabels(); - // await labels.each(async (l) => { for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); @@ -32,10 +31,8 @@ describe("ngHyd − preferences page", () => { it("when preferences are open, no input field should be empty", async () => { const numericFields = await page.getNumericFormFields(); - // await numericFields.each(async (nf) => { for (const nf of numericFields) { const input = await page.getInputForField(nf); - // const val = await input.getAttribute("value"); const val = await input.getValue(); expect(val).toBeTruthy(); }; @@ -43,24 +40,18 @@ describe("ngHyd − preferences page", () => { it("when erroneous values are input, errors should appear", async () => { const numericFields = await page.getNumericFormFields(); - // await numericFields.each(async (nf) => { for (const nf of numericFields) { const inp = await page.getInputForField(nf); // add a letter after the numerical value - // await page.getInputForField(nf).addValue("d"); await inp.addValue("d"); let errorField = await page.getErrorsForField(nf); expect(await errorField.isExisting()).toBe(true); // empty input - // await page.getInputForField(nf).clearValue(); await inp.clearValue(); - // expect(page.getErrorsForField(nf).isExisting()).toBe(true); errorField = await page.getErrorsForField(nf); expect(await errorField.isExisting()).toBe(true); // send bad value - // await page.getInputForField(nf).setValue("50000"); await inp.setValue("50000"); - // expect(page.getErrorsForField(nf).isExisting()).toBe(true); errorField = await page.getErrorsForField(nf); expect(await errorField.isExisting()).toBe(true); }; @@ -68,15 +59,11 @@ describe("ngHyd − preferences page", () => { it("when correct values are input, errors should disappear", async () => { const numericFields = await page.getNumericFormFields(); - // await numericFields.each(async (nf) => { for (const nf of numericFields) { // send correct value const inp = await page.getInputForField(nf); - // await page.getInputForField(nf).clearValue(); - // await page.getInputForField(nf).setValue("1"); await inp.setValue("1"); const errorField = await page.getErrorsForField(nf); - // expect(page.getErrorsForField(nf).isExisting()).toBe(false); expect(await errorField.isExisting()).toBe(false); }; }); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index ea4429794..4a3a5755c 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -82,7 +82,6 @@ export class PreferencesPage { async setIterationCount(n: number) { const input = await this.getInputFromName("nmi"); - // input.clearValue(); await input.setValue(n.toString()); } } diff --git a/e2e/pressure-loss.e2e-spec.ts b/e2e/pressure-loss.e2e-spec.ts index e4d6e530c..1e8d1e21f 100644 --- a/e2e/pressure-loss.e2e-spec.ts +++ b/e2e/pressure-loss.e2e-spec.ts @@ -49,8 +49,6 @@ describe("Pressure loss - ", () => { }); it("Strickler", async () => { - // browser.manage().window().setPosition(2000, 30); - // open "pressure loss" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(35); diff --git a/e2e/reset-param-mode.e2e-spec.ts b/e2e/reset-param-mode.e2e-spec.ts index d5e85ef80..1a1c7ac6f 100644 --- a/e2e/reset-param-mode.e2e-spec.ts +++ b/e2e/reset-param-mode.e2e-spec.ts @@ -17,8 +17,6 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { beforeAll(() => { listPage = new ListPage(); - // navBar = new Navbar(); - // sideNav = new SideNav(); calcPage = new CalculatorPage(); }); @@ -32,13 +30,11 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { await browser.pause(200); // click "calc" radio on Z1 parameter - // const z1calcbtn = await $("#mat-button-toggle-3"); const z1calcbtn = await calcPage.getInputRadioButtonFromId("Z1", "cal"); await z1calcbtn.click(); await browser.pause(200); // click "var" radio on Z1 parameter - // const z1varbtn = await $("#mat-button-toggle-2"); const z1varbtn = await calcPage.getInputRadioButtonFromId("Z1", "var"); await z1varbtn.click(); await browser.pause(200); @@ -49,11 +45,9 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { await browser.pause(500); // check Z1 var toggle is not checked - // expect(await z1varbtn.getASttribute("ng-reflect-checked")).toBe("false"); expect(await calcPage.isRadioButtonChecked(z1varbtn)).toEqual(false); // check Z1 calc toggle is checked - // expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); expect(await calcPage.isRadioButtonChecked(z1calcbtn)).toEqual(true); }); @@ -61,26 +55,19 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { // start page await listPage.navigateTo(); await browser.pause(300); - // await newSession(navBar, sideNav); // open PAB calculator await listPage.clickMenuEntryForCalcType(15); await browser.pause(500); // "fixed" radio on Q parameter - // const qfixbtn = await $("#mat-button-toggle-1"); const qfixbtn = await calcPage.getInputRadioButtonFromId("Q", "fix"); - // await browser.pause(50); // "var" radio on Z1 parameter - // const z1varbtn = await $("#mat-button-toggle-6"); const z1varbtn = await calcPage.getInputRadioButtonFromId("Z1", "var"); - // await browser.pause(50); // "calc" radio on Z1 parameter - // const z1calcbtn = await $("#mat-button-toggle-7"); const z1calcbtn = await calcPage.getInputRadioButtonFromId("Z1", "cal"); - // await browser.pause(50); // click "var" radio on Z1 parameter await z1varbtn.click(); @@ -92,11 +79,9 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { await browser.pause(500); // check Q fix toggle is checked - // expect(await qfixbtn.getAttribute("ng-reflect-checked")).toBe("true"); expect(await calcPage.isRadioButtonChecked(qfixbtn)).toEqual(true); // check Z1 calc toggle is checked - // expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); expect(await calcPage.isRadioButtonChecked(z1calcbtn)).toEqual(true); }); }); diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index 5811449db..210e11a2c 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -32,10 +32,7 @@ describe("Check results are reset after application settings modification - ", ( async function runTestWithParameter(param: string, val1: number, val2: number) { // set starting compute precision const input = await prefPage.getInputFromName(param); - // await input.clearValue(); - // await browser.pause(20); await input.setValue(val1.toString()); - // await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); @@ -59,8 +56,6 @@ describe("Check results are reset after application settings modification - ", ( await browser.pause(200); // modify compute precision - // await input.clearValue(); - // await browser.pause(20); await input.setValue(val2.toString()); await browser.pause(500); diff --git a/e2e/sidenav.po.ts b/e2e/sidenav.po.ts index e7e79bbe2..ab5b15961 100644 --- a/e2e/sidenav.po.ts +++ b/e2e/sidenav.po.ts @@ -23,7 +23,6 @@ export class SideNav { getFileInput() { return $(`dialog-load-session input[type="file"]`); - // return $(`dialog-load-session ngx-mat-file-input`); } getFileLoadButton() { @@ -52,7 +51,6 @@ export class SideNav { async clickNewSessionButton() { const ncb = await this.getNewSessionButton(); - // await browser.pause(200); await ncb.click(); await browser.pause(200); const cb = await this.getConfirmNewSessionButton(); @@ -62,11 +60,7 @@ export class SideNav { async loadSessionFile(file: string, click: boolean = true) { const absolutePath = path.resolve(__dirname, file); const input = await this.getFileInput(); - // await input.click(); - // await scrollToElement(input) - // await input.setValue(absolutePath); await input.addValue(absolutePath); - // await browser.pause(500); if (click) { const btn = await this.getFileLoadButton(); await btn.click(); diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 1aa86e1dd..ee4008a1f 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -47,10 +47,8 @@ describe("Solveur - ", () => { await navBar.clickCalculatorTab(3); // n°3 should be the latest // check input values - // expect(await calcPage.getInputById("Xinit").getAttribute("value")).toBe("0.5"); const inpXinit = await calcPage.getInputById("Xinit"); expect(await inpXinit.getValue()).toBe("0.5"); - // expect(await calcPage.getInputById("Ytarget").getAttribute("value")).toBe("252"); const inpYtarget = await calcPage.getInputById("Ytarget"); expect(await inpYtarget.getValue()).toBe("252"); // check Nub to calculate @@ -86,8 +84,6 @@ describe("Solveur - ", () => { await newSession(navBar, sideNav); // 1. create empty Solveur - // await listPage.clickMenuEntryForCalcType(22); // Solveur - // await browser.pause(500); openCalculator(22, navBar, listPage); // 2. create PAB:Chute, PAB:Nombre and PAB:Puissance linked to one another @@ -274,9 +270,6 @@ describe("Solveur - nghyd#601 with empty fields option", () => { it("check removing and recreating solver with empty fields option does not fill target parameter input", async () => { await newSession(navBar, sideNav); - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); await examples[1].click(); @@ -317,14 +310,6 @@ describe("Solveur - nghyd#601 without empty fields option", () => { sideNav = new SideNav(); }); - // async function openCalculator(id: number) { - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - - // await listPage.clickMenuEntryForCalcType(id); - // await browser.pause(200); - // } - async function openSolver() { await openCalculator(22, navBar, listPage); } @@ -377,9 +362,6 @@ describe("Solveur - nghyd#601 without empty fields option", () => { it("check removing and recreating solver without empty fields option fills inputs", async () => { await newSession(navBar, sideNav); - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); await examples[1].click(); @@ -447,14 +429,6 @@ describe("Solveur - nghyd#606 - a single module cannot be used with solver", () sideNav = new SideNav(); }); - // async function openCalculator(id: number) { - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - - // await listPage.clickMenuEntryForCalcType(id); - // await browser.pause(200); - // } - async function openSolver() { await openCalculator(22, navBar, listPage); } diff --git a/e2e/translation.e2e-spec.ts b/e2e/translation.e2e-spec.ts index 93bcb3f48..d87a45a7b 100644 --- a/e2e/translation.e2e-spec.ts +++ b/e2e/translation.e2e-spec.ts @@ -29,7 +29,6 @@ describe("Check translation", () => { await prefPage.navigateTo(); await prefPage.changeLanguage(1); // fr - // await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); @@ -55,7 +54,6 @@ describe("Check translation", () => { // fixed results variables const frr = await calcPage.getAllFixedResultsRows(); let row0 = frr[0]; - // let lbl1 = await frr.$$("td")[0].getText(); let lbl1 = await row0.$("td").getText(); expect(lbl1).toEqual("Cote amont (m)"); @@ -69,11 +67,6 @@ describe("Check translation", () => { // *** results in english *** // setup -> english - // await navBar.clickMenuButton(); - // await browser.pause(200); - // const setupBtn = await sideNav.getSetupButton(); - // await setupBtn.click(); - // await browser.pause(200); await prefPage.navigateTo(); await prefPage.changeLanguage(0); // en await browser.pause(200); @@ -90,7 +83,6 @@ describe("Check translation", () => { // fixed results variables row0 = frr[0]; - // lbl1 = await frr.$$("td")[0].getText(); lbl1 = await row0.$("td").getText(); expect(lbl1).toEqual("Upstream elevation (m)"); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 6e3d63c2e..ffe2d1806 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -7,8 +7,6 @@ import { ListPage } from './list.po'; * scroll page to make element visible */ export async function scrollToElement(elem) { - // await browser.execute("arguments[0].scrollIntoView({ block: 'center' });", elem); - // await browser.pause(50); await browser.execute(e => { e.scrollIntoView({ block: 'center' }) }, elem); await browser.pause(100); } @@ -18,7 +16,6 @@ export async function scrollToElement(elem) { */ export async function scrollPageToTop() { await browser.execute("window.scrollTo(0, 0);"); - // await browser.scroll(0, 0); } /** diff --git a/e2e/valeurs-erronees.e2e-spec.ts b/e2e/valeurs-erronees.e2e-spec.ts index 5f2ca99b4..2e88357fc 100644 --- a/e2e/valeurs-erronees.e2e-spec.ts +++ b/e2e/valeurs-erronees.e2e-spec.ts @@ -33,11 +33,7 @@ describe("ngHyd - check invalid values are removed - ", () => { // modify W input with invalid value const inputW = await calcPage.getInputById("W"); - // await browser.pause(200); - // await inputW.clearValue(); - // await browser.pause(200); await inputW.setValue("-1"); - // await browser.pause(200); // open another calculator await navBar.clickNewCalculatorButton(); @@ -49,9 +45,7 @@ describe("ngHyd - check invalid values are removed - ", () => { await browser.pause(200); // check invalid value is removed - // const w = await inputW.getAttribute("value"); const w = await inputW.getValue(); - // await browser.pause(200); expect(w).toEqual(""); // check that "compute" button is disabled diff --git a/e2e/variable-param-cancel.e2e-spec.ts b/e2e/variable-param-cancel.e2e-spec.ts index 534e3cc9c..fedb54603 100644 --- a/e2e/variable-param-cancel.e2e-spec.ts +++ b/e2e/variable-param-cancel.e2e-spec.ts @@ -17,7 +17,6 @@ describe("ngHyd - check cancel button for variable parameters - ", () => { }); it("when min/max/list values dialog opens, a cancel button should be present", async () => { - debugger // start page await listPage.navigateTo(); await browser.pause(200); @@ -27,7 +26,6 @@ describe("ngHyd - check cancel button for variable parameters - ", () => { await browser.pause(200); // click "var" radio on Z1 parameter - // const z1btn = $("#mat-button-toggle-2-button"); const z1btn = await calcPage.getInputRadioButtonFromId("Z1", "var"); await z1btn.click(); await browser.pause(300); -- GitLab From 7fcea473a2b67e60843ab3e7e68502579986e7c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 26 Apr 2023 11:18:35 +0200 Subject: [PATCH 249/285] test(e2e): gitlabCI: temporarily enable tests on pushes refs #618 --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 92811cedb..50693bbe4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -72,6 +72,7 @@ install: test: stage: test only: + - pushes - tags - schedules - web -- GitLab From b7a5427eba3f39f35a4d97e03ef5ae2ba1da931a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 28 Apr 2023 15:00:03 +0200 Subject: [PATCH 250/285] chore(e2e): fix e2e tests execution in Docker container refs #618 --- package.json | 6 +++--- wdio.conf.ts | 13 +++++++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 7ae470fe7..bb4e6c97b 100644 --- a/package.json +++ b/package.json @@ -9,16 +9,16 @@ "license": "MIT", "scripts": { "ng": "cd . && \"node_modules/.bin/ng\"", - "postinstall": "./node_modules/.bin/webdriver-manager update --gecko=false --versions.chrome=83.0.4103.39", + "postinstall": "./node_modules/.bin/webdriver-manager update --gecko=false --versions.chrome=107.0.5304.110", "lint": "eslint -c .eslintrc.js --ext .ts src", - "e2e": "npm run preprocess && npm run e2equick", + "e2e": "node scripts/check-translations.js && { npm run start & sleep 60 ; } && ./node_modules/.bin/wdio run ./wdio.conf.ts", "e2equick": "node scripts/check-translations.js && ./node_modules/.bin/wdio run ./wdio.conf.ts", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "bash scripts/prepare_mkdocs.sh; cd build; python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && cd .. && node scripts/mkdocs-postprocess.js", "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 scripts/mkdocs2pdf.py && node scripts/mkdocs2pdf-postprocess.js", "clean": "rm -rf build dist release src/date_revision.ts src/assets/docs", "preprocess": "mkdir -p build; node scripts/preprocessors.js; npm run service-worker-version; bash scripts/fix-chartjs-plugin-zoom-2.0.0.sh", - "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 0.0.0.0 --poll 5000", + "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 127.0.0.1 --poll 5000", "build-no-pdf": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production", "build": "npm run build-href -basehref=/", "build-href": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production --base-href=$npm_config_basehref && npm run mkdocs2pdf", diff --git a/wdio.conf.ts b/wdio.conf.ts index f66acf321..5175e1e84 100644 --- a/wdio.conf.ts +++ b/wdio.conf.ts @@ -61,9 +61,10 @@ export const config: Options.Testrunner = { // Sauce Labs platform configurator - a great tool to configure your capabilities: // https://saucelabs.com/platform/platform-configurator // + // args: ['--headless', '--verbose', '--headless=new', '--verbose', '--no-gpu', '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--remote-debugging-port=9515', '--whitelisted-ips='], capabilities: [{ 'goog:chromeOptions': { - args: ['--headless'], + args: ['--headless', '--no-sandbox', '--disable-setuid-sandbox'], }, // maxInstances can get overwritten per capability. So if you have an in-house Selenium @@ -127,7 +128,15 @@ export const config: Options.Testrunner = { // Services take over a specific job you don't want to take care of. They enhance // your test setup with almost no effort. Unlike plugins, they don't add new // commands. Instead, they hook themselves up into the test process. - services: ['chromedriver'], + // args: ["--verbose", "--whitelisted-ips="] + services: [ + ['chromedriver', + { + chromedriverCustomPath: "/usr/bin/chromedriver", + args: ["--whitelisted-ips=127.0.0.1"] + } + ] + ], // Framework you want to run your specs with. // The following are supported: Mocha, Jasmine, and Cucumber -- GitLab From 40570fcd71de4649cd95f832e9d80efcaa9d4b14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 13:46:26 +0200 Subject: [PATCH 251/285] test(e2e): fix failing tests refs #618 --- e2e/calculate-all-params.e2e-spec.ts | 2 +- e2e/calculate-button-validation.e2e-spec.ts | 12 ++++++------ e2e/calculator.po.ts | 6 +++--- e2e/check-translations.e2e-spec.ts | 2 +- e2e/clone-all-calc.e2e-spec.ts | 1 + e2e/compute-reset-chained-links.e2e-spec.ts | 12 ++++++------ e2e/cote-amont-aval-bief.e2e-spec.ts | 5 +++-- e2e/diagramme-modules.e2e-spec.ts | 2 +- e2e/examples-empty-fields.e2e-spec.ts | 8 ++++---- e2e/list.po.ts | 2 +- e2e/load-linked-params.e2e-spec.ts | 2 +- e2e/load-malformed-files.e2e-spec.ts | 8 ++++---- e2e/load-save-session.e2e-spec.ts | 18 +++++++++++++----- e2e/navbar.po.ts | 2 +- e2e/notes.e2e-spec.ts | 10 +++++----- e2e/pab-cloisons-empty-fields.e2e-spec.ts | 8 ++++---- e2e/pab.e2e-spec.ts | 5 +++-- e2e/remous.e2e-spec.ts | 2 +- e2e/reset-results.e2e-spec.ts | 7 +++++-- e2e/solveur.e2e-spec.ts | 2 +- e2e/util.po.ts | 2 +- wdio.conf.ts | 10 ++++++++-- 22 files changed, 74 insertions(+), 54 deletions(-) diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 744c83877..9b712dac3 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -65,7 +65,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { if (ct === 30 && i > 0) { // prevents "Element is not clickable at point" await scrollPageToTop(); - const inputLink = $("#pb-data-results-selector .drs-item a"); + const inputLink = await $("#pb-data-results-selector .drs-item a"); await inputLink.click(); } // grab input again because calculating the module just refreshed all the fieldsets diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index a0634d81a..537b49f30 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -42,7 +42,7 @@ describe("Calculate button - ", () => { await browser.pause(200); // fill width field with invalid data - const inputW = calcPage.getInputById("W"); + const inputW = await calcPage.getInputById("W"); await inputW.clearValue(); await browser.pause(20); await inputW.setValue("-1"); @@ -77,7 +77,7 @@ describe("Calculate button - ", () => { await browser.pause(200); // Q input - const inputQ = $("#Q"); + const inputQ = await $("#Q"); await inputQ.clearValue(); await browser.pause(200); await inputQ.setValue("-1"); @@ -88,7 +88,7 @@ describe("Calculate button - ", () => { // upstream item // look for g element with id starting by "flowchart-amont-" // Mermaid changed the way ids are generated, it preprends "flowchart-" and appends a number to the id given in the graph description - const upstream = $("g[id^='flowchart-amont-']"); + const upstream = await $("g[id^='flowchart-amont-']"); // should be displayed in error expect(await upstream.getAttribute('class')).toContain("node-highlighted-error"); // upstream item is now selected by default (was 'node-error') }); @@ -103,17 +103,17 @@ describe("Calculate button - ", () => { await browser.pause(200); // "add basin" button - const addBasinBtn = $("#add-basin"); + const addBasinBtn = await $("#add-basin"); await addBasinBtn.click(); await browser.pause(200); // upstream item - const upstream = $("g[id^='flowchart-amont-']"); // Mermaid generated id + const upstream = await $("g[id^='flowchart-amont-']"); // Mermaid generated id await upstream.click(); await browser.pause(200); // invalid data in Q input - const inputQ = $("#Q"); + const inputQ = await $("#Q"); await inputQ.clearValue(); await browser.pause(200); await inputQ.setValue("-1"); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 845251555..3e0ce126b 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -44,7 +44,7 @@ export class CalculatorPage { if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); - const options = $$(".cdk-overlay-container mat-option"); + const options = await $$(".cdk-overlay-container mat-option"); await browser.keys(Key.Escape); // close dropdown return await options.length; } @@ -101,7 +101,7 @@ export class CalculatorPage { } async isMatSelectPresent(id: string) { - const sel = $("mat-select#" + id); + const sel = await $("mat-select#" + id); return await sel.isExisting(); } @@ -517,7 +517,7 @@ export class CalculatorPage { } async closeSnackBar() { - const sb = $("simple-snack-bar button"); + const sb = await $("simple-snack-bar button"); if ((await sb.isExisting()) && (await sb.isDisplayed())) { await sb.click(); return true; diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index 0fa31f1fe..97f01714a 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -67,7 +67,7 @@ describe("ngHyd − check translation of all calculators", () => { // just click the "compute" button with default values // check that "compute" button is active - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); const disabledState = await calcButton.getAttribute("disabled"); if (!disabledState) { // click "compute" button diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index b7df34623..290067e9a 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -28,6 +28,7 @@ describe("ngHyd − clone all calculators with all possible <select> values", () beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); await browser.pause(200); await navBar.clickNewCalculatorButton(); diff --git a/e2e/compute-reset-chained-links.e2e-spec.ts b/e2e/compute-reset-chained-links.e2e-spec.ts index 73b01da87..1f87a7ad3 100644 --- a/e2e/compute-reset-chained-links.e2e-spec.ts +++ b/e2e/compute-reset-chained-links.e2e-spec.ts @@ -43,7 +43,7 @@ describe("ngHyd − compute then reset chained results − ", () => { await navBar.clickCalculatorTabForUid("Y2l2Y3"); // click "compute" button - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); @@ -92,7 +92,7 @@ describe("ngHyd − compute then reset chained results − ", () => { // load session file await startPage.navigateTo(); await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-cascade-results.json"); @@ -103,7 +103,7 @@ describe("ngHyd − compute then reset chained results − ", () => { await navBar.clickCalculatorTabForUid("eHh5YX"); // click "compute" button - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); @@ -143,7 +143,7 @@ describe("ngHyd − compute then reset chained results − ", () => { // load session file await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-results-invalidation.json"); @@ -154,7 +154,7 @@ describe("ngHyd − compute then reset chained results − ", () => { await navBar.clickCalculatorTabForUid("amd2OG"); // click "compute" button - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); const hasResults = await calcPage.hasResults(); @@ -174,7 +174,7 @@ describe("ngHyd − compute then reset chained results − ", () => { // calculate the upmost module await navBar.clickCalculatorTabForUid("aTgwMm"); - const calcButton2 = calcPage.getCalculateButton(); + const calcButton2 = await calcPage.getCalculateButton(); await calcButton2.click(); await browser.pause(200); diff --git a/e2e/cote-amont-aval-bief.e2e-spec.ts b/e2e/cote-amont-aval-bief.e2e-spec.ts index cee4caaee..4e2521c53 100644 --- a/e2e/cote-amont-aval-bief.e2e-spec.ts +++ b/e2e/cote-amont-aval-bief.e2e-spec.ts @@ -32,11 +32,12 @@ describe("ngHyd − up/downstream elevations of a reach", () => { it("check hydraulic details availability - flow calculation", async () => { // open "up/downstream elevations of a reach" calculator await navBar.clickNewCalculatorButton(); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(21); await browser.pause(200); // set upstream flow in calculate mode - const flowCalcBtn = $( + const flowCalcBtn = await $( "//field-set[4]/mat-card-content/param-field-line[1]/div/div[2]/mat-button-toggle-group/mat-button-toggle[3]" ); await flowCalcBtn.click(); @@ -53,7 +54,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await upWEinput.setValue("100.664"); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(300); diff --git a/e2e/diagramme-modules.e2e-spec.ts b/e2e/diagramme-modules.e2e-spec.ts index 4d523a2bb..5d2adae7f 100644 --- a/e2e/diagramme-modules.e2e-spec.ts +++ b/e2e/diagramme-modules.e2e-spec.ts @@ -44,7 +44,7 @@ describe("modules diagram", () => { // open modules diagram await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickDiagramButton(); await browser.pause(200); diff --git a/e2e/examples-empty-fields.e2e-spec.ts b/e2e/examples-empty-fields.e2e-spec.ts index 5c3ea9628..613472d64 100644 --- a/e2e/examples-empty-fields.e2e-spec.ts +++ b/e2e/examples-empty-fields.e2e-spec.ts @@ -105,21 +105,21 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea // open 1st example const examples = await $$("#examples-list .load-example"); await examples[0].click(); - await browser.pause(50); + await browser.pause(500); // select wall module await navBar.openNthCalculator(4); - await browser.pause(50); + await browser.pause(200); // run calculation const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); - await browser.pause(200); + await browser.pause(500); // click "generate PAB" button const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); - await browser.pause(1000); + await browser.pause(2000); // write "6" in basin count input const nbBassins = await calcPage.getInputById("generatePabNbBassins"); diff --git a/e2e/list.po.ts b/e2e/list.po.ts index 8572f152d..13c0ed92b 100644 --- a/e2e/list.po.ts +++ b/e2e/list.po.ts @@ -49,7 +49,7 @@ export class ListPage { } async getCalcMenuTextForCalcType(type: number): Promise<string> { - const but = $("#create-calc-" + type); + const but = await $("#create-calc-" + type); return but.getText(); } } diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index cb55bcb06..22671e1ab 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -36,7 +36,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { it("when loading session-liens-spaghetti.json, all links should point to the right target", async () => { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); diff --git a/e2e/load-malformed-files.e2e-spec.ts b/e2e/load-malformed-files.e2e-spec.ts index 344f4102a..708332a39 100644 --- a/e2e/load-malformed-files.e2e-spec.ts +++ b/e2e/load-malformed-files.e2e-spec.ts @@ -32,7 +32,7 @@ describe("ngHyd − load malformed session files − ", () => { it("when loading session-bad-syntax.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); @@ -44,7 +44,7 @@ describe("ngHyd − load malformed session files − ", () => { it("when loading session-missing-info.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); @@ -56,7 +56,7 @@ describe("ngHyd − load malformed session files − ", () => { it("when loading session-empty-modules-list.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); @@ -68,7 +68,7 @@ describe("ngHyd − load malformed session files − ", () => { it("when loading session-format-too-old.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 405f779b0..0272104a5 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -56,7 +56,7 @@ async function saveSession(): Promise<string> { async function loadSession(path: string) { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); @@ -134,6 +134,7 @@ describe("ngHyd − save and load sessions", () => { const excludedCalculators = [ 34, // vérificateur (nécessite d'ouvrir plusieurs calculettes) + 35 // pressureloss : le select de loi de perte de charge détermine la présence d'un 2ème select (Lechapt -> matériau) (non géré pour l'instant) ]; for (let i = 0; i < calcTypes.length; i++) { @@ -152,7 +153,7 @@ describe("ngHyd − save and load sessions", () => { else { // empty session await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickNewSessionButton(); await browser.pause(200); } @@ -162,7 +163,7 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(200); // detect selects - const selects = await calcPage.getAllCalculatorSelects(); + let selects = await calcPage.getAllCalculatorSelects(); const nsel = selects.length; for (let s = 0; s < nsel; s++) { const sel = selects[s]; @@ -171,7 +172,7 @@ describe("ngHyd − save and load sessions", () => { const options = await calcPage.getMatselectOptionsText(sel); const optionCount = options.length; - if (optionCount > 0) { + if (optionCount > 1) { // we need at least 2 options to be able to modify select // index of current selected option const optTxt = await calcPage.getMatselectCurrentOptionText(sel); const ind = options.indexOf(optTxt); @@ -186,7 +187,7 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(500); // load session - await loadSession(filename); // bug here : the click on the menu button (top left) takes 40s to take effect and open the side nav!) + await loadSession(filename); await browser.pause(500); // the displayed calculator is now the loaded one @@ -209,6 +210,13 @@ describe("ngHyd − save and load sessions", () => { expectNumber(`calc ${ct} select ${selId} : num calcs(2)`, await navbar.getCalculatorEntriesCount(), 1); deleteDownloadedFile(filename); + + // get selects once again since page has been replaced (session load) + selects = await calcPage.getAllCalculatorSelects(); + + // restore select previous option, other selects presence may depend on it (eg. pressure loss calculator) + await changeSelectValue(selects[s], ind); + await browser.pause(200); } } } diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index f1fa0a1e5..7e8015532 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -31,7 +31,7 @@ export class Navbar { */ async openNthCalculator(n: number) { // if dropDown calculators select is visible - const dropDown = $("mat-select#selectCalculator"); + const dropDown = await $("mat-select#selectCalculator"); if ((await dropDown.isExisting()) && (await dropDown.isDisplayed())) { await dropDown.click(); diff --git a/e2e/notes.e2e-spec.ts b/e2e/notes.e2e-spec.ts index 9704016ec..de60a26f2 100644 --- a/e2e/notes.e2e-spec.ts +++ b/e2e/notes.e2e-spec.ts @@ -19,7 +19,7 @@ describe("check calculator notes", () => { it(" - notes should display properly when opened from a calculator", async () => { await startPage.navigateTo(); - await browser.pause(200); + await browser.pause(500); // open PAB: chute calculator await listPage.clickMenuEntryForCalcType(12); @@ -27,7 +27,7 @@ describe("check calculator notes", () => { // open notes await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickNotesButton(); await browser.pause(200); @@ -55,7 +55,7 @@ describe("check calculator notes", () => { it(" - notes should display properly when opened from modules diagram", async () => { await startPage.navigateTo(); - await browser.pause(200); + await browser.pause(500); // open PAB: chute calculator await listPage.clickMenuEntryForCalcType(12); @@ -63,7 +63,7 @@ describe("check calculator notes", () => { // open notes await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickNotesButton(); await browser.pause(200); @@ -75,7 +75,7 @@ describe("check calculator notes", () => { // open modules diagram await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickDiagramButton(); await browser.pause(200); diff --git a/e2e/pab-cloisons-empty-fields.e2e-spec.ts b/e2e/pab-cloisons-empty-fields.e2e-spec.ts index 8f1d76c55..81e107f2b 100644 --- a/e2e/pab-cloisons-empty-fields.e2e-spec.ts +++ b/e2e/pab-cloisons-empty-fields.e2e-spec.ts @@ -15,7 +15,7 @@ async function enableEmptyFieldsOption(prefPage: PreferencesPage) { } async function fillInput(calcPage: CalculatorPage, symbol: string) { - const inp = calcPage.getInputById(symbol); + const inp = await calcPage.getInputById(symbol); await inp.clearValue(); await inp.setValue("1"); } @@ -59,12 +59,12 @@ describe("ngHyd - check the cross walls calculator has empty fields - ", () => { await fillInput(calcPage, "0_CdWSL"); // calculate - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); // click "generate PAB" button - const genButton = calcPage.getGeneratePabButton(); + const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); await browser.pause(1000); @@ -110,7 +110,7 @@ describe("ngHyd - check the cross walls calculator has no empty field - ", () => await fillInput(calcPage, "0_CdWSL"); // calculate - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index acdab5e0b..8e56d0e83 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -229,7 +229,7 @@ describe("ngHyd − Passe à Bassins", () => { await startPage.navigateTo(); // load await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickLoadSessionButton(); await browser.pause(200); await sideNav.loadSessionFile("./session/session-pab-complete.json"); @@ -265,9 +265,10 @@ describe("ngHyd − Passe à Bassins", () => { describe("load regulated variated PAB with calc errors - ", () => { it("should display logs", async () => { await startPage.navigateTo(); + await browser.pause(500); // load await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickLoadSessionButton(); await browser.pause(200); await sideNav.loadSessionFile("./session/session-pab-regulee-variee.json"); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index fb2b14b63..d75b16815 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -87,7 +87,7 @@ describe("ngHyd − remous", () => { it("Check that calculation with dx >= reach length fails", async () => { // load backwater curve session file with Dx>=Long await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-remous-dx-bief.json"); diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index 210e11a2c..175af9a9b 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -32,17 +32,19 @@ describe("Check results are reset after application settings modification - ", ( async function runTestWithParameter(param: string, val1: number, val2: number) { // set starting compute precision const input = await prefPage.getInputFromName(param); + await input.clearValue(); await input.setValue(val1.toString()); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(12); await browser.pause(200); // click "compute" button const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); - await browser.pause(200); + await browser.pause(500); // results should be here let hasResults = await calcPage.hasResults(); @@ -50,8 +52,9 @@ describe("Check results are reset after application settings modification - ", ( // reopen settings await navBar.clickMenuButton(); + await browser.pause(500); + const setupBtn = await sideNav.getSetupButton(); await browser.pause(200); - const setupBtn = sideNav.getSetupButton(); await setupBtn.click(); await browser.pause(200); diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index ee4008a1f..ddfb70e76 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -35,7 +35,7 @@ describe("Solveur - ", () => { it("load > calculate", async () => { await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickLoadSessionButton(); await browser.pause(200); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index ffe2d1806..424cca260 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -51,7 +51,7 @@ export async function newSession(navBar: Navbar, sideNav: SideNav) { const tabs = await navBar.getAllCalculatorTabs(); if (tabs.length > 0) { await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickNewSessionButton(); await browser.pause(200); // après ça, le bouton "#new-calculator" est absent diff --git a/wdio.conf.ts b/wdio.conf.ts index 5175e1e84..f6714da3c 100644 --- a/wdio.conf.ts +++ b/wdio.conf.ts @@ -61,12 +61,18 @@ export const config: Options.Testrunner = { // Sauce Labs platform configurator - a great tool to configure your capabilities: // https://saucelabs.com/platform/platform-configurator // - // args: ['--headless', '--verbose', '--headless=new', '--verbose', '--no-gpu', '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--remote-debugging-port=9515', '--whitelisted-ips='], + // args: [ '--verbose', '--verbose', '--no-gpu', '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--remote-debugging-port=9515', '--whitelisted-ips='], capabilities: [{ 'goog:chromeOptions': { - args: ['--headless', '--no-sandbox', '--disable-setuid-sandbox'], + args: [ + '--headless', + '--no-sandbox', '--disable-setuid-sandbox', 'disable-dev-shm-usage'], }, + // headless=chrome : Chrome < 109 + // headless=new : Chrome >= 109 + // disable-dev-shm-usage : évite les messages "session deleted because of page crash", cf. https://stackoverflow.com/questions/53902507/unknown-error-session-deleted-because-of-page-crash-from-unknown-error-cannot + // maxInstances can get overwritten per capability. So if you have an in-house Selenium // grid with only 5 firefox instances available you can make sure that not more than // 5 instances get started at a time. -- GitLab From 423362b2d291a5451676ad331de680103d1ec3c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 14:36:48 +0200 Subject: [PATCH 252/285] fix(e2e): increase time allocated to compilation phase refs #618 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bb4e6c97b..41d9d7f0a 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "ng": "cd . && \"node_modules/.bin/ng\"", "postinstall": "./node_modules/.bin/webdriver-manager update --gecko=false --versions.chrome=107.0.5304.110", "lint": "eslint -c .eslintrc.js --ext .ts src", - "e2e": "node scripts/check-translations.js && { npm run start & sleep 60 ; } && ./node_modules/.bin/wdio run ./wdio.conf.ts", + "e2e": "node scripts/check-translations.js && { npm run start & sleep 180 ; } && ./node_modules/.bin/wdio run ./wdio.conf.ts", "e2equick": "node scripts/check-translations.js && ./node_modules/.bin/wdio run ./wdio.conf.ts", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "bash scripts/prepare_mkdocs.sh; cd build; python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && cd .. && node scripts/mkdocs-postprocess.js", -- GitLab From cdccaf104152ca74c5e9933c810920a95fecd29e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 15:04:24 +0200 Subject: [PATCH 253/285] refactor(e2e): migrate commit 652f8631 (#614) refs #618 --- e2e/load-save-session.e2e-spec.ts | 20 +++++--------------- e2e/util.po.ts | 13 +++++++++++++ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 0272104a5..b8fb8a83e 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -4,7 +4,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, expectNumber } from "./util.po"; +import { changeSelectValue, expectNumber, loadSession } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' const fs = require("fs"); @@ -54,16 +54,6 @@ async function saveSession(): Promise<string> { return findDownloadedFile(sessionFile); } -async function loadSession(path: string) { - await navbar.clickMenuButton(); - await browser.pause(500); - - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - - await sidenav.loadSessionFile(path); -} - /** * Save and load (serialise and unserialise) calculators to/from JSON files */ @@ -84,7 +74,7 @@ describe("ngHyd − save and load sessions", () => { it("when loading session-6-calc.test.json file from home page, 6 calculators should be loaded", async () => { await startPage.navigateTo(); - await loadSession("./session/session-6-calc.test.json"); + await loadSession(navbar, sidenav, "./session/session-6-calc.test.json"); await browser.pause(1000); expect(await navbar.getAllCalculatorTabs().length).toBe(6); @@ -93,7 +83,7 @@ describe("ngHyd − save and load sessions", () => { it("when loading session-optional-params.test.json file from home page, the calculator should be loaded", async () => { await startPage.navigateTo(); - await loadSession("./session/session-optional-params.test.json"); + await loadSession(navbar, sidenav, "./session/session-optional-params.test.json"); await browser.pause(200); expect(await navbar.getAllCalculatorTabs().length).toBe(1); @@ -187,7 +177,7 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(500); // load session - await loadSession(filename); + await loadSession(navbar, sidenav, filename); await browser.pause(500); // the displayed calculator is now the loaded one @@ -213,7 +203,7 @@ describe("ngHyd − save and load sessions", () => { // get selects once again since page has been replaced (session load) selects = await calcPage.getAllCalculatorSelects(); - + // restore select previous option, other selects presence may depend on it (eg. pressure loss calculator) await changeSelectValue(selects[s], ind); await browser.pause(200); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 424cca260..4acf0e303 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -71,3 +71,16 @@ export async function openCalculator(id: number, navBar: Navbar, listPage: ListP await listPage.clickMenuEntryForCalcType(id); await browser.pause(200); } + +/** + * load a session from JSON file + */ +export async function loadSession(navbar: Navbar, sideNav: SideNav, path: string) { + await navbar.clickMenuButton(); + await browser.pause(200); + + await sideNav.clickLoadSessionButton(); + await browser.pause(200); + + await sideNav.loadSessionFile(path); +} -- GitLab From 9da30e226ddee22165f69b4ad039a7e3e5d53774 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 15:20:15 +0200 Subject: [PATCH 254/285] refactor(e2e): migrate commit 80e36eb0 (#614) refs #618 --- e2e/calculator.po.ts | 11 ++++ e2e/parallel-structures.e2e-spec.ts | 50 ++++++++++++++++++- .../session-erreur-ennoiement-614.json | 1 + 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 e2e/session/session-erreur-ennoiement-614.json diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 3e0ce126b..7399ae786 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -343,6 +343,17 @@ export class CalculatorPage { return await $$("log-entry").length; } + /** + * return true if the nth log entry is an error + */ + async nthLogEntryIsError(n: number) { + const errs = await $$("log-entry"); + const e = errs[n]; + const icon = await e.$("div mat-icon"); + const style = await icon.getAttribute("style"); + return style.indexOf("color: red;") !== -1; + } + async clickSaveCalcButton() { await scrollPageToTop(); return await $("#save-calc").click(); diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index 1abbb2032..54ebb0295 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -2,19 +2,26 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { AppPage } from "./app.po"; +import { loadSession } from "./util.po"; +import { SideNav } from "./sidenav.po"; import { browser, $, $$, expect } from '@wdio/globals' -describe("Check calculated parameter remains the same when copying a structure", () => { +describe("Parallel structures - ", () => { + let startPage: AppPage; let listPage: ListPage; let navBar: Navbar; let calcPage: CalculatorPage; let prefPage: PreferencesPage; + let sideNav: SideNav; beforeAll(() => { + startPage = new AppPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -24,7 +31,7 @@ describe("Check calculated parameter remains the same when copying a structure", await browser.pause(200); }); - it("", async () => { + it("check calculated parameter remains the same when copying a structure", async () => { // open "fish ladder: cross walls" calculator await navBar.clickNewCalculatorButton(); await browser.pause(200); @@ -59,4 +66,43 @@ describe("Check calculated parameter remains the same when copying a structure", const L2 = await calcPage.getInputById("1_L"); expect(await calcPage.inputIsInFixedMode(L2)).toBe(true); }); + + //TODO à réactiver après fusion de #618 dans devel + xit("check submergence error", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + await loadSession(navBar, sideNav, "./session/session-erreur-ennoiement-614.json"); + await browser.pause(1000); + + // first calculator + + await navBar.clickCalculatorTab(0); + await browser.pause(200); + + // run calculation + let btnCalc = await calcPage.getCalculateButton(); + await btnCalc.click(); + await browser.pause(500); + + // check error message in log + expect(await calcPage.nbLogEntries()).toBe(1); + + expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + + // second calculator + + await navBar.clickCalculatorTab(1); + await browser.pause(200); + + // run calculation + btnCalc = await calcPage.getCalculateButton(); + await btnCalc.click(); + await browser.pause(500); + + // check error message in log + expect(await calcPage.nbLogEntries()).toBe(1); + + expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + }); }); diff --git a/e2e/session/session-erreur-ennoiement-614.json b/e2e/session/session-erreur-ennoiement-614.json new file mode 100644 index 000000000..e0a38e6b2 --- /dev/null +++ b/e2e/session/session-erreur-ennoiement-614.json @@ -0,0 +1 @@ +{"header":{"source":"jalhyd","format_version":"1.3","created":"2023-04-03T12:18:32.015Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"cTl6aT","props":{"calcType":"Cloisons","nullparams":false},"meta":{"title":"Cloisons"},"children":[{"uid":"NWllMn","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"h1","mode":"SINGLE","value":1},{"symbol":"L","mode":"SINGLE","value":0.2},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]}],"parameters":[{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"LB","mode":"SINGLE","value":10},{"symbol":"BB","mode":"SINGLE","value":1},{"symbol":"PB","mode":"SINGLE","value":1},{"symbol":"DH","mode":"SINGLE","value":0.6}]},{"uid":"bW4wZz","props":{"calcType":"ParallelStructure","nullparams":false},"meta":{"title":"Ouvrages"},"children":[{"uid":"anFpeG","props":{"calcType":"Structure","loiDebit":"WeirSubmerged","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"CdWS","mode":"SINGLE","value":0.9}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":14.647},{"symbol":"Z1","mode":"CALCUL","value":103},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]} -- GitLab From cbcc15791d0ec546ddf654315cae54d76f65828d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 15:31:05 +0200 Subject: [PATCH 255/285] refactor(e2e): migrate commit 19dc09ea (#609) refs #618 --- e2e/macrorugo-remous.e2e-spec.ts | 60 ++++++++++++++++++++++++++++++++ e2e/util.po.ts | 7 ++++ 2 files changed, 67 insertions(+) create mode 100644 e2e/macrorugo-remous.e2e-spec.ts diff --git a/e2e/macrorugo-remous.e2e-spec.ts b/e2e/macrorugo-remous.e2e-spec.ts new file mode 100644 index 000000000..f9dea9fd0 --- /dev/null +++ b/e2e/macrorugo-remous.e2e-spec.ts @@ -0,0 +1,60 @@ +import { ListPage } from "./list.po"; +import { PreferencesPage } from "./preferences.po"; +import { Navbar } from "./navbar.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { isElementDisplayed } from "./util.po"; + +//TODO à réactiver après fusion de #618 dans devel +xdescribe("MacroRugoRemous - ", () => { + let prefPage: PreferencesPage; + let listPage: ListPage; + let navBar: Navbar; + + beforeAll(() => { + prefPage = new PreferencesPage(); + listPage = new ListPage(); + navBar = new Navbar(); + }); + + beforeEach(async () => { + // disable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await browser.pause(200); + await prefPage.disableEvilEmptyFields(); + await browser.pause(200); + }); + + it("check select empty message is present when no PAM is in the session", async () => { + // start page + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + // MacroRugoRemous calculator + await listPage.clickMenuEntryForCalcType(37); + browser.pause(200); + + // const emptyMsg = element(by.css("div .message-when-empty")); + const emptyMsg = await $("div .message-when-empty"); + expect(await isElementDisplayed(emptyMsg)).toBe(true); + }); + + it("check select empty message is not present when a PAM exists in the session", async () => { + // start page + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + // PAM calculator + await listPage.clickMenuEntryForCalcType(11); + browser.pause(200); + + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + // MacroRugoRemous calculator + await listPage.clickMenuEntryForCalcType(37); + browser.pause(200); + + const emptyMsg = $("div .message-when-empty"); + expect(await isElementDisplayed(emptyMsg)).toBe(false); + }); +}); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 4acf0e303..04f8564f9 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -84,3 +84,10 @@ export async function loadSession(navbar: Navbar, sideNav: SideNav, path: string await sideNav.loadSessionFile(path); } + +/** + * @returns true if an element exists and is displayed + */ +export async function isElementDisplayed(element) { + return await element.isExisting() && await element.isDisplayed(); +} -- GitLab From 93d413a9f633a656ab8aa1f8c85d916f93567e8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 15:39:06 +0200 Subject: [PATCH 256/285] refactor(e2e): migrate commit c93a6e1f (#609) refs #618 --- e2e/macrorugo-remous.e2e-spec.ts | 48 ++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/e2e/macrorugo-remous.e2e-spec.ts b/e2e/macrorugo-remous.e2e-spec.ts index f9dea9fd0..d2c17b03b 100644 --- a/e2e/macrorugo-remous.e2e-spec.ts +++ b/e2e/macrorugo-remous.e2e-spec.ts @@ -3,17 +3,20 @@ import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; import { browser, $, $$, expect } from '@wdio/globals' import { isElementDisplayed } from "./util.po"; +import { CalculatorPage } from "./calculator.po"; //TODO à réactiver après fusion de #618 dans devel xdescribe("MacroRugoRemous - ", () => { let prefPage: PreferencesPage; let listPage: ListPage; let navBar: Navbar; + let calcPage: CalculatorPage; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); + calcPage = new CalculatorPage(); }); beforeEach(async () => { @@ -57,4 +60,49 @@ xdescribe("MacroRugoRemous - ", () => { const emptyMsg = $("div .message-when-empty"); expect(await isElementDisplayed(emptyMsg)).toBe(false); }); + + it("check select error message when target PAM has no variated parameter", async () => { + // start page + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + // PAM calculator + await listPage.clickMenuEntryForCalcType(11); + browser.pause(200); + + // MacroRugoRemous calculator + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + await listPage.clickMenuEntryForCalcType(37); + browser.pause(200); + + const errorMsg = await $("div .select-error-message"); + expect(await isElementDisplayed(errorMsg)).toBe(false); + }); + + it("check select error message when target PAM has a variated parameter", async () => { + // start page + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + // PAM calculator + await listPage.clickMenuEntryForCalcType(11); + browser.pause(200); + + // set ZF1 to variated mode + const zf1 = await calcPage.getInputById("ZF1"); + await calcPage.setParamMode(zf1, "var"); + await browser.pause(200); + + // MacroRugoRemous calculator + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + await listPage.clickMenuEntryForCalcType(37); + browser.pause(200); + + const errorMsg = await $("div .select-error-message"); + expect(await isElementDisplayed(errorMsg)).toBe(true); + }); }); -- GitLab From 90e3d8e01823986b6bf604da56d54ff2fd333c7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 11 May 2023 10:01:13 +0200 Subject: [PATCH 257/285] fix(e2e): migrate predams test to WebdriverIO refs #618 --- e2e/prebarrages-results.e2e-spec.ts | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/e2e/prebarrages-results.e2e-spec.ts b/e2e/prebarrages-results.e2e-spec.ts index e7af14868..09c79d23b 100644 --- a/e2e/prebarrages-results.e2e-spec.ts +++ b/e2e/prebarrages-results.e2e-spec.ts @@ -1,11 +1,9 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; -import { AppPage } from "./app.po"; -import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { scrollToElement } from "./util.po"; /** * Clone calculators @@ -27,26 +25,31 @@ describe("Prébarrages results - ", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("every module shoud have results", async () => { // create prébarrage calculator await navBar.clickNewCalculatorButton(); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(30); + await browser.pause(200); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); - const nodes = element.all(by.css("g.nodes > g")); - const nb = await nodes.count(); + const nodes = await $$("g.nodes > g"); + const nb = nodes.length; for (let n = 0; n < nb; n++) { - const node = nodes.get(n); + const node = nodes[n]; + await scrollToElement(node); + await browser.pause(100); await node.click(); - await browser.sleep(200); + await browser.pause(200); // check that result is not empty const hasResults = await calcPage.hasResults(); -- GitLab From 33189f53487edeea840f76ca11ea12e294d6b419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 11 May 2023 10:01:40 +0200 Subject: [PATCH 258/285] refactor(e2e): use loadSession() where possible refs #618 --- e2e/calculate-linked-params.e2e-spec.ts | 19 +++++--------- e2e/compute-reset-chained-links.e2e-spec.ts | 23 +++------------- e2e/load-linked-params.e2e-spec.ts | 10 ++----- e2e/load-malformed-files.e2e-spec.ts | 29 ++++----------------- e2e/pab.e2e-spec.ts | 17 +++--------- e2e/remous.e2e-spec.ts | 9 ++----- e2e/solveur.e2e-spec.ts | 11 ++------ e2e/util.po.ts | 9 ++++--- 8 files changed, 31 insertions(+), 96 deletions(-) diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index 557484db9..2f998ebd4 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, newSession } from "./util.po"; +import { changeSelectValue, loadSession, newSession } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -234,12 +234,10 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − multiple variated parameters, including a linked one (#253)", async () => { // load session file await navBar.clickNewCalculatorButton(); - await navBar.clickMenuButton(); await browser.pause(200); - await sideNav.clickLoadSessionButton(); - await browser.pause(200); - await sideNav.loadSessionFile("./session/session-multivar-link.json"); - await browser.pause(500); + + await loadSession(navBar, sideNav, "./session/session-multivar-link.json"); + expect(await navBar.getAllCalculatorTabs().length).toBe(2); // calculate @@ -270,13 +268,10 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − bug nghyd#329 : unexpected ERR in results table", async () => { await navBar.clickNewCalculatorButton(); - // load session - await navBar.clickMenuButton(); - await browser.pause(200); - await sideNav.clickLoadSessionButton(); - await browser.pause(200); - await sideNav.loadSessionFile("./session/session-pab-chain-nghyd-329.json"); await browser.pause(200); + + // load session + await loadSession(navBar, sideNav, "./session/session-pab-chain-nghyd-329.json"); expect(await navBar.getAllCalculatorTabs().length).toBe(3); // calculate PAB-Dimensions diff --git a/e2e/compute-reset-chained-links.e2e-spec.ts b/e2e/compute-reset-chained-links.e2e-spec.ts index 1f87a7ad3..e0577d246 100644 --- a/e2e/compute-reset-chained-links.e2e-spec.ts +++ b/e2e/compute-reset-chained-links.e2e-spec.ts @@ -4,7 +4,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' -import { newSession } from "./util.po"; +import { loadSession, newSession } from "./util.po"; /** * Load a session containing 3 calculators, having linked parameters @@ -31,12 +31,7 @@ describe("ngHyd − compute then reset chained results − ", () => { it("when loading session-cascade-params.json, computation should not be chained, but results reset should be", async () => { // load session file await startPage.navigateTo(); - await navBar.clickMenuButton(); - await browser.pause(200); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - await sidenav.loadSessionFile("./session/session-cascade-params.json"); - await browser.pause(500); + await loadSession(navBar, sidenav, "./session/session-cascade-params.json"); expect(await navBar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module @@ -91,12 +86,7 @@ describe("ngHyd − compute then reset chained results − ", () => { it("when loading session-cascade-results.json, computation and results reset should be chained", async () => { // load session file await startPage.navigateTo(); - await navBar.clickMenuButton(); - await browser.pause(500); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - await sidenav.loadSessionFile("./session/session-cascade-results.json"); - await browser.pause(500); + await loadSession(navBar, sidenav, "./session/session-cascade-results.json"); expect(await navBar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module (PAB Dimensions) @@ -142,12 +132,7 @@ describe("ngHyd − compute then reset chained results − ", () => { await browser.pause(200); // load session file - await navBar.clickMenuButton(); - await browser.pause(500); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - await sidenav.loadSessionFile("./session/session-results-invalidation.json"); - await browser.pause(500); + await loadSession(navBar, sidenav, "./session/session-results-invalidation.json"); expect(await navBar.getAllCalculatorTabs().length).toBe(2); // get down-most module (Ouvrages) diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index 22671e1ab..3ffa9d9a3 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { loadSession } from "./util.po"; /** * Load a session containing 5 calculators, having multiple linked parameters @@ -35,14 +36,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { }); it("when loading session-liens-spaghetti.json, all links should point to the right target", async () => { - await navbar.clickMenuButton(); - await browser.pause(500); - - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - - await sidenav.loadSessionFile("./session/session-liens-spaghetti.json"); - await browser.pause(500); + await loadSession(navbar, sidenav, "./session/session-liens-spaghetti.json"); expect(await navbar.getAllCalculatorTabs().length).toBe(5); diff --git a/e2e/load-malformed-files.e2e-spec.ts b/e2e/load-malformed-files.e2e-spec.ts index 708332a39..4f665914a 100644 --- a/e2e/load-malformed-files.e2e-spec.ts +++ b/e2e/load-malformed-files.e2e-spec.ts @@ -2,6 +2,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { loadSession } from "./util.po"; /** * Load 4 malformed session files : @@ -31,49 +32,29 @@ describe("ngHyd − load malformed session files − ", () => { }); it("when loading session-bad-syntax.json, displayed error should be relevant", async () => { - await navbar.clickMenuButton(); - await browser.pause(500); + await loadSession(navbar, sidenav, "./session/session-bad-syntax.json"); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - - await sidenav.loadSessionFile("./session/session-bad-syntax.json"); const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); it("when loading session-missing-info.json, displayed error should be relevant", async () => { - await navbar.clickMenuButton(); - await browser.pause(500); - - await sidenav.clickLoadSessionButton(); - await browser.pause(200); + await loadSession(navbar, sidenav, "./session/session-missing-info.json"); - await sidenav.loadSessionFile("./session/session-missing-info.json"); const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); it("when loading session-empty-modules-list.json, displayed error should be relevant", async () => { - await navbar.clickMenuButton(); - await browser.pause(500); + await loadSession(navbar, sidenav, "./session/session-empty-modules-list.json"); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - - await sidenav.loadSessionFile("./session/session-empty-modules-list.json"); const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Le fichier ne contient aucun module"); }); it("when loading session-format-too-old.json, displayed error should be relevant", async () => { - await navbar.clickMenuButton(); - await browser.pause(500); - - await sidenav.clickLoadSessionButton(); - await browser.pause(200); + await loadSession(navbar, sidenav, "./session/session-format-too-old.json", false); - await sidenav.loadSessionFile("./session/session-format-too-old.json", false); const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Mauvaise version du format de fichier"); }); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 8e56d0e83..28f88a928 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -4,7 +4,7 @@ import { Navbar } from "./navbar.po"; import { AppPage } from "./app.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, newSession, scrollPageToTop } from "./util.po"; +import { changeSelectValue, loadSession, newSession, scrollPageToTop } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -228,12 +228,8 @@ describe("ngHyd − Passe à Bassins", () => { it("complete example of all PAB modules", async () => { await startPage.navigateTo(); // load - await navBar.clickMenuButton(); - await browser.pause(500); - await sideNav.clickLoadSessionButton(); - await browser.pause(200); - await sideNav.loadSessionFile("./session/session-pab-complete.json"); - await browser.pause(500); + await loadSession(navBar, sideNav, "./session/session-pab-complete.json"); + // check existence of the loaded modules expect(await navBar.getAllCalculatorTabs().length).toBe(6); @@ -267,12 +263,7 @@ describe("ngHyd − Passe à Bassins", () => { await startPage.navigateTo(); await browser.pause(500); // load - await navBar.clickMenuButton(); - await browser.pause(500); - await sideNav.clickLoadSessionButton(); - await browser.pause(200); - await sideNav.loadSessionFile("./session/session-pab-regulee-variee.json"); - await browser.pause(500); + await loadSession(navBar, sideNav, "./session/session-pab-regulee-variee.json"); // check existence of the loaded module expect(await navBar.getAllCalculatorTabs().length).toBe(1); await navBar.clickCalculatorTab(0); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index d75b16815..48cdcf57f 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, loadSession } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -86,12 +86,7 @@ describe("ngHyd − remous", () => { it("Check that calculation with dx >= reach length fails", async () => { // load backwater curve session file with Dx>=Long - await navBar.clickMenuButton(); - await browser.pause(500); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - await sidenav.loadSessionFile("./session/session-remous-dx-bief.json"); - await browser.pause(300); + await loadSession(navBar, sidenav, "./session/session-remous-dx-bief.json"); // Calculate, the calculation should fail const calcBtn = await calcPage.getCalculateButton() diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index ddfb70e76..88fe956ea 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, newSession, openCalculator, scrollPageToTop } from "./util.po"; +import { changeSelectValue, loadSession, newSession, openCalculator, scrollPageToTop } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -34,14 +34,7 @@ describe("Solveur - ", () => { }); it("load > calculate", async () => { - await navBar.clickMenuButton(); - await browser.pause(500); - - await sideNav.clickLoadSessionButton(); - await browser.pause(200); - - await sideNav.loadSessionFile("./session/session-solveur-chutes.json"); - await browser.pause(200); + await loadSession(navBar, sideNav, "./session/session-solveur-chutes.json"); expect(await navBar.getAllCalculatorTabs().length).toBe(4); await navBar.clickCalculatorTab(3); // n°3 should be the latest diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 04f8564f9..c6cd6471e 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -75,14 +75,15 @@ export async function openCalculator(id: number, navBar: Navbar, listPage: ListP /** * load a session from JSON file */ -export async function loadSession(navbar: Navbar, sideNav: SideNav, path: string) { +export async function loadSession(navbar: Navbar, sideNav: SideNav, path: string, click: boolean = true) { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickLoadSessionButton(); - await browser.pause(200); + await browser.pause(500); - await sideNav.loadSessionFile(path); + await sideNav.loadSessionFile(path, click); + await browser.pause(500); } /** -- GitLab From d0a5f2f72c961095d2714178bd831d4153e60d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 11 May 2023 10:53:21 +0200 Subject: [PATCH 259/285] test(e2e): disable CI tests on pushes refs #618 --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 50693bbe4..92811cedb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -72,7 +72,6 @@ install: test: stage: test only: - - pushes - tags - schedules - web -- GitLab From f04e79a4d1553b1dd930e8cd3c76e239c1b2eb50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 22 Mar 2023 15:36:50 +0100 Subject: [PATCH 260/285] update jalhyd_branch to 302-structure-ajouter-une-erreur-sur-l-ennoiement refs #614 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index c8375d882..9426cd154 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -343-courbe-de-remous-rendre-facultatif-l-une-des-deux-conditions-limites-en-cote +302-structure-ajouter-une-erreur-sur-l-ennoiement -- GitLab From 73ea8cf0a45365f9540ce6b00a543bc4019f524c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 22 Mar 2023 15:35:27 +0100 Subject: [PATCH 261/285] feat: add error messages for structures with a low submergence percentage (Larinier, Rajaratnam) refs #614 --- src/locale/messages.en.json | 1 + src/locale/messages.fr.json | 1 + 2 files changed, 2 insertions(+) diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index b7b836bd0..85eed8565 100755 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -6,6 +6,7 @@ "WARNING_ORIFICE_FREE_DOWNSTREAM_ELEVATION_POSSIBLE_SUBMERSION": "Downstream elevation is higher than orifice center elevation (%submergencePerc%% submergence)", "WARNING_NOTCH_SUBMERGENCE_GREATER_THAN_07": "Notch submergence (%submergencePerc%%) is higher than recommended boundary (70%)", "WARNING_SLOT_SUBMERGENCE_NOT_BETWEEN_07_AND_09": "Slot submergence (%submergencePerc%%) is not in the recommended boundaries (70 to 90%)", + "ERROR_STRUCTURE_SUBMERGENCE_LOWER_THAN": "Slot submergence (%submergencePerc%%) is lower than %min%%", "WARNING_WEIR_SUBMERGENCE_LOWER_THAN_08": "Weir submergence factor (%submergencePerc%%) is lower than the recommended boundary (80%)", "WARNING_INFO_COUNT_SHORT": "%d info(s)", "WARNING_WARNING_COUNT_SHORT": "%d warning(s)", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 1b2892173..8d35d05b3 100755 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -6,6 +6,7 @@ "WARNING_ORIFICE_FREE_DOWNSTREAM_ELEVATION_POSSIBLE_SUBMERSION": "La cote de l'eau aval est plus élevée que la cote du centre de l'orifice (ennoiement %submergencePerc% %)", "WARNING_NOTCH_SUBMERGENCE_GREATER_THAN_07": "L'ennoiement de l'échancrure (%submergencePerc% %) est supérieur à la limite conseillée de 70 %", "WARNING_SLOT_SUBMERGENCE_NOT_BETWEEN_07_AND_09": "L'ennoiement de la fente (%submergencePerc% %) ne se situe pas entre les valeurs limites conseillées de 70 à 90 %", + "ERROR_STRUCTURE_SUBMERGENCE_LOWER_THAN": "L'ennoiement de la fente (%submergencePerc% %) est inférieur à %min% %", "WARNING_WEIR_SUBMERGENCE_LOWER_THAN_08": "L'ennoiement du seuil noyé (%submergencePerc% %) est inférieur à la limite conseillée de 80% ", "WARNING_INFO_COUNT_SHORT": "%d info(s)", "WARNING_WARNING_COUNT_SHORT": "%d avertissement(s)", -- GitLab From 2d06e14fe50bae31729f15ec9d525a0e59f6f7a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 4 Apr 2023 17:01:12 +0200 Subject: [PATCH 262/285] test(e2e): parallel structures: check submergence error refs #614 --- e2e/session/session-erreur-ennoiement-614.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/e2e/session/session-erreur-ennoiement-614.json b/e2e/session/session-erreur-ennoiement-614.json index e0a38e6b2..2c3933bd6 100644 --- a/e2e/session/session-erreur-ennoiement-614.json +++ b/e2e/session/session-erreur-ennoiement-614.json @@ -1 +1,5 @@ +<<<<<<< HEAD {"header":{"source":"jalhyd","format_version":"1.3","created":"2023-04-03T12:18:32.015Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"cTl6aT","props":{"calcType":"Cloisons","nullparams":false},"meta":{"title":"Cloisons"},"children":[{"uid":"NWllMn","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"h1","mode":"SINGLE","value":1},{"symbol":"L","mode":"SINGLE","value":0.2},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]}],"parameters":[{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"LB","mode":"SINGLE","value":10},{"symbol":"BB","mode":"SINGLE","value":1},{"symbol":"PB","mode":"SINGLE","value":1},{"symbol":"DH","mode":"SINGLE","value":0.6}]},{"uid":"bW4wZz","props":{"calcType":"ParallelStructure","nullparams":false},"meta":{"title":"Ouvrages"},"children":[{"uid":"anFpeG","props":{"calcType":"Structure","loiDebit":"WeirSubmerged","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"CdWS","mode":"SINGLE","value":0.9}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":14.647},{"symbol":"Z1","mode":"CALCUL","value":103},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]} +======= +{"header":{"source":"jalhyd","format_version":"1.3","created":"2023-04-03T12:18:32.015Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"cTl6aT","props":{"calcType":"Cloisons","nullparams":false},"meta":{"title":"Cloisons"},"children":[{"uid":"NWllMn","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"h1","mode":"SINGLE","value":1},{"symbol":"L","mode":"SINGLE","value":0.2},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]}],"parameters":[{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"LB","mode":"SINGLE","value":10},{"symbol":"BB","mode":"SINGLE","value":1},{"symbol":"PB","mode":"SINGLE","value":1},{"symbol":"DH","mode":"SINGLE","value":0.6}]},{"uid":"bW4wZz","props":{"calcType":"ParallelStructure","nullparams":false},"meta":{"title":"Ouvrages"},"children":[{"uid":"anFpeG","props":{"calcType":"Structure","loiDebit":"WeirSubmerged","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"CdWS","mode":"SINGLE","value":0.9}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":14.647},{"symbol":"Z1","mode":"CALCUL","value":103},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]} +>>>>>>> 80e36eb0 (test(e2e): parallel structures: check submergence error) -- GitLab From e54991fb15894a5e9732fb69dbee5412329f643d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 7 Apr 2023 14:59:50 +0200 Subject: [PATCH 263/285] fix(e2e): parallel structure submergence warning is also displayed along with submergence error refs #614 --- e2e/calculator.po.ts | 11 +++ e2e/parallel-structures.e2e-spec.ts | 147 ++++++++++++++-------------- 2 files changed, 85 insertions(+), 73 deletions(-) diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 64c8ae5bc..ee185aaa7 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -356,6 +356,17 @@ export class CalculatorPage { return style.indexOf("color: red;") !== -1; } + /** + * return true if the nth log entry is a warning + */ + async nthLogEntryIsWarning(n: number) { + const errs = await $$("log-entry"); + const e = errs[n]; + const icon = await e.$("div mat-icon"); + const style = await icon.getAttribute("style"); + return style.indexOf("color: orange;") !== -1; + } + async clickSaveCalcButton() { await scrollPageToTop(); return await $("#save-calc").click(); diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index 54ebb0295..d60f76076 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -8,101 +8,102 @@ import { SideNav } from "./sidenav.po"; import { browser, $, $$, expect } from '@wdio/globals' describe("Parallel structures - ", () => { - let startPage: AppPage; - let listPage: ListPage; - let navBar: Navbar; - let calcPage: CalculatorPage; - let prefPage: PreferencesPage; - let sideNav: SideNav; + let startPage: AppPage; + let listPage: ListPage; + let navBar: Navbar; + let calcPage: CalculatorPage; + let prefPage: PreferencesPage; + let sideNav: SideNav; - beforeAll(() => { - startPage = new AppPage(); - listPage = new ListPage(); - navBar = new Navbar(); - calcPage = new CalculatorPage(); - prefPage = new PreferencesPage(); - sideNav = new SideNav(); - }); + beforeAll(() => { + startPage = new AppPage(); + listPage = new ListPage(); + navBar = new Navbar(); + calcPage = new CalculatorPage(); + prefPage = new PreferencesPage(); + sideNav = new SideNav(); + }); - beforeEach(async () => { - // disable evil option "empty fields on module creation" - await prefPage.navigateTo(); - await prefPage.disableEvilEmptyFields(); - await browser.pause(200); - }); + beforeEach(async () => { + // disable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await prefPage.disableEvilEmptyFields(); + await browser.pause(200); + }); - it("check calculated parameter remains the same when copying a structure", async () => { - // open "fish ladder: cross walls" calculator - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - await listPage.clickMenuEntryForCalcType(10); - await browser.pause(200); + it("check calculated parameter remains the same when copying a structure", async () => { + // open "fish ladder: cross walls" calculator + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + await listPage.clickMenuEntryForCalcType(10); + await browser.pause(200); - // check L in first structure calc toggle is not checked - const L1 = await calcPage.getInputById("0_L"); + // check L in first structure calc toggle is not checked + const L1 = await calcPage.getInputById("0_L"); - // const h11 = calcPage.getInputById("0_h1"); + // const h11 = calcPage.getInputById("0_h1"); - // set L to calculated in first structure - await calcPage.setParamMode(L1, "cal"); - await browser.pause(500); + // set L to calculated in first structure + await calcPage.setParamMode(L1, "cal"); + await browser.pause(500); - // check L calc toggle is checked - expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); + // check L calc toggle is checked + expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); - // copy 1st structure - const copyStruct = await calcPage.getCopyStructureButton(); + // copy 1st structure + const copyStruct = await calcPage.getCopyStructureButton(); - await browser.execute(e => { e.click() }, copyStruct); // await copyStruct.click() fails with "element not interactable" error - await browser.pause(200); + await browser.execute(e => { e.click() }, copyStruct); // await copyStruct.click() fails with "element not interactable" error + await browser.pause(200); - await calcPage.closeSnackBar(); - await browser.pause(200); + await calcPage.closeSnackBar(); + await browser.pause(200); - // check L in first structure is still in "calc" state - expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); + // check L in first structure is still in "calc" state + expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); - // // check L in second structure is still in "fix" state - const L2 = await calcPage.getInputById("1_L"); - expect(await calcPage.inputIsInFixedMode(L2)).toBe(true); - }); + // // check L in second structure is still in "fix" state + const L2 = await calcPage.getInputById("1_L"); + expect(await calcPage.inputIsInFixedMode(L2)).toBe(true); + }); - //TODO à réactiver après fusion de #618 dans devel - xit("check submergence error", async () => { - await startPage.navigateTo(); - await browser.pause(200); + it("check submergence error", async () => { + await startPage.navigateTo(); + await browser.pause(200); - await loadSession(navBar, sideNav, "./session/session-erreur-ennoiement-614.json"); - await browser.pause(1000); + await loadSession(navBar, sideNav, "./session/session-erreur-ennoiement-614.json"); + await browser.pause(1000); - // first calculator + // first calculator - await navBar.clickCalculatorTab(0); - await browser.pause(200); + await navBar.clickCalculatorTab(0); + await browser.pause(200); - // run calculation - let btnCalc = await calcPage.getCalculateButton(); - await btnCalc.click(); - await browser.pause(500); + // run calculation + let btnCalc = await calcPage.getCalculateButton(); + await btnCalc.click(); + await browser.pause(500); - // check error message in log - expect(await calcPage.nbLogEntries()).toBe(1); + // check error message in log + expect(await calcPage.nbLogEntries()).toBe(2); - expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(0)).toBe(true); + expect(await calcPage.nthLogEntryIsError(1)).toBe(true); - // second calculator + // second calculator - await navBar.clickCalculatorTab(1); - await browser.pause(200); + await navBar.clickCalculatorTab(1); + await browser.pause(200); - // run calculation - btnCalc = await calcPage.getCalculateButton(); - await btnCalc.click(); - await browser.pause(500); + // run calculation + btnCalc = await calcPage.getCalculateButton(); + await btnCalc.click(); + await browser.pause(500); - // check error message in log - expect(await calcPage.nbLogEntries()).toBe(1); + // check error message in log + expect(await calcPage.nbLogEntries()).toBe(2); - expect(await calcPage.nthLogEntryIsError(0)).toBe(true); - }); + expect(await calcPage.nthLogEntryIsWarning(0)).toBe(true); + expect(await calcPage.nthLogEntryIsError(1)).toBe(true); + }); }); -- GitLab From 5f35d32d7a85e4e11e7af5014aac0417e36703fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 11 Apr 2023 17:33:17 +0200 Subject: [PATCH 264/285] fix(e2e): PAB test fails due to jalhyd submergence error fixes refs #614 --- e2e/pab.e2e-spec.ts | 14 +++++++++----- e2e/session/session-erreur-ennoiement-614.json | 4 ---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 28f88a928..4b79466ff 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -124,21 +124,23 @@ describe("ngHyd − Passe à Bassins", () => { await scrollPageToTop(); // generate PAB const genButton = await calcPage.getGeneratePabButton(); - await genButton.isExisting(); - await genButton.isDisplayed(); + // await genButton.isExisting(); + // await genButton.isDisplayed(); await genButton.click(); await browser.pause(1000); const nbBassins = await calcPage.getInputById("generatePabNbBassins"); await nbBassins.setValue("9"); // click "Generate" - await $("dialog-generate-pab button#do-generate").click(); + // await $("dialog-generate-pab button#do-generate").click(); + const doGen = await $("dialog-generate-pab button#do-generate"); + await doGen.click(); await browser.pause(1000); // calculate PAB const calcButtonPAB = await calcPage.getCalculateButton(); await calcButtonPAB.click(); - await browser.pause(200); + await browser.pause(500); // check that result is not empty const hasResults = await calcPage.hasResults(); @@ -185,8 +187,10 @@ describe("ngHyd − Passe à Bassins", () => { const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); await browser.pause(1000); + const debit = await calcPage.getInputById("generatePabDebit"); - expect(await debit.getValue()).toBe("0.564"); + expect(await debit.getValue()).toBe("1.128"); + await debit.clearValue(); // send "1.6" in 3 movements, because "." triggers an error and Angular can't cope with the subsequent keys await debit.setValue("1"); await debit.addValue("."); diff --git a/e2e/session/session-erreur-ennoiement-614.json b/e2e/session/session-erreur-ennoiement-614.json index 2c3933bd6..e0a38e6b2 100644 --- a/e2e/session/session-erreur-ennoiement-614.json +++ b/e2e/session/session-erreur-ennoiement-614.json @@ -1,5 +1 @@ -<<<<<<< HEAD {"header":{"source":"jalhyd","format_version":"1.3","created":"2023-04-03T12:18:32.015Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"cTl6aT","props":{"calcType":"Cloisons","nullparams":false},"meta":{"title":"Cloisons"},"children":[{"uid":"NWllMn","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"h1","mode":"SINGLE","value":1},{"symbol":"L","mode":"SINGLE","value":0.2},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]}],"parameters":[{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"LB","mode":"SINGLE","value":10},{"symbol":"BB","mode":"SINGLE","value":1},{"symbol":"PB","mode":"SINGLE","value":1},{"symbol":"DH","mode":"SINGLE","value":0.6}]},{"uid":"bW4wZz","props":{"calcType":"ParallelStructure","nullparams":false},"meta":{"title":"Ouvrages"},"children":[{"uid":"anFpeG","props":{"calcType":"Structure","loiDebit":"WeirSubmerged","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"CdWS","mode":"SINGLE","value":0.9}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":14.647},{"symbol":"Z1","mode":"CALCUL","value":103},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]} -======= -{"header":{"source":"jalhyd","format_version":"1.3","created":"2023-04-03T12:18:32.015Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"cTl6aT","props":{"calcType":"Cloisons","nullparams":false},"meta":{"title":"Cloisons"},"children":[{"uid":"NWllMn","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"h1","mode":"SINGLE","value":1},{"symbol":"L","mode":"SINGLE","value":0.2},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]}],"parameters":[{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"LB","mode":"SINGLE","value":10},{"symbol":"BB","mode":"SINGLE","value":1},{"symbol":"PB","mode":"SINGLE","value":1},{"symbol":"DH","mode":"SINGLE","value":0.6}]},{"uid":"bW4wZz","props":{"calcType":"ParallelStructure","nullparams":false},"meta":{"title":"Ouvrages"},"children":[{"uid":"anFpeG","props":{"calcType":"Structure","loiDebit":"WeirSubmerged","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"CdWS","mode":"SINGLE","value":0.9}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":14.647},{"symbol":"Z1","mode":"CALCUL","value":103},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]} ->>>>>>> 80e36eb0 (test(e2e): parallel structures: check submergence error) -- GitLab From d33cb071e1991991386a25b4f9411101d34140b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 17 Apr 2023 15:32:01 +0200 Subject: [PATCH 265/285] fix(e2e): PAB test typo refs #614 --- e2e/pab.e2e-spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 4b79466ff..a46cf7912 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -62,7 +62,7 @@ describe("ngHyd − Passe à Bassins", () => { await listPage.clickMenuEntryForCalcType(12); const c_Z1 = await calcPage.getInputById("Z1"); await c_Z1.setValue("78.27"); - const c_Z2 = await calcPage.getInputById("Z1"); + const c_Z2 = await calcPage.getInputById("Z2"); await c_Z2.setValue("74.86"); // PAB - nombre -- GitLab From a95ebb1a6ae98b7e430714d2bea9dd49862ba30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 17 Apr 2023 15:32:20 +0200 Subject: [PATCH 266/285] fix(e2e): submergence error/warning order in submergence test refs #614 --- e2e/parallel-structures.e2e-spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index d60f76076..f5f12df4b 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -87,8 +87,8 @@ describe("Parallel structures - ", () => { // check error message in log expect(await calcPage.nbLogEntries()).toBe(2); - expect(await calcPage.nthLogEntryIsWarning(0)).toBe(true); - expect(await calcPage.nthLogEntryIsError(1)).toBe(true); + expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(1)).toBe(true); // second calculator @@ -103,7 +103,7 @@ describe("Parallel structures - ", () => { // check error message in log expect(await calcPage.nbLogEntries()).toBe(2); - expect(await calcPage.nthLogEntryIsWarning(0)).toBe(true); - expect(await calcPage.nthLogEntryIsError(1)).toBe(true); + expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(1)).toBe(true); }); }); -- GitLab From 513d2b964b3a5aed604bf8c7d63ed83b77f0e015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 16 May 2023 09:15:37 +0200 Subject: [PATCH 267/285] fix(doc): syntax error in structure formula --- docs/en/calculators/structures/liste.md | 4 ++-- docs/fr/calculators/structures/liste.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/calculators/structures/liste.md b/docs/en/calculators/structures/liste.md index 49b89645c..427be1e3f 100644 --- a/docs/en/calculators/structures/liste.md +++ b/docs/en/calculators/structures/liste.md @@ -37,5 +37,5 @@ Extract from CETMEF, 2005. Note on weirs : synthesis of flow laws at the right o > - weir with undefined crest > > In order to determine the type of weir studied, the following conditions must be verified: -> - if $`C < \frac{H_1}{2}`$, then the threshold is sharp-crested; -> - if $`C > \frac{2H_1}{3}`$, then the threshold is broad-crested. +> - if $C < \frac{H_1}{2}$, then the threshold is sharp-crested; +> - if $C > \frac{2H_1}{3}$, then the threshold is broad-crested. diff --git a/docs/fr/calculators/structures/liste.md b/docs/fr/calculators/structures/liste.md index e13d51eb5..c0c942d4d 100644 --- a/docs/fr/calculators/structures/liste.md +++ b/docs/fr/calculators/structures/liste.md @@ -37,5 +37,5 @@ Extrait de CETMEF, 2005. Notice sur les déversoirs : synthèse des lois d’ > - seuil à crête non définie > > Afin de déterminer le type de seuil étudié, les conditions suivantes doivent être vérifiées : -> - si $`C < \frac{H_1}{2}`$, alors le seuil est à crête mince ; -> - si $`C > \frac{2H_1}{3}`$, alors le seuil est à crête épaisse. \ No newline at end of file +> - si $C < \frac{H_1}{2}$, alors le seuil est à crête mince ; +> - si $C > \frac{2H_1}{3}$, alors le seuil est à crête épaisse. \ No newline at end of file -- GitLab From f9c74ffa99e1ddb4ffb4bbb54dab8121618725f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 16 May 2023 15:55:38 +0200 Subject: [PATCH 268/285] test(e2): predams: check an error in calculation leads to empty results for walls/basins refs #614 --- e2e/prebarrages-results.e2e-spec.ts | 30 ++++++++++++++++++- .../session-prebarrage-calculation-error.json | 1 + 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 e2e/session/session-prebarrage-calculation-error.json diff --git a/e2e/prebarrages-results.e2e-spec.ts b/e2e/prebarrages-results.e2e-spec.ts index 09c79d23b..b7e83b512 100644 --- a/e2e/prebarrages-results.e2e-spec.ts +++ b/e2e/prebarrages-results.e2e-spec.ts @@ -3,7 +3,8 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' -import { scrollToElement } from "./util.po"; +import { loadSession, scrollToElement } from "./util.po"; +import { SideNav } from "./sidenav.po"; /** * Clone calculators @@ -13,12 +14,14 @@ describe("Prébarrages results - ", () => { let calcPage: CalculatorPage; let navBar: Navbar; let prefPage: PreferencesPage; + let sidenav: SideNav; beforeAll(() => { listPage = new ListPage(); calcPage = new CalculatorPage(); navBar = new Navbar(); prefPage = new PreferencesPage(); + sidenav = new SideNav(); jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 1000; }); @@ -56,4 +59,29 @@ describe("Prébarrages results - ", () => { expect(hasResults).toBe(true); } }); + + it("an error in calculation must lead to empty results for all walls/basins", async () => { + // load session file + await loadSession(navBar, sidenav, "./session/session-prebarrage-calculation-error.json"); + + // click "compute" button + const calcButton = await calcPage.getCalculateButton(); + await calcButton.click(); + await browser.pause(300); + + // check no result is available + const nodes = await $$("g.nodes > g"); + const nb = nodes.length; + for (let n = 0; n < nb; n++) { + const node = nodes[n]; + await scrollToElement(node); + await browser.pause(100); + await node.click(); + await browser.pause(200); + + // check that result is empty + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(false); + } + }); }); diff --git a/e2e/session/session-prebarrage-calculation-error.json b/e2e/session/session-prebarrage-calculation-error.json new file mode 100644 index 000000000..b8f6f4f85 --- /dev/null +++ b/e2e/session/session-prebarrage-calculation-error.json @@ -0,0 +1 @@ +{"header":{"source":"jalhyd","format_version":"1.3","created":"2023-05-16T06:32:05.999Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"b2kxNm","props":{"calcType":"PreBarrage"},"meta":{"title":"Prébarrages"},"children":[{"uid":"Zjczdz","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":13.8},{"symbol":"ZF","mode":"SINGLE","value":95}]},{"uid":"dWJrZX","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":15.4},{"symbol":"ZF","mode":"SINGLE","value":94.7}]},{"uid":"dzMxN2","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":16.2},{"symbol":"ZF","mode":"SINGLE","value":94.7}]},{"uid":"ZXZua2","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":17.5},{"symbol":"ZF","mode":"SINGLE","value":94.4}]},{"uid":"YmR5aD","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":32.1},{"symbol":"ZF","mode":"SINGLE","value":94.25}]},{"uid":"bDN2OW","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":35},{"symbol":"ZF","mode":"SINGLE","value":94.1}]},{"uid":"MWxycH","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"Zjczdz"},"children":[{"uid":"MmZ2aG","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.3},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"eW9jZH","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.3},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"c3Zpb2","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"dWJrZX"},"children":[{"uid":"bTQ2cG","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96},{"symbol":"L","mode":"SINGLE","value":1},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"N24zM2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"MG4wNG","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"YmR5aD"},"children":[{"uid":"azV4dj","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":3.5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"YjJra2","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"bDN2OW"},"children":[{"uid":"aDd4Y3","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":3.6},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"enE4cn","props":{"calcType":"PbCloison","upstreamBasin":"Zjczdz","downstreamBasin":"dzMxN2"},"children":[{"uid":"ZHczZ2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"aXRjZ3","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":5.2},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"NXNoNG","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"dzMxN2"},"children":[{"uid":"eXFqeH","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.85},{"symbol":"L","mode":"SINGLE","value":4.38},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"bGhodG","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"ZXZua2"},"children":[{"uid":"b3Z3OD","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.85},{"symbol":"L","mode":"SINGLE","value":3},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"MDZ3aH","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"YmR5aD"},"children":[{"uid":"NXJ1OW","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.5},{"symbol":"L","mode":"SINGLE","value":1},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]},{"uid":"b3pjZX","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.5},{"symbol":"L","mode":"SINGLE","value":1},{"symbol":"CdCunge","mode":"SINGLE","value":0.4}]}],"parameters":[]},{"uid":"emZ2bX","props":{"calcType":"PbCloison","upstreamBasin":"dzMxN2","downstreamBasin":"ZXZua2"},"children":[{"uid":"cGllNj","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.7},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"aWFseW","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.65},{"symbol":"L","mode":"SINGLE","value":5.74},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"bG1ucj","props":{"calcType":"PbCloison","upstreamBasin":"ZXZua2","downstreamBasin":"YmR5aD"},"children":[{"uid":"MDJsaD","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.4},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"ZzY2bT","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.35},{"symbol":"L","mode":"SINGLE","value":6},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"dGNnZz","props":{"calcType":"PbCloison","upstreamBasin":"YmR5aD","downstreamBasin":"bDN2OW"},"children":[{"uid":"dnNqeX","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.25},{"symbol":"L","mode":"SINGLE","value":0.7},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"ODFkZ2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.05},{"symbol":"L","mode":"SINGLE","value":9.5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"amprcm","props":{"calcType":"PbCloison","upstreamBasin":"bDN2OW","downstreamBasin":""},"children":[{"uid":"OG02MT","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.1},{"symbol":"L","mode":"SINGLE","value":0.95},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"MHVxZn","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.75},{"symbol":"L","mode":"SINGLE","value":10.2},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":0.844},{"symbol":"Z1","mode":"CALCUL"},{"symbol":"Z2","mode":"SINGLE","value":94.45}]}]} \ No newline at end of file -- GitLab From b2dfb63ee78f98f6cd8f82a2ca399f55e01341cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 16 May 2023 15:09:50 +0200 Subject: [PATCH 269/285] fix: predams results: do not show fixed parameters in case of error refs #614 --- src/app/results/prebarrage-results.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/results/prebarrage-results.ts b/src/app/results/prebarrage-results.ts index 411c4edd7..b5f894b70 100644 --- a/src/app/results/prebarrage-results.ts +++ b/src/app/results/prebarrage-results.ts @@ -127,7 +127,7 @@ export class PrebarrageResults extends MultiDimensionResults implements IObserva } public get hasWallResults(): boolean { - return this.cloisonResults && this.cloisonResults.result && ! this.cloisonResults.result.hasOnlyErrors; + return this.cloisonResults?.result?.ok; } /** retourne true si au moins un calcul a échoué (le log a un code négatif) */ -- GitLab From 68060547efd6e2d30cb5828f3cca8d6db9a66fd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 09:28:45 +0200 Subject: [PATCH 270/285] test(e2e): check log messages in predams example refs #614 --- e2e/predam-log.e2e-spec.ts | 39 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 11326ca7b..de1cd6685 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -3,18 +3,22 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" import { browser, $, $$, expect } from '@wdio/globals' +import { changeSelectValue, scrollToElement } from "./util.po"; +import { AppPage } from "./app.po"; -describe("check that low iteration count leads to log messages", () => { +describe("predams - ", () => { let listPage: ListPage; let prefPage: PreferencesPage; let navBar: Navbar; let calcPage: CalculatorPage; + let startPage: AppPage; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + startPage = new AppPage(); }); beforeEach(async () => { @@ -25,7 +29,7 @@ describe("check that low iteration count leads to log messages", () => { await browser.pause(100); }); - it("", async () => { + it("check that low iteration count leads to log messages", async () => { // set low iteration count await prefPage.setIterationCount(5); @@ -42,4 +46,35 @@ describe("check that low iteration count leads to log messages", () => { // check log messages presence expect(await calcPage.hasLog()).toBe(true); }); + + it("check log messages in predams example", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + // open predams example + const examples = await $$("#examples-list .load-example"); + await examples[6].click(); + await browser.pause(500); + + // click "Amont-B2" + const nodes = await $$("g.nodes > g"); + const node = nodes[9]; + await scrollToElement(node); + await browser.pause(100); + await node.click(); + await browser.pause(200); + + // change discharge law to Larinier + const sel = await calcPage.getSelectById("select_loidebit"); + await changeSelectValue(sel, 3); + await browser.pause(100); + + // calculate module + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); + + // check log messages presence + expect(await calcPage.hasLog()).toBe(true); + }); }); -- GitLab From 1a344ebb85ca69f4f3ab508ffd1db17e44e5294d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 09:48:00 +0200 Subject: [PATCH 271/285] test(e2e): predams: check sumbmergence error does not trigger too soon refs #614 --- e2e/predam-log.e2e-spec.ts | 20 ++++++++++++++++++- .../session-submergence-error-Larinier.json | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 e2e/session/session-submergence-error-Larinier.json diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index de1cd6685..8327fb0ff 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -3,8 +3,9 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" import { browser, $, $$, expect } from '@wdio/globals' -import { changeSelectValue, scrollToElement } from "./util.po"; +import { changeSelectValue, loadSession, scrollToElement } from "./util.po"; import { AppPage } from "./app.po"; +import { SideNav } from "./sidenav.po"; describe("predams - ", () => { let listPage: ListPage; @@ -12,6 +13,7 @@ describe("predams - ", () => { let navBar: Navbar; let calcPage: CalculatorPage; let startPage: AppPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); @@ -19,6 +21,7 @@ describe("predams - ", () => { navBar = new Navbar(); calcPage = new CalculatorPage(); startPage = new AppPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -77,4 +80,19 @@ describe("predams - ", () => { // check log messages presence expect(await calcPage.hasLog()).toBe(true); }); + + it("check submergence error does not trigger too soon", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + await loadSession(navBar, sideNav, "./session/session-submergence-error-Larinier.json"); + + // calculate module + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); + + // check log messages absence + expect(await calcPage.hasLog()).toBe(false); + }); }); diff --git a/e2e/session/session-submergence-error-Larinier.json b/e2e/session/session-submergence-error-Larinier.json new file mode 100644 index 000000000..4c61453f2 --- /dev/null +++ b/e2e/session/session-submergence-error-Larinier.json @@ -0,0 +1 @@ +{"header":{"source":"jalhyd","format_version":"1.3","created":"2023-05-17T07:40:56.534Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"b2kxNm","props":{"calcType":"PreBarrage"},"meta":{"title":"Prébarrages"},"children":[{"uid":"Zjczdz","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":13.8},{"symbol":"ZF","mode":"SINGLE","value":95}]},{"uid":"dWJrZX","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":15.4},{"symbol":"ZF","mode":"SINGLE","value":94.7}]},{"uid":"dzMxN2","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":16.2},{"symbol":"ZF","mode":"SINGLE","value":94.7}]},{"uid":"ZXZua2","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":17.5},{"symbol":"ZF","mode":"SINGLE","value":94.4}]},{"uid":"YmR5aD","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":32.1},{"symbol":"ZF","mode":"SINGLE","value":94.25}]},{"uid":"bDN2OW","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":35},{"symbol":"ZF","mode":"SINGLE","value":94.1}]},{"uid":"MWxycH","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"Zjczdz"},"children":[{"uid":"cG80a2","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.3},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]},{"uid":"aDVuZj","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":4.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"c3Zpb2","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"dWJrZX"},"children":[{"uid":"ZmFibX","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96},{"symbol":"L","mode":"SINGLE","value":1},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"N24zM2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"MG4wNG","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"YmR5aD"},"children":[{"uid":"azV4dj","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":3.5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"YjJra2","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"bDN2OW"},"children":[{"uid":"aDd4Y3","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":3.6},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"enE4cn","props":{"calcType":"PbCloison","upstreamBasin":"Zjczdz","downstreamBasin":"dzMxN2"},"children":[{"uid":"ZHczZ2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"aXRjZ3","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":5.2},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"NXNoNG","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"dzMxN2"},"children":[{"uid":"eXFqeH","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.85},{"symbol":"L","mode":"SINGLE","value":4.38},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"bGhodG","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"ZXZua2"},"children":[{"uid":"b3Z3OD","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.85},{"symbol":"L","mode":"SINGLE","value":3},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"MDZ3aH","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"YmR5aD"},"children":[{"uid":"NTBzZm","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.5},{"symbol":"L","mode":"SINGLE","value":1},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"b3pjZX","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.75},{"symbol":"L","mode":"SINGLE","value":3},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"emZ2bX","props":{"calcType":"PbCloison","upstreamBasin":"dzMxN2","downstreamBasin":"ZXZua2"},"children":[{"uid":"cGllNj","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.7},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"aWFseW","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.65},{"symbol":"L","mode":"SINGLE","value":5.74},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"bG1ucj","props":{"calcType":"PbCloison","upstreamBasin":"ZXZua2","downstreamBasin":"YmR5aD"},"children":[{"uid":"MDJsaD","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.4},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"ZzY2bT","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.35},{"symbol":"L","mode":"SINGLE","value":6},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"dGNnZz","props":{"calcType":"PbCloison","upstreamBasin":"YmR5aD","downstreamBasin":"bDN2OW"},"children":[{"uid":"dnNqeX","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.25},{"symbol":"L","mode":"SINGLE","value":0.7},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"ODFkZ2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.05},{"symbol":"L","mode":"SINGLE","value":9.5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"amprcm","props":{"calcType":"PbCloison","upstreamBasin":"bDN2OW","downstreamBasin":""},"children":[{"uid":"OG02MT","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.1},{"symbol":"L","mode":"SINGLE","value":0.95},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"MHVxZn","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.75},{"symbol":"L","mode":"SINGLE","value":10.2},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":0.844},{"symbol":"Z1","mode":"CALCUL"},{"symbol":"Z2","mode":"SINGLE","value":94.45}]}]} \ No newline at end of file -- GitLab From 1a5d78e3d9ffbf1a545afd1ee2b27e5b37a5e8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 10:26:39 +0200 Subject: [PATCH 272/285] test(e2e): check submergence error occurs in fish ladder refs #614 --- e2e/pab-submergence-error.e2e-spec.ts | 61 +++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 e2e/pab-submergence-error.e2e-spec.ts diff --git a/e2e/pab-submergence-error.e2e-spec.ts b/e2e/pab-submergence-error.e2e-spec.ts new file mode 100644 index 000000000..1009d9410 --- /dev/null +++ b/e2e/pab-submergence-error.e2e-spec.ts @@ -0,0 +1,61 @@ +import { CalculatorPage } from "./calculator.po"; +import { Navbar } from "./navbar.po"; +import { AppPage } from "./app.po"; +import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' + +/** + * Clone calculators + */ +describe("Passe à Bassins - ", () => { + let startPage: AppPage; + let calcPage: CalculatorPage; + let navBar: Navbar; + let prefPage: PreferencesPage; + + beforeAll(() => { + startPage = new AppPage(); + calcPage = new CalculatorPage(); + navBar = new Navbar(); + prefPage = new PreferencesPage(); + }); + + beforeEach(async () => { + // disable evil option "empty fields on module creation" + await prefPage.setEmptyFields(false); + }); + + it("check submergence error occurs", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + // open PAB example + const examples = await $$("#examples-list .load-example"); + await examples[0].click(); + await browser.pause(500); + + // select PAB module + await navBar.openNthCalculator(5); + await browser.pause(300); + + // modify downstream water elevation + const inpZ2 = await calcPage.getInputById("Z2"); + await inpZ2.setValue("27"); + await browser.pause(100); + + // calculate PAB + const calcButton = await calcPage.getCalculateButton(); + await calcButton.click(); + await browser.pause(300); + + // check that result is empty + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(false); + + // check presence of log messages + expect(await calcPage.nbLogEntries()).toBe(3); + expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + expect(await calcPage.nthLogEntryIsError(1)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(2)).toBe(true); + }); +}); -- GitLab From 10e9d3348e63d412059803a5a62c6df6696dea5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 10:46:11 +0200 Subject: [PATCH 273/285] test(e2e): predams: check results are displayed when dichotomy does not converge refs #614 --- e2e/predam-log.e2e-spec.ts | 33 +++++++++++++++++++++++++++++++++ e2e/preferences.po.ts | 5 +++++ 2 files changed, 38 insertions(+) diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 8327fb0ff..0e7e99fe9 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -95,4 +95,37 @@ describe("predams - ", () => { // check log messages absence expect(await calcPage.hasLog()).toBe(false); }); + + it("check submergence error and results if dichotomy did not converge", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + // open predams example + const examples = await $$("#examples-list .load-example"); + await examples[6].click(); + await browser.pause(500); + + // modify iteration count,precision + await prefPage.navigateTo(); + await browser.pause(200); + await prefPage.setIterationCount(10); + await prefPage.setComputePrecision(1e-15); + + // back to module + await navBar.openNthCalculator(0); + await browser.pause(500); + + // calculate module + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); + + // check log messages presence + expect(await calcPage.hasLog()).toBe(true); + expect(await calcPage.nbLogEntries()).toBe(12); + + // check that results are not empty (dichotomy did not convergence but results should be displayed anyway) + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(true); + }); }); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 4a3a5755c..57f921dd1 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -84,4 +84,9 @@ export class PreferencesPage { const input = await this.getInputFromName("nmi"); await input.setValue(n.toString()); } + + async setComputePrecision(p: number) { + const input = await this.getInputFromName("cp"); + await input.setValue(p.toString()); + } } -- GitLab From b5bddeee2e67578c90097adcc2de397e0b5645a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 16:20:46 +0200 Subject: [PATCH 274/285] fix(e2e): failing test refs #614 --- e2e/ouvrages-empty-fields.e2e-spec.ts | 12 +++++----- e2e/util.po.ts | 32 +++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/e2e/ouvrages-empty-fields.e2e-spec.ts b/e2e/ouvrages-empty-fields.e2e-spec.ts index 24078502a..b0cebdc64 100644 --- a/e2e/ouvrages-empty-fields.e2e-spec.ts +++ b/e2e/ouvrages-empty-fields.e2e-spec.ts @@ -2,8 +2,9 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, openApplication, openCalculator } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { AppPage } from "./app.po"; /** * Check that created/cloned structures have empty fields when @@ -14,13 +15,14 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () let listPage: ListPage; let calcPage: CalculatorPage; let navBar: Navbar; + let startPage: AppPage; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); navBar = new Navbar(); - //browser.manage().window().setPosition(2000, 30); + startPage = new AppPage(); }); beforeEach(async () => { @@ -33,12 +35,10 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () async function setup() { // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + await openApplication(startPage); // open structures calculator - await listPage.clickMenuEntryForCalcType(8); - await browser.pause(200); + await openCalculator(8, navBar, listPage); } it("when a structure calculator is created", async () => { diff --git a/e2e/util.po.ts b/e2e/util.po.ts index c6cd6471e..ec4a1c033 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -2,13 +2,13 @@ import { browser, $, $$, expect } from '@wdio/globals' import { Navbar } from './navbar.po'; import { SideNav } from './sidenav.po'; import { ListPage } from './list.po'; - +import { AppPage } from './app.po'; /** * scroll page to make element visible */ export async function scrollToElement(elem) { await browser.execute(e => { e.scrollIntoView({ block: 'center' }) }, elem); - await browser.pause(100); + await browser.pause(200); } /** @@ -31,6 +31,19 @@ export function expectNumber(msg: string, val: number, expected: number) { expect(val).toEqual(expected); } +/** + * execute expect() on a boolean and displays a failure message + * @param msg message in caase of failure + * @param val value to check + * @param expected expected value + */ +export function expectBoolean(msg: string, val: boolean, expected: boolean) { + if (val !== expected) { + console.log(msg, "got", val, "expected", expected); + } + expect(val).toEqual(expected); +} + export async function changeSelectValue(elt, index: number) { await scrollToElement(elt); await browser.pause(100); @@ -58,18 +71,29 @@ export async function newSession(navBar: Navbar, sideNav: SideNav) { } } +/** + * open application if necessary (ie. if no URL has been open) + */ +export async function openApplication(startPage: AppPage) { + const url = await browser.getUrl(); + if (url.indexOf("localhost") === -1) { + await startPage.navigateTo(); + await browser.pause(500); + } +} + export async function openCalculator(id: number, navBar: Navbar, listPage: ListPage) { const ncButton = await navBar.getNewCalculatorButton(); if (await ncButton.isExisting()) { await scrollToElement(ncButton); if (await ncButton.isDisplayed()) { await ncButton.click() - await browser.pause(200); + await browser.pause(300); } } await listPage.clickMenuEntryForCalcType(id); - await browser.pause(200); + await browser.pause(500); } /** -- GitLab From e648460ee20b52a2346ffaf510f9c79acba0ed1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 16:23:33 +0200 Subject: [PATCH 275/285] test(e2e): predams: check that results are not displayed when dichotomy convergence error occurred along with another error refs #614 --- e2e/predam-log.e2e-spec.ts | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 0e7e99fe9..07c936d1e 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -128,4 +128,54 @@ describe("predams - ", () => { const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); }); + + it("check results (dichotomy did not converge + submergence error)", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + // open predams example + const examples = await $$("#examples-list .load-example"); + await examples[6].click(); + await browser.pause(500); + + // modify iteration count,precision (should trigger submergence+dichotomy non convergence errors) + await prefPage.navigateTo(); + await browser.pause(200); + await prefPage.setIterationCount(20); + await prefPage.setComputePrecision(1e-15); + + // back to module + await navBar.openNthCalculator(0); + await browser.pause(500); + + // click "Amont-B2" + const nodes = await $$("g.nodes > g"); + const node = nodes[9]; + await scrollToElement(node); + await browser.pause(100); + await node.click(); + await browser.pause(200); + + // change discharge law to Larinier + const sel = await calcPage.getSelectById("select_loidebit"); + await changeSelectValue(sel, 3); + await browser.pause(100); + + // calculate module + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); + + // check that results are empty + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(false); + + // check log messages + expect(await calcPage.hasLog()).toBe(true); + expect(await calcPage.nbLogEntries()).toBe(4); + expect(await calcPage.nthLogEntryIsWarning(0)).toBe(true); + expect(await calcPage.nthLogEntryIsError(1)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(2)).toBe(true); + expect(await calcPage.nthLogEntryIsError(3)).toBe(true); + }); }); -- GitLab From b8c4893bc7c1990558974d91d33b4f3869f30530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 12 May 2023 10:51:33 +0200 Subject: [PATCH 276/285] test(e2e): predams: check ZDV input value does not change after calculation refs #620 --- e2e/predam.e2e-spec.ts | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 e2e/predam.e2e-spec.ts diff --git a/e2e/predam.e2e-spec.ts b/e2e/predam.e2e-spec.ts new file mode 100644 index 000000000..335d1c030 --- /dev/null +++ b/e2e/predam.e2e-spec.ts @@ -0,0 +1,60 @@ +import { browser, $, $$, expect } from '@wdio/globals' +import { PreferencesPage } from './preferences.po'; +import { Navbar } from './navbar.po'; +import { CalculatorPage } from './calculator.po'; +import { changeSelectValue, scrollToElement } from './util.po'; + +describe("predams - ", () => { + let prefPage: PreferencesPage; + let navBar: Navbar; + let calcPage: CalculatorPage; + + beforeAll(() => { + prefPage = new PreferencesPage(); + navBar = new Navbar(); + calcPage = new CalculatorPage(); + }); + + beforeEach(async () => { + // disable evil option "empty fields on module creation" + await prefPage.setEmptyFields(false); + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + }); + + it("bug nghyd#620", async () => { + // open predams example + const examples = await $$("#examples-list .load-example"); + await examples[6].click(); + await browser.pause(200); + + // select "Amont-B1" basin + const nodes = await $$("g.nodes > g"); + await nodes[8].click(); + await browser.pause(200); + + // modify 1st structure discharge law + const sel = await calcPage.getSelectById("select_loidebit"); + await changeSelectValue(sel, 3); // Larinier + await browser.pause(200); + + // check 2nd structure ZDV + const inpZDV2 = await calcPage.getInputById("1_ZDV"); + expect(await inpZDV2.getValue()).toEqual("96.25") + + // run computation + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); + + // back to inputs tab + const resSelectors = await $$("#pb-data-results-selector div div"); + scrollToElement(resSelectors[0]); + await browser.pause(200); + await resSelectors[0].click(); + await browser.pause(200); + + // check 2nd structure ZDV didn't change + expect(await inpZDV2.getValue()).toEqual("96.25") + }); +}); -- GitLab From 43e97fa1df6dc0595c3c79910d07439bfaeee026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 12 May 2023 08:27:35 +0200 Subject: [PATCH 277/285] refactor(e2e): use OpenCalculator() where possible (cherrypicked 54d8127c from #609) refs #620 --- e2e/app.po.ts | 2 + e2e/bief-empty-fields.e2e-spec.ts | 5 +- e2e/calculate-button-validation.e2e-spec.ts | 33 ++------ e2e/calculate-linked-params.e2e-spec.ts | 80 ++++++++----------- e2e/check-translations.e2e-spec.ts | 3 +- e2e/cloisons.e2e-spec.ts | 12 ++- e2e/clone-all-calc.e2e-spec.ts | 5 +- e2e/clone-calc.e2e-spec.ts | 23 +++--- e2e/cote-amont-aval-bief.e2e-spec.ts | 11 +-- e2e/courbe-remous-empty-fields.e2e-spec.ts | 5 +- e2e/diagramme-modules.e2e-spec.ts | 5 +- e2e/documentation.e2e-spec.ts | 8 +- e2e/duplicate-results.e2e-spec.ts | 5 +- e2e/lechapt-calmon.e2e-spec.ts | 9 +-- e2e/link-parallel-devices.e2e-spec.ts | 19 +++-- e2e/link-to-deleted-module.e2e-spec.ts | 5 +- e2e/linked-parameter-section-type.e2e-spec.ts | 10 +-- e2e/load-save-session.e2e-spec.ts | 37 ++++----- e2e/macrorugo-remous.e2e-spec.ts | 38 ++------- e2e/notes.e2e-spec.ts | 27 +++---- e2e/pab-cloisons-empty-fields.e2e-spec.ts | 9 +-- e2e/pab.e2e-spec.ts | 35 ++++---- e2e/parallel-structures.e2e-spec.ts | 7 +- e2e/prebarrages-results.e2e-spec.ts | 7 +- e2e/predam-empty-fields.e2e-spec.ts | 14 +--- e2e/predam-log.e2e-spec.ts | 6 +- e2e/pressure-loss-empty-fields.e2e-spec.ts | 8 +- e2e/pressure-loss.e2e-spec.ts | 10 +-- e2e/regime-uniforme-empty-fields.e2e-spec.ts | 5 +- e2e/remous.e2e-spec.ts | 11 +-- e2e/reset-param-mode.e2e-spec.ts | 23 +++--- e2e/reset-results.e2e-spec.ts | 6 +- e2e/section-empty-fields.e2e-spec.ts | 5 +- e2e/select-default-value.e2e-spec.ts | 9 +-- e2e/solveur.e2e-spec.ts | 15 ++-- e2e/translation.e2e-spec.ts | 5 +- e2e/util.po.ts | 1 + e2e/valeurs-erronees.e2e-spec.ts | 9 +-- e2e/variable-param-cancel.e2e-spec.ts | 19 +++-- 39 files changed, 211 insertions(+), 335 deletions(-) diff --git a/e2e/app.po.ts b/e2e/app.po.ts index 494a18afd..8e2605b74 100644 --- a/e2e/app.po.ts +++ b/e2e/app.po.ts @@ -1,3 +1,5 @@ +import { browser } from '@wdio/globals' + export class AppPage { navigateTo() { return browser.url("/"); diff --git a/e2e/bief-empty-fields.e2e-spec.ts b/e2e/bief-empty-fields.e2e-spec.ts index a828ffc0b..1ad63832e 100644 --- a/e2e/bief-empty-fields.e2e-spec.ts +++ b/e2e/bief-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("Check fields are empty in 'up/downstream elevations of a reach' calculator when created with 'empty fields' option", () => { let listPage: ListPage; @@ -26,9 +27,7 @@ describe("Check fields are empty in 'up/downstream elevations of a reach' calcul it("", async () => { // open "up/downstream elevations of a reach" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(21); - await browser.pause(200); + await openCalculator(21, navBar, listPage); await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], [true, true, true, true, true, true, true, true, true, true]) diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index 537b49f30..4ba0b00b2 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("Calculate button - ", () => { let listPage: ListPage; @@ -25,21 +26,11 @@ describe("Calculate button - ", () => { }); it("check button status only depends on calculator (no link between calculators)", async () => { - // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - // open PAB: chute calculator - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); - - // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // open PAB: dimensions - await listPage.clickMenuEntryForCalcType(5); - await browser.pause(200); + await openCalculator(5, navBar, listPage); // fill width field with invalid data const inputW = await calcPage.getInputById("W"); @@ -68,13 +59,8 @@ describe("Calculate button - ", () => { describe("check button status in prébarrages - ", () => { it("invalid data in Q input", async () => { - // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - // open prébarrages calculator - await listPage.clickMenuEntryForCalcType(30); - await browser.pause(200); + await openCalculator(30, navBar, listPage); // Q input const inputQ = await $("#Q"); @@ -94,13 +80,8 @@ describe("Calculate button - ", () => { }); it("add basin, invalid data in Q input", async () => { - // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - // open prébarrages calculator - await listPage.clickMenuEntryForCalcType(30); - await browser.pause(200); + await openCalculator(30, navBar, listPage); // "add basin" button const addBasinBtn = await $("#add-basin"); @@ -141,9 +122,7 @@ describe("Calculate button - ", () => { async function checkCalculateButtonValidity(calcType: number) { // open calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(calcType); - await browser.pause(200); + await openCalculator(calcType, navBar, listPage); // for each input, set empty and check calculate button is not active diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index 2f998ebd4..5a5306f41 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, loadSession, newSession } from "./util.po"; +import { changeSelectValue, loadSession, newSession, openCalculator } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -59,12 +59,11 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − direct links : parameter linked to a single parameter", async () => { // create a Régime uniforme - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(3); + await openCalculator(3, navBar, listPage); // create a PAB : dimensions - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(5); + await openCalculator(5, navBar, listPage); + // link Y to Y (R uniforme) const Y = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y, "link"); @@ -76,12 +75,11 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − direct links : parameter linked to a single parameter, plus local variated parameter", async () => { // create a Régime uniforme - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(3); + await openCalculator(3, navBar, listPage); // create a PAB : dimensions - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(5); + await openCalculator(5, navBar, listPage); + // link Y to Y (R uniforme) const Y = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y, "link"); @@ -96,15 +94,15 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − direct links : parameter linked to a variated parameter", async () => { // create a Régime uniforme - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(3); + await openCalculator(3, navBar, listPage); + // vary Y const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "var"); // create a PAB : dimensions - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(5); + await openCalculator(5, navBar, listPage); + // link Y to Y (R uniforme) const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); @@ -116,15 +114,15 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − direct links : parameter linked to a single result", async () => { // create a Régime uniforme - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(3); + await openCalculator(3, navBar, listPage); + // calculate Y const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "cal"); // create a PAB : dimensions - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(5); + await openCalculator(5, navBar, listPage); + // link Y to Y (R uniforme) const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); @@ -136,15 +134,15 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − direct links : parameter linked to a single result, plus local variated parameter", async () => { // create a Régime uniforme - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(3); + await openCalculator(3, navBar, listPage); + // calculate Y const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "cal"); // create a PAB : dimensions - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(5); + await openCalculator(5, navBar, listPage); + // link Y to Y (R uniforme) const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); @@ -159,8 +157,8 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − direct links : parameter linked to a variated result", async () => { // create a Régime uniforme - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(3); + await openCalculator(3, navBar, listPage); + // vary Q const Q = await calcPage.getInputById("Q"); await calcPage.setParamMode(Q, "var"); @@ -169,8 +167,8 @@ describe("ngHyd − calculate with linked parameters", () => { await calcPage.setParamMode(Y1, "cal"); // create a PAB : dimensions - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(5); + await openCalculator(5, navBar, listPage); + // link Y to Y (R uniforme) const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); @@ -182,12 +180,11 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − direct links : parameter linked to a single extra result", async () => { // create a Régime uniforme - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(3); + await openCalculator(3, navBar, listPage); // create a Jet - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(18); + await openCalculator(18, navBar, listPage); + // link V0 to V (Régime uniforme) const V0 = await calcPage.getInputById("V0"); await calcPage.setParamMode(V0, "link"); @@ -197,12 +194,11 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − direct links : parameter linked to a single extra result, plus local variated parameter", async () => { // create a Régime uniforme - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(3); + await openCalculator(3, navBar, listPage); // create a Jet - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(18); + await openCalculator(18, navBar, listPage); + // link V0 to V (Régime uniforme) const V0 = await calcPage.getInputById("V0"); await calcPage.setParamMode(V0, "link"); @@ -215,15 +211,15 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − direct links : parameter linked to a variated extra result", async () => { // create a Régime uniforme - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(3); + await openCalculator(3, navBar, listPage); + // vary LargeurBerge const LargeurBerge = await calcPage.getInputById("LargeurBerge"); await calcPage.setParamMode(LargeurBerge, "var"); // create a Jet - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(18); + await openCalculator(18, navBar, listPage); + // link V0 to V (Régime uniforme) const V0 = await calcPage.getInputById("V0"); await calcPage.setParamMode(V0, "link"); @@ -309,20 +305,14 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − a link target parameter should not be able to link to another parameter", async () => { // create 1st PAB-Chute - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // upstream water level should not have link mode (only one calculator) const Z1_1 = await calcPage.getInputById("Z1"); expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(false); // create 2nd PAB-Chute - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // back to 1st calculator await navBar.clickCalculatorTab(0); diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index 97f01714a..7921b6116 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -5,6 +5,7 @@ import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; import { testedCalcTypes } from "./tested_calctypes"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; /** * For all calculators, try to calculate every parameter: check that only one parameter @@ -63,7 +64,7 @@ describe("ngHyd − check translation of all calculators", () => { for (const ct of calcTypes) { it(" − check translations of calculator type [" + ct + "]", async () => { // click calculator button (instanciate) - await listPage.clickMenuEntryForCalcType(ct); + await openCalculator(ct, navBar, listPage); // just click the "compute" button with default values // check that "compute" button is active diff --git a/e2e/cloisons.e2e-spec.ts b/e2e/cloisons.e2e-spec.ts index b134960bf..948a8103f 100644 --- a/e2e/cloisons.e2e-spec.ts +++ b/e2e/cloisons.e2e-spec.ts @@ -2,7 +2,7 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, openCalculator } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -29,11 +29,9 @@ describe("ngHyd − cloisons", () => { }); it("when all parent Nub parameters are linked, Structure parameter modes should be alterable without problem", async () => { - await navBar.clickNewCalculatorButton(); - // 1. create target module for linked parameters - await listPage.clickMenuEntryForCalcType(10); // Cloisons - await browser.pause(300); + await openCalculator(10, navBar, listPage); + // 2. create module to test await calcPage.clickCloneCalcButton(); await browser.pause(300); @@ -50,10 +48,10 @@ describe("ngHyd − cloisons", () => { // 4. change LoiDebit await changeSelectValue(await calcPage.getSelectById("select_loidebit"), 1); await browser.pause(300); - + // 5. check number of inputs in CALC mode expect(await calcPage.getCheckedCalcModeButtons().length).toBe(1); - + // 6. try calculating the module const btn = await calcPage.getCalculateButton() await btn.click(); diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index 290067e9a..91e0763fa 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { testedCalcTypes } from "./tested_calctypes"; -import { newSession, scrollPageToTop } from "./util.po"; +import { newSession, openCalculator, scrollPageToTop } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' import { SideNav } from "./sidenav.po"; @@ -49,8 +49,7 @@ describe("ngHyd − clone all calculators with all possible <select> values", () await newSession(navBar, sideNav); // click calculator button (instanciate) - await listPage.clickMenuEntryForCalcType(ct); - await browser.pause(200); + await openCalculator(ct, navBar, listPage); // get all select IDs outside Structures // get select IDs inside Structures diff --git a/e2e/clone-calc.e2e-spec.ts b/e2e/clone-calc.e2e-spec.ts index e6eff73a3..a6d425c3a 100644 --- a/e2e/clone-calc.e2e-spec.ts +++ b/e2e/clone-calc.e2e-spec.ts @@ -2,7 +2,7 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, scrollPageToTop } from "./util.po"; +import { changeSelectValue, openCalculator, scrollPageToTop } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -11,14 +11,14 @@ import { browser, $, $$, expect } from '@wdio/globals' describe("ngHyd − clone a calculator", () => { let listPage: ListPage; let calcPage: CalculatorPage; - let navbar: Navbar; + let navBar: Navbar; let prefPage: PreferencesPage; beforeAll(async () => { listPage = new ListPage(); calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); - navbar = new Navbar(); + navBar = new Navbar(); }); beforeEach(async () => { @@ -29,22 +29,17 @@ describe("ngHyd − clone a calculator", () => { }); it("when cloning a calculator, the clone should have the same values for all parameters", async () => { - await navbar.clickNewCalculatorButton(); // 1. create target modules for linked parameter - await listPage.clickMenuEntryForCalcType(3); // Régime uniforme - await browser.pause(500); + await openCalculator(3, navBar, listPage); + const debitRU = await calcPage.getInputById("calc_Q"); // "Débit" is calculated by default await calcPage.setParamMode(debitRU, "fix"); await browser.pause(500); - await navbar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(4); // Courbe de remous - await browser.pause(500); + await openCalculator(4, navBar, listPage); // 2. create source module to clone - await navbar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(2); // Section paramétrée - await browser.pause(500); + await openCalculator(2, navBar, listPage); // 3. change and store source parameter values const sourceValues = { @@ -71,8 +66,8 @@ describe("ngHyd − clone a calculator", () => { await browser.pause(500); // 4. check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().length).toBe(4); - await navbar.clickCalculatorTab(3); // n°3 should be the latest + expect(await navBar.getAllCalculatorTabs().length).toBe(4); + await navBar.clickCalculatorTab(3); // n°3 should be the latest await browser.pause(500); // 5. compare values diff --git a/e2e/cote-amont-aval-bief.e2e-spec.ts b/e2e/cote-amont-aval-bief.e2e-spec.ts index 4e2521c53..a4788ee9b 100644 --- a/e2e/cote-amont-aval-bief.e2e-spec.ts +++ b/e2e/cote-amont-aval-bief.e2e-spec.ts @@ -3,7 +3,7 @@ import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { browser, $, $$, expect } from '@wdio/globals' -import { newSession } from "./util.po"; +import { newSession, openCalculator } from "./util.po"; import { SideNav } from "./sidenav.po"; describe("ngHyd − up/downstream elevations of a reach", () => { @@ -31,10 +31,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { it("check hydraulic details availability - flow calculation", async () => { // open "up/downstream elevations of a reach" calculator - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - await listPage.clickMenuEntryForCalcType(21); - await browser.pause(200); + await openCalculator(21, navBar, listPage); // set upstream flow in calculate mode const flowCalcBtn = await $( @@ -84,9 +81,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await newSession(navBar, sideNav); // open "up/downstream elevations of a reach" calculator - // await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(21); - await browser.pause(200); + await openCalculator(21, navBar, listPage); // check details buttons status const upDetailsBtn = await $("#generate-sp-aval"); diff --git a/e2e/courbe-remous-empty-fields.e2e-spec.ts b/e2e/courbe-remous-empty-fields.e2e-spec.ts index 39a08fd4c..e393d7e84 100644 --- a/e2e/courbe-remous-empty-fields.e2e-spec.ts +++ b/e2e/courbe-remous-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("Check fields are empty in 'backwater curves' calculator when created with 'empty fields' option", () => { let listPage: ListPage; @@ -26,9 +27,7 @@ describe("Check fields are empty in 'backwater curves' calculator when created w it("", async () => { // open "backwater curves" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(4); - await browser.pause(200); + await openCalculator(4, navBar, listPage); await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], [true, true, true, true, true, true, true, true, true, true]); diff --git a/e2e/diagramme-modules.e2e-spec.ts b/e2e/diagramme-modules.e2e-spec.ts index 5d2adae7f..ab65b0149 100644 --- a/e2e/diagramme-modules.e2e-spec.ts +++ b/e2e/diagramme-modules.e2e-spec.ts @@ -3,6 +3,7 @@ import { ListPage } from "./list.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; /** * convert Mermaid formatted id ("flowchat-id-xx") to id @@ -38,9 +39,7 @@ describe("modules diagram", () => { //browser.manage().window().setPosition(2000, 30); // open predam calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(30); - await browser.pause(200); + await openCalculator(30, navBar, listPage); // open modules diagram await navBar.clickMenuButton(); diff --git a/e2e/documentation.e2e-spec.ts b/e2e/documentation.e2e-spec.ts index 39ae0c60f..9f1ba6935 100644 --- a/e2e/documentation.e2e-spec.ts +++ b/e2e/documentation.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("documentation − ", () => { let listPage: ListPage; @@ -26,13 +27,8 @@ describe("documentation − ", () => { await prefPage.changeLanguage(lang); await browser.pause(200); - // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - // open "fish ladder: fall" calculator - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // click help await calcPage.getCalculatorHelpButton().click(); diff --git a/e2e/duplicate-results.e2e-spec.ts b/e2e/duplicate-results.e2e-spec.ts index ae36dcc54..f9f58b730 100644 --- a/e2e/duplicate-results.e2e-spec.ts +++ b/e2e/duplicate-results.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("ngHyd − check that results are not duplicated", () => { let prefPage: PreferencesPage; @@ -27,9 +28,7 @@ describe("ngHyd − check that results are not duplicated", () => { it("in 'baffle fishway: setup' calculator", async () => { // open baffle fishway setup calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(28); - await browser.pause(200); + await openCalculator(28, navBar, listPage); // run calculation const calcButton = await calcPage.getCalculateButton(); diff --git a/e2e/lechapt-calmon.e2e-spec.ts b/e2e/lechapt-calmon.e2e-spec.ts index 3d4eaf9b9..1be7ef7ba 100644 --- a/e2e/lechapt-calmon.e2e-spec.ts +++ b/e2e/lechapt-calmon.e2e-spec.ts @@ -2,7 +2,7 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, openCalculator } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -31,13 +31,8 @@ describe("Lechapt&Calmon - ", () => { }); async function setup() { - // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - // open Lechapt-Calmon (pressure loss) calculator - await listPage.clickMenuEntryForCalcType(35); - await browser.pause(200); + await openCalculator(35, navBar, listPage); } it("when material is modified, results should change", async () => { diff --git a/e2e/link-parallel-devices.e2e-spec.ts b/e2e/link-parallel-devices.e2e-spec.ts index 5bae9aa32..97a1b8c9d 100644 --- a/e2e/link-parallel-devices.e2e-spec.ts +++ b/e2e/link-parallel-devices.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; import { browser, $, $$, expect } from '@wdio/globals' -import { newSession } from "./util.po"; +import { newSession, openCalculator } from "./util.po"; import { SideNav } from "./sidenav.po"; describe("ngHyd − parallel structures with multiple linked parameters − ", () => { @@ -29,31 +29,30 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( }); it("when creating Parallel Structures, devices should be linkable to one another", async () => { - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(8); - await browser.pause(200); + await openCalculator(8, navBar, listPage); + const addBtn = await calcPage.getAddStructureButton(); await addBtn.click(); await browser.pause(200); const nb1 = await calcPage.getAllLinkButtons().length; expect(nb1).toBe(8); // link buttons on children but not on parent }); - + it("when creating Cloisons, devices should be linkable to one another", async () => { await newSession(navBar, sideNav); - await listPage.clickMenuEntryForCalcType(10); - await browser.pause(200); + await openCalculator(10, navBar, listPage); + const addBtn = await calcPage.getAddStructureButton(); await addBtn.click(); await browser.pause(200); const nb2 = await calcPage.getAllLinkButtons().length; expect(nb2).toBe(6); // link buttons on children but not on parent }); - + it("when creating Dever, devices should be linkable to one another", async () => { await newSession(navBar, sideNav); - await listPage.clickMenuEntryForCalcType(9); - await browser.pause(200); + await openCalculator(9, navBar, listPage); + const addBtn = await calcPage.getAddStructureButton(); await addBtn.click(); await browser.pause(200); diff --git a/e2e/link-to-deleted-module.e2e-spec.ts b/e2e/link-to-deleted-module.e2e-spec.ts index fe62a73bc..85aeea4ee 100644 --- a/e2e/link-to-deleted-module.e2e-spec.ts +++ b/e2e/link-to-deleted-module.e2e-spec.ts @@ -3,7 +3,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' -import { newSession } from "./util.po"; +import { newSession, openCalculator } from "./util.po"; import { SideNav } from "./sidenav.po"; describe("linked parameter - ", () => { @@ -64,8 +64,7 @@ describe("linked parameter - ", () => { await newSession(navBar, sideNav); // open "fish ladder: fall" calculator - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // clone calculator await calcPage.clickCloneCalcButton(); diff --git a/e2e/linked-parameter-section-type.e2e-spec.ts b/e2e/linked-parameter-section-type.e2e-spec.ts index d663d2d9e..538aea3b4 100644 --- a/e2e/linked-parameter-section-type.e2e-spec.ts +++ b/e2e/linked-parameter-section-type.e2e-spec.ts @@ -2,7 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { CalculatorPage } from "./calculator.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, openCalculator } from "./util.po"; import { browser } from "@wdio/globals"; describe("linked parameter in calculator with section - ", () => { @@ -29,14 +29,10 @@ describe("linked parameter in calculator with section - ", () => { // browser.manage().window().setPosition(2000, 30); // open first "parametric section" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(2); - await browser.pause(200); + await openCalculator(2, navBar, listPage); // open second "parametric section" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(2); - await browser.pause(200); + await openCalculator(2, navBar, listPage); // set Q parameter to linked mode const inputQ = await calcPage.getInputById("Q"); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index b8fb8a83e..23765fbec 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -4,7 +4,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, expectNumber, loadSession } from "./util.po"; +import { changeSelectValue, expectNumber, loadSession, openCalculator } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' const fs = require("fs"); @@ -14,7 +14,7 @@ const os = require("os"); let startPage: AppPage; let listPage: ListPage; let calcPage: CalculatorPage; -let navbar: Navbar; +let navBar: Navbar; let sidenav: SideNav; let prefPage: PreferencesPage; @@ -62,7 +62,7 @@ describe("ngHyd − save and load sessions", () => { startPage = new AppPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); - navbar = new Navbar(); + navBar = new Navbar(); sidenav = new SideNav(); prefPage = new PreferencesPage(); }); @@ -74,19 +74,19 @@ describe("ngHyd − save and load sessions", () => { it("when loading session-6-calc.test.json file from home page, 6 calculators should be loaded", async () => { await startPage.navigateTo(); - await loadSession(navbar, sidenav, "./session/session-6-calc.test.json"); + await loadSession(navBar, sidenav, "./session/session-6-calc.test.json"); await browser.pause(1000); - expect(await navbar.getAllCalculatorTabs().length).toBe(6); + expect(await navBar.getAllCalculatorTabs().length).toBe(6); }); it("when loading session-optional-params.test.json file from home page, the calculator should be loaded", async () => { await startPage.navigateTo(); - await loadSession(navbar, sidenav, "./session/session-optional-params.test.json"); + await loadSession(navBar, sidenav, "./session/session-optional-params.test.json"); await browser.pause(200); - expect(await navbar.getAllCalculatorTabs().length).toBe(1); + expect(await navBar.getAllCalculatorTabs().length).toBe(1); }); it("when saving a calculator, the current parameter values should be found in the file", async () => { @@ -94,10 +94,8 @@ describe("ngHyd − save and load sessions", () => { await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); await browser.pause(200); - await navbar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(2); // Section paramétrée - await browser.pause(200); + await openCalculator(2, navBar, listPage); // Section paramétrée await changeSelectValue(await calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" @@ -136,21 +134,20 @@ describe("ngHyd − save and load sessions", () => { await prefPage.disableEvilEmptyFields(); await browser.pause(200); - // start page - await navbar.clickNewCalculatorButton(); - await browser.pause(200); + // // start page + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); } else { // empty session - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(500); await sidenav.clickNewSessionButton(); await browser.pause(200); } // open calculator - await listPage.clickMenuEntryForCalcType(ct); - await browser.pause(200); + await openCalculator(ct, navBar, listPage); // detect selects let selects = await calcPage.getAllCalculatorSelects(); @@ -177,12 +174,12 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(500); // load session - await loadSession(navbar, sidenav, filename); + await loadSession(navBar, sidenav, filename); await browser.pause(500); // the displayed calculator is now the loaded one // check the calculator has been loaded - expectNumber(`calc ${ct} select ${selId} : num calcs`, await navbar.getCalculatorEntriesCount(), 2); + expectNumber(`calc ${ct} select ${selId} : num calcs`, await navBar.getCalculatorEntriesCount(), 2); // check the select in the loaded session points to the same option const sel2 = await calcPage.getSelectById(selId); @@ -193,11 +190,11 @@ describe("ngHyd − save and load sessions", () => { expectNumber(`calc ${ct} select ${selId} : opt '${optTxt2}' index`, ind2, nextInd); // close last calculator (the loaded one) - await navbar.middleClickCalculatorTab(1); + await navBar.middleClickCalculatorTab(1); await browser.pause(200); // check last calculator has been closed - expectNumber(`calc ${ct} select ${selId} : num calcs(2)`, await navbar.getCalculatorEntriesCount(), 1); + expectNumber(`calc ${ct} select ${selId} : num calcs(2)`, await navBar.getCalculatorEntriesCount(), 1); deleteDownloadedFile(filename); diff --git a/e2e/macrorugo-remous.e2e-spec.ts b/e2e/macrorugo-remous.e2e-spec.ts index d2c17b03b..9eedf6970 100644 --- a/e2e/macrorugo-remous.e2e-spec.ts +++ b/e2e/macrorugo-remous.e2e-spec.ts @@ -2,7 +2,7 @@ import { ListPage } from "./list.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; import { browser, $, $$, expect } from '@wdio/globals' -import { isElementDisplayed } from "./util.po"; +import { isElementDisplayed, openCalculator } from "./util.po"; import { CalculatorPage } from "./calculator.po"; //TODO à réactiver après fusion de #618 dans devel @@ -28,13 +28,8 @@ xdescribe("MacroRugoRemous - ", () => { }); it("check select empty message is present when no PAM is in the session", async () => { - // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - // MacroRugoRemous calculator - await listPage.clickMenuEntryForCalcType(37); - browser.pause(200); + await openCalculator(37, navBar, listPage); // const emptyMsg = element(by.css("div .message-when-empty")); const emptyMsg = await $("div .message-when-empty"); @@ -42,40 +37,25 @@ xdescribe("MacroRugoRemous - ", () => { }); it("check select empty message is not present when a PAM exists in the session", async () => { - // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - // PAM calculator - await listPage.clickMenuEntryForCalcType(11); - browser.pause(200); + await openCalculator(11, navBar, listPage); await navBar.clickNewCalculatorButton(); await browser.pause(200); // MacroRugoRemous calculator - await listPage.clickMenuEntryForCalcType(37); - browser.pause(200); + await openCalculator(37, navBar, listPage); const emptyMsg = $("div .message-when-empty"); expect(await isElementDisplayed(emptyMsg)).toBe(false); }); it("check select error message when target PAM has no variated parameter", async () => { - // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - // PAM calculator - await listPage.clickMenuEntryForCalcType(11); - browser.pause(200); + await openCalculator(11, navBar, listPage); // MacroRugoRemous calculator - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - - await listPage.clickMenuEntryForCalcType(37); - browser.pause(200); + await openCalculator(37, navBar, listPage); const errorMsg = await $("div .select-error-message"); expect(await isElementDisplayed(errorMsg)).toBe(false); @@ -96,11 +76,7 @@ xdescribe("MacroRugoRemous - ", () => { await browser.pause(200); // MacroRugoRemous calculator - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - - await listPage.clickMenuEntryForCalcType(37); - browser.pause(200); + await openCalculator(37, navBar, listPage); const errorMsg = await $("div .select-error-message"); expect(await isElementDisplayed(errorMsg)).toBe(true); diff --git a/e2e/notes.e2e-spec.ts b/e2e/notes.e2e-spec.ts index de60a26f2..6a3139ea5 100644 --- a/e2e/notes.e2e-spec.ts +++ b/e2e/notes.e2e-spec.ts @@ -3,32 +3,32 @@ import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { SideNav } from "./sidenav.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { newSession, openApplication, openCalculator } from "./util.po"; describe("check calculator notes", () => { let startPage: AppPage; let navBar: Navbar; let listPage: ListPage; - let sidenav: SideNav; + let sideNav: SideNav; beforeAll(() => { startPage = new AppPage(); navBar = new Navbar(); listPage = new ListPage(); - sidenav = new SideNav(); + sideNav = new SideNav(); }); it(" - notes should display properly when opened from a calculator", async () => { - await startPage.navigateTo(); - await browser.pause(500); + await openApplication(startPage); + await newSession(navBar, sideNav); // open PAB: chute calculator - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // open notes await navBar.clickMenuButton(); await browser.pause(500); - await sidenav.clickNotesButton(); + await sideNav.clickNotesButton(); await browser.pause(200); // input some text @@ -44,7 +44,7 @@ describe("check calculator notes", () => { // reopen notes await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickNotesButton(); + await sideNav.clickNotesButton(); await browser.pause(200); // check text @@ -54,17 +54,16 @@ describe("check calculator notes", () => { }); it(" - notes should display properly when opened from modules diagram", async () => { - await startPage.navigateTo(); - await browser.pause(500); + await openApplication(startPage); + await newSession(navBar, sideNav); // open PAB: chute calculator - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // open notes await navBar.clickMenuButton(); await browser.pause(500); - await sidenav.clickNotesButton(); + await sideNav.clickNotesButton(); await browser.pause(200); // input some text @@ -76,7 +75,7 @@ describe("check calculator notes", () => { // open modules diagram await navBar.clickMenuButton(); await browser.pause(500); - await sidenav.clickDiagramButton(); + await sideNav.clickDiagramButton(); await browser.pause(200); // open notes diff --git a/e2e/pab-cloisons-empty-fields.e2e-spec.ts b/e2e/pab-cloisons-empty-fields.e2e-spec.ts index 81e107f2b..afe34020c 100644 --- a/e2e/pab-cloisons-empty-fields.e2e-spec.ts +++ b/e2e/pab-cloisons-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { PreferencesPage } from "./preferences.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; /** * enable evil option "empty fields on module creation" @@ -44,9 +45,7 @@ describe("ngHyd - check the cross walls calculator has empty fields - ", () => { it("in the 'generate fish ladder' dialog", async () => { // open cross walls calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(10); - await browser.pause(200); + await openCalculator(10, navBar, listPage); // fill inputs await fillInput(calcPage, "Z1"); @@ -95,9 +94,7 @@ describe("ngHyd - check the cross walls calculator has no empty field - ", () => it("after calculation", async () => { // open cross walls calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(10); - await browser.pause(200); + await openCalculator(10, navBar, listPage); // fill inputs await fillInput(calcPage, "Z1"); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index a46cf7912..4871aebe4 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -4,7 +4,7 @@ import { Navbar } from "./navbar.po"; import { AppPage } from "./app.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, loadSession, newSession, scrollPageToTop } from "./util.po"; +import { changeSelectValue, loadSession, newSession, openCalculator, scrollPageToTop } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -37,8 +37,8 @@ describe("ngHyd − Passe à Bassins", () => { it("when PAB is created from scratch", async () => { // create PAB - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(15); + await openCalculator(15, navBar, listPage); + // check that pab-table is present const innerFieldsets = await $$(".pab-data-table"); expect(await innerFieldsets.length).toBe(1); @@ -58,16 +58,16 @@ describe("ngHyd − Passe à Bassins", () => { it("complete example of all PAB modules", async () => { // PAB - chute - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(12); + await openCalculator(12, navBar, listPage); + const c_Z1 = await calcPage.getInputById("Z1"); await c_Z1.setValue("78.27"); const c_Z2 = await calcPage.getInputById("Z2"); await c_Z2.setValue("74.86"); // PAB - nombre - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(13); + await openCalculator(13, navBar, listPage); + const n_DHT = await calcPage.getInputById("DHT"); await calcPage.setParamMode(n_DHT, "link"); const n_DH = await calcPage.getInputById("DH"); @@ -77,8 +77,8 @@ describe("ngHyd − Passe à Bassins", () => { await n_N.setValue("15"); // PAB - dimensions - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(5); + await openCalculator(5, navBar, listPage); + const d_V = await calcPage.getInputById("V"); await calcPage.setParamMode(d_V, "cal"); const d_Y = await calcPage.getInputById("Y"); @@ -89,8 +89,8 @@ describe("ngHyd − Passe à Bassins", () => { await d_W.setValue("2.5"); // PAB - puissance dissipée (volume) - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(6); + await openCalculator(6, navBar, listPage); + const p_DH = await calcPage.getInputById("DH"); await calcPage.setParamMode(p_DH, "link"); const p_Q = await calcPage.getInputById("Q"); @@ -102,8 +102,8 @@ describe("ngHyd − Passe à Bassins", () => { await p_PV.setValue("150"); // PAB - cloisons - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(10); + await openCalculator(10, navBar, listPage); + const cl_LB = await calcPage.getInputById("LB"); await calcPage.setParamMode(cl_LB, "link"); const cl_BB = await calcPage.getInputById("BB"); @@ -162,11 +162,10 @@ describe("ngHyd − Passe à Bassins", () => { await newSession(navBar, sideNav); // create many Cloisons - await listPage.clickMenuEntryForCalcType(10); - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(10); - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(10); + await openCalculator(10, navBar, listPage); + await openCalculator(10, navBar, listPage); + await openCalculator(10, navBar, listPage); + // choose one of them and change its parameters await navBar.clickCalculatorTab(1); const Z1 = await calcPage.getInputById("Z1"); diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index f5f12df4b..5c4fafa55 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -3,7 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { AppPage } from "./app.po"; -import { loadSession } from "./util.po"; +import { loadSession, openCalculator } from "./util.po"; import { SideNav } from "./sidenav.po"; import { browser, $, $$, expect } from '@wdio/globals' @@ -33,10 +33,7 @@ describe("Parallel structures - ", () => { it("check calculated parameter remains the same when copying a structure", async () => { // open "fish ladder: cross walls" calculator - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - await listPage.clickMenuEntryForCalcType(10); - await browser.pause(200); + await openCalculator(10, navBar, listPage); // check L in first structure calc toggle is not checked const L1 = await calcPage.getInputById("0_L"); diff --git a/e2e/prebarrages-results.e2e-spec.ts b/e2e/prebarrages-results.e2e-spec.ts index b7e83b512..82ea0875b 100644 --- a/e2e/prebarrages-results.e2e-spec.ts +++ b/e2e/prebarrages-results.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' -import { loadSession, scrollToElement } from "./util.po"; +import { loadSession, openCalculator, scrollToElement } from "./util.po"; import { SideNav } from "./sidenav.po"; /** @@ -35,10 +35,7 @@ describe("Prébarrages results - ", () => { it("every module shoud have results", async () => { // create prébarrage calculator - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - await listPage.clickMenuEntryForCalcType(30); - await browser.pause(200); + await openCalculator(30, navBar, listPage); // run calculation const calcButton = await calcPage.getCalculateButton(); diff --git a/e2e/predam-empty-fields.e2e-spec.ts b/e2e/predam-empty-fields.e2e-spec.ts index 66ad0806c..096898b22 100644 --- a/e2e/predam-empty-fields.e2e-spec.ts +++ b/e2e/predam-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; /** * check that fields are empty on creation @@ -29,11 +30,8 @@ describe("ngHyd − check that predam fields are empty", () => { }); it("on creation", async () => { - //browser.manage().window().setPosition(2000, 30); // open predam calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(30); - await browser.pause(200); + await openCalculator(30, navBar, listPage); // check upstream inputs await calcPage.checkEmptyInput("Q"); @@ -68,9 +66,7 @@ describe("ngHyd − check that predam fields are empty", () => { it("when a basin is added", async () => { // open predam calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(30); - await browser.pause(200); + await openCalculator(30, navBar, listPage); // add basin const addBasinBtn = await $("#add-basin"); @@ -90,9 +86,7 @@ describe("ngHyd − check that predam fields are empty", () => { it("when a wall is added", async () => { // open predam calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(30); - await browser.pause(200); + await openCalculator(30, navBar, listPage); // add wall const addWallBtn = await $("#add-wall"); diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 07c936d1e..b2119b489 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -3,7 +3,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" import { browser, $, $$, expect } from '@wdio/globals' -import { changeSelectValue, loadSession, scrollToElement } from "./util.po"; +import { changeSelectValue, loadSession, openCalculator, scrollToElement } from "./util.po"; import { AppPage } from "./app.po"; import { SideNav } from "./sidenav.po"; @@ -37,9 +37,7 @@ describe("predams - ", () => { await prefPage.setIterationCount(5); // open predam calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(30); - await browser.pause(200); + await openCalculator(30, navBar, listPage); // run calculation const calcButton = await calcPage.getCalculateButton(); diff --git a/e2e/pressure-loss-empty-fields.e2e-spec.ts b/e2e/pressure-loss-empty-fields.e2e-spec.ts index 53b14e380..8278f2474 100644 --- a/e2e/pressure-loss-empty-fields.e2e-spec.ts +++ b/e2e/pressure-loss-empty-fields.e2e-spec.ts @@ -2,7 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, openCalculator } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'pressure loss' calculator when created with 'empty fields' option -", () => { @@ -11,7 +11,7 @@ describe("Check fields are empty in 'pressure loss' calculator when created with let calcPage: CalculatorPage; let prefPage: PreferencesPage; - beforeAll( () => { + beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); @@ -27,9 +27,7 @@ describe("Check fields are empty in 'pressure loss' calculator when created with it("with Lechapt-Calmon pressure loss law", async () => { // open "pressure loss" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(35); - await browser.pause(200); + await openCalculator(35, navBar, listPage); // select Lechapt-Calmon pressure loss law const materialSelect = await calcPage.getSelectById("select_pressurelosstype"); diff --git a/e2e/pressure-loss.e2e-spec.ts b/e2e/pressure-loss.e2e-spec.ts index 1e8d1e21f..66537c8e8 100644 --- a/e2e/pressure-loss.e2e-spec.ts +++ b/e2e/pressure-loss.e2e-spec.ts @@ -2,7 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, openCalculator } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' describe("Pressure loss - ", () => { @@ -28,9 +28,7 @@ describe("Pressure loss - ", () => { describe("modify pressure loss law displays the appropriate fields - ", () => { it("Lechapt&Calmon", async () => { // open "pressure loss" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(35); - await browser.pause(200); + await openCalculator(35, navBar, listPage); // select Lechapt-Calmon pressure loss law const materialSelect = await calcPage.getSelectById("select_pressurelosstype"); @@ -50,9 +48,7 @@ describe("Pressure loss - ", () => { it("Strickler", async () => { // open "pressure loss" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(35); - await browser.pause(200); + await openCalculator(35, navBar, listPage); // select Strickler pressure loss law const materialSelect = await calcPage.getSelectById("select_pressurelosstype"); diff --git a/e2e/regime-uniforme-empty-fields.e2e-spec.ts b/e2e/regime-uniforme-empty-fields.e2e-spec.ts index f91783104..4725067b5 100644 --- a/e2e/regime-uniforme-empty-fields.e2e-spec.ts +++ b/e2e/regime-uniforme-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("Check fields are empty in 'uniform flow' calculator when created with 'empty fields' option", () => { let listPage: ListPage; @@ -26,9 +27,7 @@ describe("Check fields are empty in 'uniform flow' calculator when created with it("", async () => { // open "uniform flow" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(3); - await browser.pause(200); + await openCalculator(3, navBar, listPage); expect(await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])) }); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index 48cdcf57f..2fd14288e 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; -import { changeSelectValue, loadSession } from "./util.po"; +import { changeSelectValue, loadSession, openCalculator } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -32,11 +32,9 @@ describe("ngHyd − remous", () => { }); it("when leaving calculated remous page then coming back to it, logs should not be duplicated", async () => { - await navBar.clickNewCalculatorButton(); // 1. create new Remous - await listPage.clickMenuEntryForCalcType(4); - await browser.pause(300); + await openCalculator(4, navBar, listPage); // 2. calculate it, there should be 6 messages in the log const calcBtn = await calcPage.getCalculateButton() @@ -59,11 +57,8 @@ describe("ngHyd − remous", () => { }); it("Calculation with large bed width should run successfully", async () => { - await navBar.clickNewCalculatorButton(); - // 1. create new Remous - await listPage.clickMenuEntryForCalcType(4); - await browser.pause(300); + await openCalculator(4, navBar, listPage); // 2. Set to trapezoidal section with bank slope of 2m/m and 20 meter width bed await changeSelectValue(await calcPage.getSelectById("select_section"), 2); diff --git a/e2e/reset-param-mode.e2e-spec.ts b/e2e/reset-param-mode.e2e-spec.ts index 1a1c7ac6f..b686e0c33 100644 --- a/e2e/reset-param-mode.e2e-spec.ts +++ b/e2e/reset-param-mode.e2e-spec.ts @@ -1,33 +1,36 @@ import { ListPage } from "./list.po"; import { browser, $, $$, expect } from '@wdio/globals' -import { newSession } from "./util.po"; +import { newSession, openApplication, openCalculator } from "./util.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { CalculatorPage } from "./calculator.po"; +import { AppPage } from "./app.po"; /** * Parameter mode should be set to its previous mode (fixed/var/...) when cancel is pressed * in variable mode edition dialog */ describe("ngHyd - check parameter mode is set to its previous value - ", () => { + let startPage: AppPage; let listPage: ListPage; let navBar: Navbar; let sideNav: SideNav; let calcPage: CalculatorPage; beforeAll(() => { + startPage = new AppPage(); listPage = new ListPage(); + navBar = new Navbar(); + sideNav = new SideNav(); calcPage = new CalculatorPage(); }); it("when min/max/list values dialog is cancelled on 'fish ladder: fall' calculator", async () => { - // start page - await listPage.navigateTo(); - await browser.pause(300); + await openApplication(startPage); + await newSession(navBar, sideNav); // open 'PAB fall' calculator - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // click "calc" radio on Z1 parameter const z1calcbtn = await calcPage.getInputRadioButtonFromId("Z1", "cal"); @@ -52,13 +55,11 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { }); it("when min/max/list values dialog is cancelled on 'fish ladder' calculator", async () => { - // start page - await listPage.navigateTo(); - await browser.pause(300); + await openApplication(startPage); + await newSession(navBar, sideNav); // open PAB calculator - await listPage.clickMenuEntryForCalcType(15); - await browser.pause(500); + await openCalculator(15, navBar, listPage); // "fixed" radio on Q parameter const qfixbtn = await calcPage.getInputRadioButtonFromId("Q", "fix"); diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index 175af9a9b..fad95d5f0 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -4,6 +4,7 @@ import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("Check results are reset after application settings modification - ", () => { let listPage: ListPage; @@ -36,10 +37,7 @@ describe("Check results are reset after application settings modification - ", ( await input.setValue(val1.toString()); // open "fish ladder: fall" calculator - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // click "compute" button const calcButton = await calcPage.getCalculateButton(); diff --git a/e2e/section-empty-fields.e2e-spec.ts b/e2e/section-empty-fields.e2e-spec.ts index 5d867024c..73496834c 100644 --- a/e2e/section-empty-fields.e2e-spec.ts +++ b/e2e/section-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("Check fields are empty in 'parametric section' calculator when created with 'empty fields' option", () => { let listPage: ListPage; @@ -26,9 +27,7 @@ describe("Check fields are empty in 'parametric section' calculator when created it("", async () => { // open "parametric section" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(2); - await browser.pause(200); + await openCalculator(2, navBar, listPage); expect(await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])); }); diff --git a/e2e/select-default-value.e2e-spec.ts b/e2e/select-default-value.e2e-spec.ts index 058408310..5658675d1 100644 --- a/e2e/select-default-value.e2e-spec.ts +++ b/e2e/select-default-value.e2e-spec.ts @@ -3,6 +3,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("check the select default value - ", () => { let prefPage: PreferencesPage; @@ -29,9 +30,7 @@ describe("check the select default value - ", () => { it("in the 'backwater curve' calculator", async () => { // open backwater curve calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(4); - await browser.pause(200); + await openCalculator(4, navBar, listPage); // in the calculator configuration file, the default resolution method is 'Trapezes'. // let's check this... @@ -42,9 +41,7 @@ describe("check the select default value - ", () => { it("in the 'up/downstream elevations of a reach' calculator", async () => { // open "up/downstream elevations of a reach" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(21); - await browser.pause(200); + await openCalculator(21, navBar, listPage); // in the calculator configuration file, the default section method is 'Rectangulaire'. // let's check this... diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 88fe956ea..6bacf6639 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -77,16 +77,12 @@ describe("Solveur - ", () => { await newSession(navBar, sideNav); // 1. create empty Solveur - openCalculator(22, navBar, listPage); + await openCalculator(22, navBar, listPage); // 2. create PAB:Chute, PAB:Nombre and PAB:Puissance linked to one another - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(12); // PAB:Chute - await browser.pause(500); - await navBar.clickNewCalculatorButton(); + await openCalculator(12, navBar, listPage); // PAB:Chute + await openCalculator(13, navBar, listPage); // PAB:Nombre - await listPage.clickMenuEntryForCalcType(13); // PAB:Nombre - await browser.pause(500); // link DHT to PAB:Chute.DH const dht = await calcPage.getInputById("DHT"); await calcPage.setParamMode(dht, "link"); @@ -94,9 +90,8 @@ describe("Solveur - ", () => { const dh_nombre = await calcPage.getInputById("DH"); await calcPage.setParamMode(dh_nombre, "cal"); - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(6); // PAB:Puissance - await browser.pause(500); + await openCalculator(6, navBar, listPage); // PAB:Puissance + // link DH to PAB:Nombre.DH const dh_puiss = await calcPage.getInputById("DH"); await calcPage.setParamMode(dh_puiss, "link"); diff --git a/e2e/translation.e2e-spec.ts b/e2e/translation.e2e-spec.ts index d87a45a7b..dffdf4997 100644 --- a/e2e/translation.e2e-spec.ts +++ b/e2e/translation.e2e-spec.ts @@ -4,6 +4,7 @@ import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("Check translation", () => { let listPage: ListPage; @@ -31,9 +32,7 @@ describe("Check translation", () => { await prefPage.changeLanguage(1); // fr // open "fish ladder: fall" calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // set Z2 to variated mode const inpZ2 = await calcPage.getInputById("Z2"); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index ec4a1c033..f9db46269 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -3,6 +3,7 @@ import { Navbar } from './navbar.po'; import { SideNav } from './sidenav.po'; import { ListPage } from './list.po'; import { AppPage } from './app.po'; + /** * scroll page to make element visible */ diff --git a/e2e/valeurs-erronees.e2e-spec.ts b/e2e/valeurs-erronees.e2e-spec.ts index 2e88357fc..a332dced9 100644 --- a/e2e/valeurs-erronees.e2e-spec.ts +++ b/e2e/valeurs-erronees.e2e-spec.ts @@ -3,6 +3,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { openCalculator } from "./util.po"; describe("ngHyd - check invalid values are removed - ", () => { let listPage: ListPage; @@ -27,18 +28,14 @@ describe("ngHyd - check invalid values are removed - ", () => { it("when switching to another calculator", async () => { // open PAB dimensions calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(5); - await browser.pause(200); + await openCalculator(5, navBar, listPage); // modify W input with invalid value const inputW = await calcPage.getInputById("W"); await inputW.setValue("-1"); // open another calculator - await navBar.clickNewCalculatorButton(); - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // back to first calculator await navBar.openNthCalculator(0); diff --git a/e2e/variable-param-cancel.e2e-spec.ts b/e2e/variable-param-cancel.e2e-spec.ts index fedb54603..d141b2d2e 100644 --- a/e2e/variable-param-cancel.e2e-spec.ts +++ b/e2e/variable-param-cancel.e2e-spec.ts @@ -1,29 +1,36 @@ -import { brotliCompress } from "zlib"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { newSession, openApplication, openCalculator } from "./util.po"; +import { Navbar } from "./navbar.po"; +import { AppPage } from "./app.po"; +import { SideNav } from "./sidenav.po"; /** * Check that a cancel button is present in min/max/list edition dialog * for variable parameters */ describe("ngHyd - check cancel button for variable parameters - ", () => { + let startPage: AppPage; let listPage: ListPage; let calcPage: CalculatorPage; + let navBar: Navbar; + let sideNav: SideNav; beforeAll(() => { + startPage = new AppPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); + navBar = new Navbar(); + sideNav = new SideNav(); }); it("when min/max/list values dialog opens, a cancel button should be present", async () => { - // start page - await listPage.navigateTo(); - await browser.pause(200); + await openApplication(startPage); + await newSession(navBar, sideNav); // open PAB chute - await listPage.clickMenuEntryForCalcType(12); - await browser.pause(200); + await openCalculator(12, navBar, listPage); // click "var" radio on Z1 parameter const z1btn = await calcPage.getInputRadioButtonFromId("Z1", "var"); -- GitLab From 785e02812aed09a58c6b141ba23ebe69a10165d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 12 May 2023 13:39:24 +0200 Subject: [PATCH 278/285] fix(e2e): failing test refs #620 --- e2e/reset-results.e2e-spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index fad95d5f0..b99ce82ac 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -32,7 +32,7 @@ describe("Check results are reset after application settings modification - ", ( async function runTestWithParameter(param: string, val1: number, val2: number) { // set starting compute precision - const input = await prefPage.getInputFromName(param); + let input = await prefPage.getInputFromName(param); await input.clearValue(); await input.setValue(val1.toString()); @@ -57,6 +57,7 @@ describe("Check results are reset after application settings modification - ", ( await browser.pause(200); // modify compute precision + input = await prefPage.getInputFromName(param); await input.setValue(val2.toString()); await browser.pause(500); -- GitLab From 6ab918a630589d077a24e90d3e055c8d039dce3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 12 May 2023 15:32:36 +0200 Subject: [PATCH 279/285] fix: predams: input parameter changed after calculation refs #620 --- src/app/formulaire/elements/fieldset.ts | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts index 73e6b8535..179920686 100644 --- a/src/app/formulaire/elements/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -218,29 +218,6 @@ export class FieldSet extends FormulaireElement implements IProperties { this.clearFields(); this.parseFields(); } - else { - const nub = this.parentForm.currentNub; - for (const e of this.parentForm.allFormElements) { - if (e instanceof NgParameter) { - const p: ParamDefinition = nub.getParameter(e.symbol); - switch (e.paramDefinition.valueMode) { - case ParamValueMode.SINGLE: - e.setValue(this, p.singleValue); - break; - - case ParamValueMode.MINMAX: - e.setMinValue(this, p.min); - e.setMaxValue(this, p.max); - e.setStepValue(this, p.step); - break; - - case ParamValueMode.LISTE: - e.setValueList(this, p.valueList); - break; - } - } - } - } this.updateLocalisation(); -- GitLab From e9147c67f405e96480bc9769904ed3c4f6d76499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 22 May 2023 15:05:30 +0200 Subject: [PATCH 280/285] fix(e2e): warnings during tests execution (stale element, element click intercepted) refs #620 --- e2e/calculate-linked-params.e2e-spec.ts | 4 +++- e2e/calculator.po.ts | 9 +++++++++ e2e/compute-reset-chained-links.e2e-spec.ts | 4 +--- e2e/cote-amont-aval-bief.e2e-spec.ts | 6 ++++-- e2e/duplicate-results.e2e-spec.ts | 1 - e2e/linked-parameter-section-type.e2e-spec.ts | 3 ++- e2e/load-save-session.e2e-spec.ts | 7 +++---- e2e/preferences.po.ts | 2 +- e2e/solveur.e2e-spec.ts | 3 ++- e2e/translation.e2e-spec.ts | 14 ++++++++------ e2e/util.po.ts | 1 + e2e/valeurs-erronees.e2e-spec.ts | 3 ++- 12 files changed, 36 insertions(+), 21 deletions(-) diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index 5a5306f41..38f708386 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -308,7 +308,7 @@ describe("ngHyd − calculate with linked parameters", () => { await openCalculator(12, navBar, listPage); // upstream water level should not have link mode (only one calculator) - const Z1_1 = await calcPage.getInputById("Z1"); + let Z1_1 = await calcPage.getInputById("Z1"); expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(false); // create 2nd PAB-Chute @@ -319,6 +319,7 @@ describe("ngHyd − calculate with linked parameters", () => { await browser.pause(200); // upstream water level should have link mode (now there are 2 calculators) + Z1_1 = await calcPage.getInputById("Z1"); // re-request input to avoid "Request encountered a stale element - terminating request" warning (due to tab change) expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(true); // back to 2nd calculator @@ -334,6 +335,7 @@ describe("ngHyd − calculate with linked parameters", () => { await browser.pause(200); // upstream water level should not have link mode (already a link target) + Z1_1 = await calcPage.getInputById("Z1"); // re-request input to avoid "Request encountered a stale element - terminating request" warning (due to tab change) expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(false); }); }); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index ee185aaa7..bf82481cb 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -35,6 +35,14 @@ export class CalculatorPage { return $$("mat-select[id^=select_]"); // all mat-select with id starting with "select_" } + /** + * return select count which id is in the form "select_*" + */ + async getCalculatorSelectCount() { + const sels = await $$("mat-select[id^=select_]"); // all mat-select with id starting with "select_" + return sels.length; + } + /** * get the option count of a select */ @@ -201,6 +209,7 @@ export class CalculatorPage { */ async getInputRadioButton(input, mode: string) { const tag = await input.getTagName(); + await browser.pause(100); const root = tag === "input" ? await this.findParentContainer(input) : input; return await root.$(`mat-button-toggle.radio_${mode}`); } diff --git a/e2e/compute-reset-chained-links.e2e-spec.ts b/e2e/compute-reset-chained-links.e2e-spec.ts index e0577d246..89ef7a886 100644 --- a/e2e/compute-reset-chained-links.e2e-spec.ts +++ b/e2e/compute-reset-chained-links.e2e-spec.ts @@ -123,9 +123,7 @@ describe("ngHyd − compute then reset chained results − ", () => { await newSession(navBar, sidenav); // disable evil option "empty fields on module creation" - await prefPage.navigateTo(); - await prefPage.disableEvilEmptyFields(); - await browser.pause(200); + await prefPage.setEmptyFields(false); // start page await navBar.clickNewCalculatorButton(); diff --git a/e2e/cote-amont-aval-bief.e2e-spec.ts b/e2e/cote-amont-aval-bief.e2e-spec.ts index a4788ee9b..e001fbcb0 100644 --- a/e2e/cote-amont-aval-bief.e2e-spec.ts +++ b/e2e/cote-amont-aval-bief.e2e-spec.ts @@ -40,7 +40,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await flowCalcBtn.click(); // check details buttons are disabled - const upDetailsBtn = await $("#generate-sp-aval"); + let upDetailsBtn = await $("#generate-sp-aval"); expect(await upDetailsBtn.isEnabled()).toBe(false); const downDetailsBtn = await $("#generate-sp-amont"); expect(await downDetailsBtn.isEnabled()).toBe(false); @@ -69,6 +69,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // click downstream hydraulic details button await navBar.openNthCalculator(0); + upDetailsBtn = await $("#generate-sp-aval"); // re-request element to avoid "Request encountered a stale element - terminating request" warning (due to tab change) await upDetailsBtn.click(); await browser.pause(500); @@ -84,7 +85,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await openCalculator(21, navBar, listPage); // check details buttons status - const upDetailsBtn = await $("#generate-sp-aval"); + let upDetailsBtn = await $("#generate-sp-aval"); expect(await upDetailsBtn.isEnabled()).toBe(true); const downDetailsBtn = await $("#generate-sp-amont"); expect(await downDetailsBtn.isEnabled()).toBe(false); @@ -108,6 +109,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // click downstream hydraulic details button await navBar.openNthCalculator(0); + upDetailsBtn = await $("#generate-sp-aval"); // re-request element to avoid "Request encountered a stale element - terminating request" warning (due to tab change) await upDetailsBtn.click(); await browser.pause(500); diff --git a/e2e/duplicate-results.e2e-spec.ts b/e2e/duplicate-results.e2e-spec.ts index f9f58b730..b567a2144 100644 --- a/e2e/duplicate-results.e2e-spec.ts +++ b/e2e/duplicate-results.e2e-spec.ts @@ -38,7 +38,6 @@ describe("ngHyd − check that results are not duplicated", () => { // check result count const fixRows = await calcPage.getAllFixedResultsRows(); const nbRows = fixRows.length; - console.log(nbRows); expect(nbRows).toBe(24); // boundaries are included }); }); diff --git a/e2e/linked-parameter-section-type.e2e-spec.ts b/e2e/linked-parameter-section-type.e2e-spec.ts index 538aea3b4..c6a63f70f 100644 --- a/e2e/linked-parameter-section-type.e2e-spec.ts +++ b/e2e/linked-parameter-section-type.e2e-spec.ts @@ -35,13 +35,14 @@ describe("linked parameter in calculator with section - ", () => { await openCalculator(2, navBar, listPage); // set Q parameter to linked mode - const inputQ = await calcPage.getInputById("Q"); + let inputQ = await calcPage.getInputById("Q"); await calcPage.setParamMode(inputQ, "link"); // change section type await changeSelectValue(await calcPage.getSelectById("select_section"), 3); // mode "parabolique" // check Q is still in linked mode + inputQ = await calcPage.getInputById("Q"); // re-request input to avoid "Request encountered a stale element - terminating request" warning expect(await calcPage.inputIsInLinkedMode(inputQ)).toBe(true); }); }); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 23765fbec..29c1cc67a 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -150,10 +150,9 @@ describe("ngHyd − save and load sessions", () => { await openCalculator(ct, navBar, listPage); // detect selects - let selects = await calcPage.getAllCalculatorSelects(); - const nsel = selects.length; + const nsel = await calcPage.getCalculatorSelectCount(); for (let s = 0; s < nsel; s++) { - const sel = selects[s]; + const sel = await calcPage.getAllCalculatorSelects()[s]; const selId = await sel.getAttribute("id"); const options = await calcPage.getMatselectOptionsText(sel); @@ -199,7 +198,7 @@ describe("ngHyd − save and load sessions", () => { deleteDownloadedFile(filename); // get selects once again since page has been replaced (session load) - selects = await calcPage.getAllCalculatorSelects(); + const selects = await calcPage.getAllCalculatorSelects(); // restore select previous option, other selects presence may depend on it (eg. pressure loss calculator) await changeSelectValue(selects[s], ind); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 57f921dd1..91d98abcc 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -69,7 +69,7 @@ export class PreferencesPage { */ async setEmptyFields(b: boolean) { await this.navigateTo(); - await browser.pause(200); + await browser.pause(1000); // 1000 is necessary to avoid "element click intercepted" warning if (b) { await this.enableEvilEmptyFields(); diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 6bacf6639..b4e37f820 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -49,7 +49,7 @@ describe("Solveur - ", () => { const ntcV = await calcPage.getSelectValueText(ntc); expect(ntcV).toContain("PAB : puissance / Puissance dissipée (PV)"); // check targetted result - const ntt = await calcPage.getSelectById("select_target_result"); + let ntt = await calcPage.getSelectById("select_target_result"); const nttV = await calcPage.getSelectValueText(ntt); expect(nttV).toContain("Puissance dissipée (PV)"); // check searched Parameter @@ -69,6 +69,7 @@ describe("Solveur - ", () => { // change targetted Nub, check that targetted result changes too await changeSelectValue(ntc, 0); + ntt = await calcPage.getSelectById("select_target_result"); // re-request element to avoid "Request encountered a stale element - terminating request" warning (probably due to select change) const nttV2 = await calcPage.getSelectValueText(ntt); expect(nttV2).not.toContain("Puissance dissipée (PV)"); }); diff --git a/e2e/translation.e2e-spec.ts b/e2e/translation.e2e-spec.ts index dffdf4997..16c41d2d4 100644 --- a/e2e/translation.e2e-spec.ts +++ b/e2e/translation.e2e-spec.ts @@ -11,14 +11,12 @@ describe("Check translation", () => { let navBar: Navbar; let calcPage: CalculatorPage; let prefPage: PreferencesPage; - let sideNav: SideNav; beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); - sideNav = new SideNav(); }); beforeEach(async () => { @@ -43,21 +41,21 @@ describe("Check translation", () => { await browser.pause(500); // "variable for X axis" select label - const selXaxis = await calcPage.getSelectById("selectX"); + let selXaxis = await calcPage.getSelectById("selectX"); expect(await calcPage.getMatselectCurrentOptionText(selXaxis)).toEqual("Cote aval"); // "variable for Y axis" select label - const selYaxis = await calcPage.getSelectById("selectY"); + let selYaxis = await calcPage.getSelectById("selectY"); expect(await calcPage.getMatselectCurrentOptionText(selYaxis)).toEqual("DH : Chute (m)"); // fixed results variables - const frr = await calcPage.getAllFixedResultsRows(); + let frr = await calcPage.getAllFixedResultsRows(); let row0 = frr[0]; let lbl1 = await row0.$("td").getText(); expect(lbl1).toEqual("Cote amont (m)"); // variated results headers - const vrh = await calcPage.getAllVariatedResultsTableHeaders(); + let vrh = await calcPage.getAllVariatedResultsTableHeaders(); let lbl2 = await vrh[0].getText(); expect(lbl2).toEqual("Cote aval"); let lbl3 = await vrh[1].getText(); @@ -75,17 +73,21 @@ describe("Check translation", () => { await browser.pause(200); // "variable for X axis" select label + selXaxis = await calcPage.getSelectById("selectX"); // re-request element to avoid "Request encountered a stale element - terminating request" warning (due tab change) expect(await calcPage.getMatselectCurrentOptionText(selXaxis)).toEqual("Downstream elevation"); // "variable for Y axis" select label + selYaxis = await calcPage.getSelectById("selectY"); // avoid "Request encountered a stale element - terminating request" warning (due tab change) expect(await calcPage.getMatselectCurrentOptionText(selYaxis)).toEqual("DH : Fall (m)"); // fixed results variables + frr = await calcPage.getAllFixedResultsRows(); // re-request element to avoid "Request encountered a stale element - terminating request" warning (due to pref modifcation -> page update) row0 = frr[0]; lbl1 = await row0.$("td").getText(); expect(lbl1).toEqual("Upstream elevation (m)"); // variated results headers + vrh = await calcPage.getAllVariatedResultsTableHeaders(); // re-request element to avoid "Request encountered a stale element - terminating request" warning (due to pref modifcation -> page update) lbl2 = await vrh[0].getText(); expect(lbl2).toEqual("Downstream elevation"); lbl3 = await vrh[1].getText(); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index f9db46269..d0c59aa91 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -85,6 +85,7 @@ export async function openApplication(startPage: AppPage) { export async function openCalculator(id: number, navBar: Navbar, listPage: ListPage) { const ncButton = await navBar.getNewCalculatorButton(); + await browser.pause(100); // avoid "webdriver: Request encountered a stale element - terminating request" warning if (await ncButton.isExisting()) { await scrollToElement(ncButton); if (await ncButton.isDisplayed()) { diff --git a/e2e/valeurs-erronees.e2e-spec.ts b/e2e/valeurs-erronees.e2e-spec.ts index a332dced9..46281237e 100644 --- a/e2e/valeurs-erronees.e2e-spec.ts +++ b/e2e/valeurs-erronees.e2e-spec.ts @@ -31,7 +31,7 @@ describe("ngHyd - check invalid values are removed - ", () => { await openCalculator(5, navBar, listPage); // modify W input with invalid value - const inputW = await calcPage.getInputById("W"); + let inputW = await calcPage.getInputById("W"); await inputW.setValue("-1"); // open another calculator @@ -42,6 +42,7 @@ describe("ngHyd - check invalid values are removed - ", () => { await browser.pause(200); // check invalid value is removed + inputW = await calcPage.getInputById("W"); // re-request element to avoid "Request encountered a stale element - terminating request" warning (due tab change) const w = await inputW.getValue(); expect(w).toEqual(""); -- GitLab From 2c92866969f32f3f5003167b8e5c34d2b1040fd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 23 May 2023 13:59:14 +0200 Subject: [PATCH 281/285] fix(e2e): merge conflicts/failing tests refs #620 --- e2e/macrorugo-remous.e2e-spec.ts | 2 +- e2e/pab-cloisons-empty-fields.e2e-spec.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e/macrorugo-remous.e2e-spec.ts b/e2e/macrorugo-remous.e2e-spec.ts index 9eedf6970..14815aa4f 100644 --- a/e2e/macrorugo-remous.e2e-spec.ts +++ b/e2e/macrorugo-remous.e2e-spec.ts @@ -5,7 +5,7 @@ import { browser, $, $$, expect } from '@wdio/globals' import { isElementDisplayed, openCalculator } from "./util.po"; import { CalculatorPage } from "./calculator.po"; -//TODO à réactiver après fusion de #618 dans devel +//TODO à réactiver après fusion de nghyd#609 jalhyd#325 dans devel xdescribe("MacroRugoRemous - ", () => { let prefPage: PreferencesPage; let listPage: ListPage; diff --git a/e2e/pab-cloisons-empty-fields.e2e-spec.ts b/e2e/pab-cloisons-empty-fields.e2e-spec.ts index afe34020c..d1443fb78 100644 --- a/e2e/pab-cloisons-empty-fields.e2e-spec.ts +++ b/e2e/pab-cloisons-empty-fields.e2e-spec.ts @@ -65,7 +65,7 @@ describe("ngHyd - check the cross walls calculator has empty fields - ", () => { // click "generate PAB" button const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); - await browser.pause(1000); + await browser.pause(2000); await calcPage.checkEmptyOrFilledFields(["generatePabNbBassins"], [true]); }); -- GitLab From 85fd40eca9f9a81fe45b8d1729eeb198301571e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 23 May 2023 14:56:18 +0200 Subject: [PATCH 282/285] update CHANGELOG to 4.17.0 --- CHANGELOG.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0364a248c..31365a32d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,48 @@ # Historique des versions +### 4.17.0 - 2023-04-12 + +#### Correction de bogues + +* Documentation : Les formules de math ne s'affichent pas dans la version anglaise ([nghyd#608](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/608)) +* Perte de charge : les paramètres de loi ne sont pas modifiés quand on change le type de perte ([nghyd#611](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/611)) +* Solveur multimodule : le module existe toujours après suppression ([jalhyd#342](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/342), [nghyd#601](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/601)) +* Notes de session : la note ne s'affiche pas directement ([nghyd#602](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/602)) +* PWA : l'application ne se met pas à jour ([nghyd#604](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/604)) +* Traduction des résultats : tous les libellés ne sont pas modifiés quand on change de langue ([nghyd#586](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/586)) +* Un paramètre cible d'un lien ne doit pas se lier à un autre paramètre ([jalhyd#341](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/341), [nghyd#605](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/605)) +* Application PWA inaccessible hors ligne ([nghyd#588](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/588)) +* Régression : le fichier de session n'enregistre plus le type de section ([nghyd#592](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/592)) +* PAB : la précision d'affichage a une influence sur la valeur des paramètres ([nghyd#543](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/543)) +* Le bouton calculer est activé malgré un champ en erreur ([nghyd#616](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/616)) +* Solveur multimodule : impossibilité d'utilisation sur un seul module ([nghyd#606](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/606)) +* PreBarrage: Changement intempestif des paramètres d'ouvrage au changement d'équation ([nghyd#620](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/620)) +* PreBarrage: il n'y a plus aucun résultat au niveau des cloisons ([nghyd#619](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/619)) + +#### Nouvelles fonctionnalités + +* Structure : Ajout d'une erreur sur l'ennoiement ([jalhyd#302](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/302), [nghyd#614](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/614)) +* Conduites en charge : ajout de la loi de Strickler ([jalhyd#215](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/215), [nghyd#596](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/596)) +* Ajout d'une redirection vers https pour les adresses http ([nghyd#587](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/587)) +* Ajout du module courbe de remous d'une passe à macro-rugosité ([jalhyd#325](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/325), [nghyd#609](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/609)) + +#### Changements + +* Courbe de remous : rendre facultatif l'une des deux conditions limites en cote ([jalhyd#343](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/343), [nghyd#610](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/610)) +* Restructurer Lechapt et Calmon pour de nouvelles lois de pertes de charge ([jalhyd#334](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/334), [jalhyd#590](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/590), [nghyd#585](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/585)) +* Prébarrages : interdire de supprimer le dernier bassin ([nghyd#582](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/582)) +* PAB: Alignement à droite des cellules numériques dans le tableau des bassins et cloisons ([nghyd#583](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/583)) +* PAB: Optimisation du tableau : déplacement de la colonne "cote de radier amont" ([nghyd#615](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/615)) +* Documentation: localisation des dépendances javascript dans un seul dossier ([nghyd#612](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/612)) +* Migration des tests e2e vers WebDriverIO ([nghyd#618](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/618)) + +#### Documentation + +* Passe à ralentisseurs : ajouter de liens vers les pages de documentation des types de passes ([nghyd#598](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/598)) +* Perte de charge : documentation du module ([nghyd#597](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/597)) +* Modification de la documentation sur le coefficient de débit d'une fente ([nghyd#595](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/595)) +* Ajout d'une documentation pour l'installation de Cassiopée PWA ([nghyd#617](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/617)) + ### 4.16.3 - 2023-01-11 #### Correction de bogues -- GitLab From 36efca98556f040d74afe090dad98db60fbd027e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 24 May 2023 09:29:20 +0200 Subject: [PATCH 283/285] developer/readme update --- DEVELOPERS.md | 32 ++++++++++++++++---------------- README.md | 45 +-------------------------------------------- 2 files changed, 17 insertions(+), 60 deletions(-) diff --git a/DEVELOPERS.md b/DEVELOPERS.md index 2888e23d6..6be017691 100644 --- a/DEVELOPERS.md +++ b/DEVELOPERS.md @@ -20,7 +20,7 @@ La documentation est générée avec Mkdocs, pandoc et LaTeX. * typescript * angular * angular-material - * protractor + * webdriverIO * electron * service workers * mkdocs @@ -56,7 +56,7 @@ L'interface s'appuie sur les principes de **material design** et de **responsive ### modèle -L'état de la session, des modules, des paramètres et des résultats numériques est conservé par JaLHyd. Seules les représentations graphiques sont conservées par la couche ngHyd. +L'état de la session, des modules, des paramètres et des résultats numériques est conservé par JaLHyd. Seules les représentations graphiques sont conservées par la couche ngHyd (elles font elles même l'objet d'un modèle reflètant l'état de l'interface). Pour chaque module chargé en session, un arbre d'objets partant d'une instance de `FormulaireDefinition` représente la structure des éléments à l'écran : groupes de champs (répétables ou non), champs, listes déroulantes. Ces éléments sont déclarés dans les fichiers du dossier `src/app/formulaire`. @@ -84,7 +84,7 @@ Pour chaque langue, un fichier supplémentaire est présent contenant les traduc ### exemples de sessions -Des exemples de sessions prêtes à charger sont présents sous forme de fichiers JSON dans `src/app/examples`. Lors de l'ajout d'un nouveau fichier d'exemple, celui-ci doit être référencé dans la méthode `get exampleFiles()` dans le fichier `src/app/components/calculator-list.component.ts`. Ces exemples sont affichés sur la page d'accueil dans la dernière carte, lorsqu'aucun module n'a encore été créé. +Des exemples de sessions prêtes à charger sont présents sous forme de fichiers JSON dans `src/app/examples`. Lors de l'ajout d'un nouveau fichier d'exemple, celui-ci doit être référencé dans la méthode `get exampleFiles()` dans le fichier `src/app/components/calculator-list/calculator-list.component.ts`. Ces exemples sont affichés sur la page d'accueil dans la dernière carte, lorsqu'aucun module n'a encore été créé. ### langues et traduction @@ -109,7 +109,7 @@ Le dossier `release` contient (entre autres) les paquets générés par electron ### PWA Le déploiement de ngHyd sous forme d'application mobile se fait à l'aide de l'ensemble de technologies rassemblées sous le nom de Progressive Web Application. -Les fichiers et dossiers concernés sont `ngsw-config.json`, `src/manifest.webmanifest` (fichiers nouveaux), `index.html`, `angular.json`, `src/app/app.module.ts` (fichiers modifiés), et les différentes icônes `.png` présentes dans `src/assets/icons`. +Les fichiers et dossiers concernés sont `ngsw-config.json`, `ngsw-config-template.json`, `src/manifest.webmanifest` (fichiers nouveaux), `index.html`, `angular.json`, `src/app/app.module.ts` (fichiers modifiés), et les différentes icônes `.png` présentes dans `src/assets/icons`. ### documentation @@ -123,19 +123,17 @@ L'organisation hiérarchique de la documentation est définie dans les fichiers La documentation de chaque langue est compilée au format PDF via pandoc, qui convertit les sources markdown vers du LaTeX. Cette conversion est réalisée par le script python 3 `mkdocs2pdf.py`. -Les préambules LaTeX pour chaque langue se trouvent dans `docs/latex`, par exemple `docs/latex/cassiopee_doc_fr.tex`. Les PDF générés sont placés dans `src/assets/docs/pdf`. +Les préambules LaTeX pour chaque langue se trouvent dans `docs/latex`, par exemple `docs/latex/cassiopee_doc_fr.tex`. Les PDF générés sont placés dans `dist/assets/docs/pdf`. ### tests unitaires -Les tests unitaires dits "end-to-end" ou "e2e" sont réalisés avec Protractor, basé sur Selenium et fourni avec Angular. Les tests se trouvent dans le dossier `e2e` et sont configurés dans `protractor.conf.js`. +Les tests unitaires dits "end-to-end" ou "e2e" sont réalisés avec WebDriverIO, basé sur Selenium. Les tests se trouvent dans le dossier `e2e` et sont configurés dans `wdio.conf.ts`. -Bien qu'elle soit supposée fonctionner avec d'autres navigateurs, l'exécution des tests n'est garantie qu'avec Chrome / Chromium. Le pilote Selenium pour Chrome ("chromedriver") posant parfois problème, `protractor.conf.js` contient une astuce qui recherche le pilote dans le système avant de le rechercher dans node_modules. - -Pour plus d'informations sur les problèmes liés à la version du pilote Selenium pour Chrome, consulter le chapitre "chromedriver version in e2e tests" dans la documentation utilisateurs (en anglais). +Bien qu'elle soit supposée fonctionner avec d'autres navigateurs, l'exécution des tests n'est garantie qu'avec Chrome / Chromium. ### scripts -Le dossier `scripts` contient des scripts d'aide à la compilation, utilisés par les commandes `npm` déclarées dans `package.json`. +Le dossier `scripts` contient des scripts d'aide à la compilation utilisés par les commandes `npm` déclarées dans `package.json`. ## Ajouter un module de calcul @@ -343,6 +341,8 @@ Il faut ensuite faire 2 choses : } ``` +- éventuellement ajouter une méthode `updateLocalisation()` pour spécialiser la traduction des entrées et du titre (cf. par exemple `SelectFieldChartType`). + - modifier la méthode `newSelectField` de la classe `SelectFieldFactory` pour créer une instance de la classe dérivée en utilisant le champ `id` précisé dans le JSON de configuration : ```typescript public static newSelectField(json: {}, parent: FormulaireNode): SelectField { @@ -442,10 +442,10 @@ Dans la configuration du module, créer un "fieldset_template" en donnant le typ ```json { "id": "fs_yaxn", - "type": "fieldset_template", - "calcType": "YAXN", - "fields": [ - … + "type": "fieldset_template", + "calcType": "YAXN", + "fields": [ + … }, { "id": "yaxn_container", @@ -469,9 +469,9 @@ if (f instanceof FormulaireMacrorugoCompound) { } ``` -Dans cet exemple, on ajoute l'interface pour le premier enfant du Nub (instancié par JaLHyd), à l'élément de formulaire de type `FieldsetContainer` (ici, il n'y en a qu'un). +Dans cet exemple, on ajoute l'interface pour le premier enfant du Nub (instancié par JaLHyd) à l'élément de formulaire de type `FieldsetContainer` (ici, il n'y en a qu'un). -Ajouter ensuite la création de fieldsets pour les enfants existants, dans la méthode `createFormulaire()` de `FormulaireService`, dans le fichier `src/app/services/formulaire.service.ts`. Exemple pour `ParallelStructures` : +Ajouter ensuite la création de fieldsets pour les enfants existants, dans la méthode `createFormulaire()` de `FormulaireService`, dans le fichier `src/app/services/formulaire.service.ts`. Exemple pour `ParallelStructure` : ```typescript if (f.currentNub instanceof ParallelStructure) { diff --git a/README.md b/README.md index 0fc8a9725..1fc916854 100644 --- a/README.md +++ b/README.md @@ -161,44 +161,6 @@ Find the generated package in `/release`. Note: the generated package will not be signed. -### Build a mobile release for Android (from Linux platform) - -#### install dependencies - * java - `apt install openjdk-8-jdk` or `apt install oracle-java8-jdk` - * gradle - `apt install gradle` - -#### install Android Studio and SDKs - -#### using GUI - -Download Android Studio here and install it : https://developer.android.com/studio - -Run Android Studio, click "configure > SDK manager". Install at least one SDK, for ex. 7.0 Nougat. - -#### using CLI - -Download Android SDK Tools from https://developer.android.com/studio : click "DOWNLOAD OPTIONS" then scroll down to "Command line tools only" and choose `sdk-tools-linux-*.zip`. - -Download and unzip to, for example, `/opt/android/`. - -Add `/opt/android/tools/bin` to your PATH. - -Install an SDK, for example android 28 (Android 9 "Pie") : - -```sh -sdkmanager "platform-tools" "platforms;android-28" "build-tools;28.0.3" -``` - -#### build .apk package - -```sh -npm run release-android -``` - -Find the generated package in `/release`. - -Note: the generated package will not be signed. - ### Generate HTML documentation ```sh @@ -252,12 +214,7 @@ Custom Material SVG Icons will only show up when the application is deployed on ### chromedriver version in e2e tests -It is possible that Chrome / Chromium version installed on your system evolves faster than the Chrome Selenium driver (`chromedriver`) installed by "protractor" dependency of Angular, which makes e2e tests fail with an error message about versions compatibility. In this case, it's possible to install an updated system-wide version of the pilot: -```bash -sudo npm install -g protractor -sudo webdriver-manager update -sudo find /usr/lib/node_modules/protractor -regextype sed -regex "^.*/chromedriver.*[0-9]$" -exec ln -s '{}' /usr/bin/chromedriver ';' -``` +The chromedriver version used in e2e tests is determined by the Docker image dedicated to these tests. For further information, see Dockerfile of cassiopee2-integration project. ## Release policy -- GitLab From a498810d75dd75a94fea0c0546e9da216052d11b Mon Sep 17 00:00:00 2001 From: Dorchies David <david.dorchies@irstea.fr> Date: Tue, 30 May 2023 13:37:12 +0200 Subject: [PATCH 284/285] release: update changelog.md for v4.17.0 --- CHANGELOG.md | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31365a32d..5e3338d4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Historique des versions -### 4.17.0 - 2023-04-12 +### 4.17.0 - 2023-05-30 #### Correction de bogues @@ -18,23 +18,28 @@ * Solveur multimodule : impossibilité d'utilisation sur un seul module ([nghyd#606](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/606)) * PreBarrage: Changement intempestif des paramètres d'ouvrage au changement d'équation ([nghyd#620](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/620)) * PreBarrage: il n'y a plus aucun résultat au niveau des cloisons ([nghyd#619](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/619)) +* Passe à macrorugosités: des champs ne sont pas liables avec le module "Concentration de blocs" ([jalhyd#345](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/345)) +* Passe à macrorugosité: la largeur doit avoir un centimètre de tolérance ([jalhyd#344](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/344)) +* Structure: le chargement d'une session loi d'ouvrages avec Q varié remet Q en mode fixé ([nghyd#603](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/603)) +* Structure: résultat du calcul de la cote amont dépendant de la cote initiale pour un débit nul ([jalhyd#219](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/219)) +* Passe à bassins : message non défini dans la légende des graphiques ([nghyd#584](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/584)) +* Les résultats ne sont pas réinitialisés quand on modifie des paramètres globaux ([jalhyd#331](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/331), [nghyd#574](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/574)) +* PreBarrage: Doublement des avertissements ([jalhyd#348](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/348)) #### Nouvelles fonctionnalités * Structure : Ajout d'une erreur sur l'ennoiement ([jalhyd#302](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/302), [nghyd#614](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/614)) * Conduites en charge : ajout de la loi de Strickler ([jalhyd#215](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/215), [nghyd#596](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/596)) * Ajout d'une redirection vers https pour les adresses http ([nghyd#587](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/587)) -* Ajout du module courbe de remous d'une passe à macro-rugosité ([jalhyd#325](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/325), [nghyd#609](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/609)) +* Courbe de remous: visualiser les profils de sections ([nghyd#496](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/496)) +* Courbe de remous: renommer la ligne d'eau en ZW et fournir le tirant d'eau d'après celle ci ([jalhyd#333](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/333)) #### Changements * Courbe de remous : rendre facultatif l'une des deux conditions limites en cote ([jalhyd#343](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/343), [nghyd#610](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/610)) -* Restructurer Lechapt et Calmon pour de nouvelles lois de pertes de charge ([jalhyd#334](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/334), [jalhyd#590](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/590), [nghyd#585](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/585)) * Prébarrages : interdire de supprimer le dernier bassin ([nghyd#582](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/582)) * PAB: Alignement à droite des cellules numériques dans le tableau des bassins et cloisons ([nghyd#583](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/583)) * PAB: Optimisation du tableau : déplacement de la colonne "cote de radier amont" ([nghyd#615](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/615)) -* Documentation: localisation des dépendances javascript dans un seul dossier ([nghyd#612](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/612)) -* Migration des tests e2e vers WebDriverIO ([nghyd#618](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/618)) #### Documentation @@ -42,6 +47,21 @@ * Perte de charge : documentation du module ([nghyd#597](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/597)) * Modification de la documentation sur le coefficient de débit d'une fente ([nghyd#595](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/595)) * Ajout d'une documentation pour l'installation de Cassiopée PWA ([nghyd#617](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/617)) +* Perte de charge: Il manque l'aide dans le module perte de charge ([nghyd#593](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/593)) +* Ajouter le numéro de version de Cassiopée sur la documentation ([nghyd#578](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/578)) + +#### Changements internes + +* Restructurer Lechapt et Calmon pour de nouvelles lois de pertes de charge ([jalhyd#334](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/334), [jalhyd#590](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/590), [nghyd#585](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/585)) +* Migration des tests e2e vers WebDriverIO ([nghyd#618](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/618)) +* Documentation: localisation des dépendances javascript dans un seul dossier ([nghyd#612](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/612)) +* Optimiser l'affichage des unités ([jalhyd#338](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/338)) +* Fusionner les "select" avec "source" et les "select_custom" ([jalhyd#328](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/328), [nghyd#483](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/483)) +* Docker: Supprimer les dépendances à l'application Android ([cassiopee2-integration#12](https://gitlab.irstea.fr/cassiopee/cassiopee2-integration/-/issues/12)) +* Supprimer les dépendances et la chaîne de compilation pour l'application Android ([nghyd#580](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/580)) +* Suppression des warnings à la compilation ([nghyd#579](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/579)) +* Tests E2E: Vérifier la cohérence entre le json de description des calculettes et le flag visible des paramètres ([nghyd#550](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/550)) +* Thème Angular Material personnalisé : avertissements dart-sass à la compilation ([nghyd#414](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/414)) ### 4.16.3 - 2023-01-11 @@ -223,7 +243,7 @@ #### Correction de bogues * Passe à macro-rugosité: Calcul de la puissance dissipée erroné ([jalhyd#282](https://gitlab.irstea.fr/cassiopee/jalhyd/issues/282)) -* Crash au chargement d'un module contenant une parenthèse dans son nom ([nghyd#487](https://gitlab.irstea.fr/cassiopee/nghyd/issues/487)) +* Crash au chargement d'un module contenant une parenthèse dans son nom ([nghyd#487](https://gitlab.irstea.fr/cassiopee/nghyd/issues/487)) * Electron: l'icône de l'application n'est plus reconnue ([nghyd#485](https://gitlab.irstea.fr/cassiopee/nghyd/issues/485)) #### Documentation -- GitLab From db38e171fa56104df2a4880a1087be53fe69ae2c Mon Sep 17 00:00:00 2001 From: Dorchies David <david.dorchies@irstea.fr> Date: Wed, 31 May 2023 09:03:25 +0200 Subject: [PATCH 285/285] release: update changelog.md v4.17.0 --- CHANGELOG.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e3338d4d..2743d8e48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,21 @@ ### 4.17.0 - 2023-05-30 +#### Nouvelles fonctionnalités + +* Structure : Ajout d'une erreur sur l'ennoiement ([jalhyd#302](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/302), [nghyd#614](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/614)) +* Conduites en charge : ajout de la loi de Strickler ([jalhyd#215](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/215), [nghyd#596](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/596)) +* Ajout d'une redirection vers https pour les adresses http ([nghyd#587](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/587)) +* Courbe de remous : rendre facultatif l'une des deux conditions limites en cote ([jalhyd#343](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/343), [nghyd#610](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/610)) +* Courbe de remous: visualiser les profils de sections ([nghyd#496](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/496)) +* Courbe de remous: renommer la ligne d'eau en ZW et fournir le tirant d'eau d'après celle ci ([jalhyd#333](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/333)) + +#### Changements + +* Prébarrages : interdire de supprimer le dernier bassin ([nghyd#582](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/582)) +* PAB: Alignement à droite des cellules numériques dans le tableau des bassins et cloisons ([nghyd#583](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/583)) +* PAB: Optimisation du tableau : déplacement de la colonne "cote de radier amont" ([nghyd#615](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/615)) + #### Correction de bogues * Documentation : Les formules de math ne s'affichent pas dans la version anglaise ([nghyd#608](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/608)) @@ -26,21 +41,6 @@ * Les résultats ne sont pas réinitialisés quand on modifie des paramètres globaux ([jalhyd#331](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/331), [nghyd#574](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/574)) * PreBarrage: Doublement des avertissements ([jalhyd#348](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/348)) -#### Nouvelles fonctionnalités - -* Structure : Ajout d'une erreur sur l'ennoiement ([jalhyd#302](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/302), [nghyd#614](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/614)) -* Conduites en charge : ajout de la loi de Strickler ([jalhyd#215](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/215), [nghyd#596](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/596)) -* Ajout d'une redirection vers https pour les adresses http ([nghyd#587](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/587)) -* Courbe de remous: visualiser les profils de sections ([nghyd#496](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/496)) -* Courbe de remous: renommer la ligne d'eau en ZW et fournir le tirant d'eau d'après celle ci ([jalhyd#333](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/333)) - -#### Changements - -* Courbe de remous : rendre facultatif l'une des deux conditions limites en cote ([jalhyd#343](https://gitlab.irstea.fr/cassiopee/jalhyd/-/issues/343), [nghyd#610](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/610)) -* Prébarrages : interdire de supprimer le dernier bassin ([nghyd#582](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/582)) -* PAB: Alignement à droite des cellules numériques dans le tableau des bassins et cloisons ([nghyd#583](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/583)) -* PAB: Optimisation du tableau : déplacement de la colonne "cote de radier amont" ([nghyd#615](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/615)) - #### Documentation * Passe à ralentisseurs : ajouter de liens vers les pages de documentation des types de passes ([nghyd#598](https://gitlab.irstea.fr/cassiopee/nghyd/-/issues/598)) -- GitLab