From 5f65e072a8fe86a21553a9f8b7b6fc5593f84972 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Mon, 26 Aug 2019 10:02:06 +0200 Subject: [PATCH 01/29] update jalhyd_branch --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index c9cd8896a..0234e83af 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -128-reorganisation-du-stockage-des-resultats-dans-le-nub +35-ajout-de-la-calculette-passe-a-enrochement-complexe -- GitLab From 7fbdbd758fca071d06233e0788a1ab33033e8e13 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Mon, 26 Aug 2019 12:29:30 +0200 Subject: [PATCH 02/29] Added skeleton for MacrorugoCompound --- README.md | 2 + .../macrorugo-compound.config.json | 44 +++++++++++++++++++ .../macrorugo-compound.en.json | 17 +++++++ .../macrorugo-compound.fr.json | 16 +++++++ .../calculator-list.component.ts | 9 ++++ src/app/config.json | 2 +- .../concrete/form-macrorugo-compound.ts | 27 ++++++++++++ src/app/formulaire/fieldset.ts | 7 +++ src/app/formulaire/select-field.ts | 5 +++ .../services/formulaire/formulaire.service.ts | 18 ++++++++ src/locale/messages.en.json | 2 + src/locale/messages.fr.json | 2 + 12 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 src/app/calculators/macrorugo-compound/macrorugo-compound.config.json create mode 100644 src/app/calculators/macrorugo-compound/macrorugo-compound.en.json create mode 100644 src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json create mode 100644 src/app/formulaire/definition/concrete/form-macrorugo-compound.ts diff --git a/README.md b/README.md index b2537cfd8..626235967 100644 --- a/README.md +++ b/README.md @@ -274,6 +274,8 @@ Custom Material SVG Icons will only show up when the application is deployed on 5. **Si une nouvelle classe a été créée à l'étape 2**, dans la méthode _FormulaireService.newFormulaire()_, compléter le _switch_ pour fournir la classe à instancier. +6. Dans `config.json`, ajouter si nécessaire le numéro de CalculatorType à un ou plusieurs thèmes afin de classer le module sur la page de liste; dans le cas contraire le nouveau module apparaîtra dans une section "Autres" + # Create PDF from documentation ```sh diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json new file mode 100644 index 000000000..6a05f9cc3 --- /dev/null +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json @@ -0,0 +1,44 @@ +[ + { + "id": "fs_hydraulique", + "type": "fieldset", + "fields": [ + "Z1", + "DH" + ] + }, + { + "id": "fs_pass", + "type": "fieldset", + "fields": [ + "If", + "Ks", + "C" + ] + }, + { + "id": "fs_bloc", + "type": "fieldset", + "fields": [ + "PBD", + "PBH", + "Cd0" + ] + }, + { + "id": "fs_pass_type", + "type": "fieldset", + "fields": [ + { + "id": "select_pass_type", + "type": "select", + "source": "mrc_pass_type" + } + ] + }, + { + "type": "options", + "idCal": "Q", + "help": "pam/macrorugo-compound" + } +] \ No newline at end of file diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json new file mode 100644 index 000000000..dd0ba5be3 --- /dev/null +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json @@ -0,0 +1,17 @@ +{ + "fs_hydraulique": "Hydraulic parameters", + "fs_pass": "Fish pass parameters", + "fs_bloc": "Blocks parameters", + "fs_pass_type": "Pass type", + + "select_pass_type": "Pass type", + "If": "Slope", + "Ks": "Bottom roughness", + "C": "Block concentration", + "PBD": "Diameter", + "PBH": "Height", + "Cd0": "Shape (1 for round, 2 for square)", + + "select_pass_type_0": "Multiple aprons", + "select_pass_type_1": "Inclined apron" +} \ No newline at end of file diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json new file mode 100644 index 000000000..dc9c6c7f3 --- /dev/null +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json @@ -0,0 +1,16 @@ +{ + "fs_hydraulique": "Paramètres hydrauliques", + "fs_pass": "Paramètres de la passe", + "fs_bloc": "Paramètres des blocs", + "fs_pass_type": "Type de passe", + "select_pass_type": "Type de passe", + "If": "Pente", + "Ks": "Rugosité de fond", + "C": "Concentration de blocs", + "PBD": "Diamètre", + "PBH": "Hauteur", + "Cd0": "Forme (1 pour rond, 2 pour carré)", + + "select_pass_type_0": "Radiers multiples", + "select_pass_type_1": "Radier incliné" +} \ No newline at end of file diff --git a/src/app/components/calculator-list/calculator-list.component.ts b/src/app/components/calculator-list/calculator-list.component.ts index d58d2758e..a33f00de6 100644 --- a/src/app/components/calculator-list/calculator-list.component.ts +++ b/src/app/components/calculator-list/calculator-list.component.ts @@ -119,6 +119,15 @@ export class CalculatorListComponent implements OnInit { } } } + // @TODO on ajoute un ouvrage après l'ouverture du module de calcul "passe à macrorugosités complexe" + /* if (f instanceof FormulaireMacrorugoCompound) { + for (const e of f.allFormElements) { + if (e instanceof FieldsetContainer) { + e.addFromTemplate(0); + break; + } + } + } */ }); } diff --git a/src/app/config.json b/src/app/config.json index 5160a729c..1d9710c5d 100644 --- a/src/app/config.json +++ b/src/app/config.json @@ -24,7 +24,7 @@ "title": "Passe à poisson sur le petit Buech, seuil de Chiala ou des Savoillons", "credits": "Catherine Tailleux / Irstea" }, - "calculators": [ 11 ] + "calculators": [ 11, 17 ] }, { "name": "HYDRAULIQUE_A_SURFACE_LIBRE", diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts new file mode 100644 index 000000000..6a9404d8f --- /dev/null +++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts @@ -0,0 +1,27 @@ +// import { Pab } from "jalhyd"; + +import { FormulaireBase } from "./form-base"; +import { FormResultFixedVar } from "../form-result-fixedvar"; +import { FormComputeFixedVar } from "../form-compute-fixedvar"; + +/** + * Formulaire pour les passes à macrorugosités complexes + */ +export class FormulaireMacrorugoCompound extends FormulaireBase { + + constructor() { + super(); + this._formResult = new FormResultFixedVar(this); + + // default properties + this._props["inclinedApron"] = "1"; + + // remove obsolete observer set by super() + this.removeObserver(this._formCompute); + this._formCompute = new FormComputeFixedVar(this, (this._formResult as FormResultFixedVar)); + } + + /* public get pabNub(): Pab { + return this.currentNub as Pab; + } */ +} diff --git a/src/app/formulaire/fieldset.ts b/src/app/formulaire/fieldset.ts index fcfbb4e88..ac30f3e42 100644 --- a/src/app/formulaire/fieldset.ts +++ b/src/app/formulaire/fieldset.ts @@ -227,6 +227,9 @@ export class FieldSet extends FormulaireElement implements Observer { this.setSelectValueFromProperty("select_target", "varCalc"); break; + case "fs_pass_type": // macro-rugo complexe + this.setSelectValueFromProperty("select_pass_type", "inclinedApron"); + break; } } @@ -243,6 +246,7 @@ export class FieldSet extends FormulaireElement implements Observer { } const selectElement = selectField.getSelectedEntryFromValue(propVal); try { + console.log(`setting propval ${propVal} (propKey ${propertyKey}) on select ${selectId}`, selectElement, selectField); selectField.setValue(selectElement); } catch (e) { console.error(`setSelectValueFromProperty: cannot set value ${propVal} on <select> ${selectId}`); @@ -358,6 +362,9 @@ export class FieldSet extends FormulaireElement implements Observer { case "select_target": // courbes de remous, variable à calculer this.setPropValue("varCalc", data.value.value); break; + case "select_pass_type": // macro-rugo complexe + this.setPropValue("inclinedApron", data.value.value); + break; } break; } diff --git a/src/app/formulaire/select-field.ts b/src/app/formulaire/select-field.ts index 7e87dd83b..a4ad51902 100644 --- a/src/app/formulaire/select-field.ts +++ b/src/app/formulaire/select-field.ts @@ -157,6 +157,11 @@ export class SelectField extends Field { this.addEntry(e); } break; + + case "mrc_pass_type": // macrorugo complexe: type de radier + this.addEntry(new SelectEntry(this._entriesBaseId + "0", "0")); + this.addEntry(new SelectEntry(this._entriesBaseId + "1", "1")); + break; } } } diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index c88c9681a..31708213d 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -35,6 +35,7 @@ import { FieldsetContainer } from "../..//formulaire/fieldset-container"; import { ApplicationSetupService } from "../app-setup/app-setup.service"; import { NotificationsService } from "../notifications/notifications.service"; import { FormulairePab } from "../../formulaire/definition/concrete/form-pab"; +import { FormulaireMacrorugoCompound } from "../../formulaire/definition/concrete/form-macrorugo-compound"; @Injectable() export class FormulaireService extends Observable { @@ -75,6 +76,7 @@ export class FormulaireService extends Observable { this.calculatorPaths[CalculatorType.Cloisons] = "cloisons"; this.calculatorPaths[CalculatorType.MacroRugo] = "macrorugo"; this.calculatorPaths[CalculatorType.Pab] = "pab"; + this.calculatorPaths[CalculatorType.MacroRugoCompound] = "macrorugo-compound"; } private get _intlService(): I18nService { @@ -299,6 +301,10 @@ export class FormulaireService extends Observable { f = new FormulairePab(); break; + case CalculatorType.MacroRugoCompound: + f = new FormulaireMacrorugoCompound(); + break; + default: f = new FormulaireBase(); } @@ -394,6 +400,18 @@ export class FormulaireService extends Observable { f.pabNub.downWall = newDownWall; } + // @TODO add aprons for existing Aprons if needed + // (when loading session only) + /* if (f.currentNub instanceof MacrorugoCompound) { + for (const struct of f.currentNub.structures) { + for (const e of f.allFormElements) { + if (e instanceof FieldsetContainer) { // @TODO manage many containers one day ? + e.addFromTemplate(0, undefined, struct); + } + } + } + } */ + return f; }).then(fi => { diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 08c4f8864..c3c892a83 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -261,6 +261,8 @@ "INFO_LOIDEBIT_WeirVillemonte": "Notch (Villemonte 1957)", "INFO_MACRORUGO_TITRE_COURT": "Rock-ramp", "INFO_MACRORUGO_TITRE": "Rock-ramp fishpasses (beta)", + "INFO_MACRORUGOCOMPOUND_TITRE": "Compound rock-ramp fishpasses (beta)", + "INFO_MACRORUGOCOMPOUND_TITRE_COURT": "Compound RR", "INFO_MENU_EMPTY_SESSION_TITLE": "New session", "INFO_MENU_HELP_TITLE": "Help", "INFO_MENU_LOAD_SESSION_TITLE": "Load session", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index de9d932ff..a35a29bd2 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -260,6 +260,8 @@ "INFO_LOIDEBIT_WeirVillemonte": "Échancrure (Villemonte 1957)", "INFO_MACRORUGO_TITRE_COURT": "Macro-rugo.", "INFO_MACRORUGO_TITRE": "Passe à macro-rugosités (beta)", + "INFO_MACRORUGOCOMPOUND_TITRE": "Passe à macro-rugosités complexe (beta)", + "INFO_MACRORUGOCOMPOUND_TITRE_COURT": "M-Rugo complexe", "INFO_MENU_EMPTY_SESSION_TITLE": "Nouvelle session", "INFO_MENU_HELP_TITLE": "Aide", "INFO_MENU_LOAD_SESSION_TITLE": "Charger une session", -- GitLab From cc50553197e4a1c7b473523f0a1b38b61938e332 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Mon, 26 Aug 2019 17:53:17 +0200 Subject: [PATCH 03/29] MacroRugoCompound: added ZRL, ZRR, BR for inclined apron --- .../macrorugo-compound.config.json | 6 ++- .../macrorugo-compound.en.json | 3 ++ .../macrorugo-compound.fr.json | 3 ++ .../concrete/form-macrorugo-compound.ts | 40 ++++++++++++++++++- src/app/formulaire/fieldset.ts | 1 - src/app/formulaire/select-field.ts | 4 +- 6 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json index 6a05f9cc3..0f7bd8eab 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json @@ -33,12 +33,16 @@ "id": "select_pass_type", "type": "select", "source": "mrc_pass_type" - } + }, + "ZRL", + "ZRR", + "BR" ] }, { "type": "options", "idCal": "Q", + "apronTypeSelectId": "select_pass_type", "help": "pam/macrorugo-compound" } ] \ No newline at end of file diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json index dd0ba5be3..93e85029b 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json @@ -11,6 +11,9 @@ "PBD": "Diameter", "PBH": "Height", "Cd0": "Shape (1 for round, 2 for square)", + "ZRL": "Left apron elevation", + "ZRR": "Right apron elevation", + "BR": "Total width", "select_pass_type_0": "Multiple aprons", "select_pass_type_1": "Inclined apron" diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json index dc9c6c7f3..aafd40280 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json @@ -10,6 +10,9 @@ "PBD": "Diamètre", "PBH": "Hauteur", "Cd0": "Forme (1 pour rond, 2 pour carré)", + "ZRL": "Cote de radier gauche", + "ZRR": "Cote de radier droite", + "BR": "Largeur totale", "select_pass_type_0": "Radiers multiples", "select_pass_type_1": "Radier incliné" diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts index 6a9404d8f..8eda5e7e6 100644 --- a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts @@ -3,25 +3,63 @@ import { FormulaireBase } from "./form-base"; import { FormResultFixedVar } from "../form-result-fixedvar"; import { FormComputeFixedVar } from "../form-compute-fixedvar"; +import { IObservable } from 'jalhyd'; +import { FieldSet } from '../../fieldset'; /** * Formulaire pour les passes à macrorugosités complexes */ export class FormulaireMacrorugoCompound extends FormulaireBase { + /** id of select configuring apron type */ + private _apronTypeSelectId: string; + constructor() { super(); this._formResult = new FormResultFixedVar(this); // default properties - this._props["inclinedApron"] = "1"; + this._props["inclinedApron"] = false; // remove obsolete observer set by super() this.removeObserver(this._formCompute); this._formCompute = new FormComputeFixedVar(this, (this._formResult as FormResultFixedVar)); } + protected parseOptions(json: {}) { + super.parseOptions(json); + this._apronTypeSelectId = this.getOption(json, "apronTypeSelectId"); + } + /* public get pabNub(): Pab { return this.currentNub as Pab; } */ + + public afterParseFieldset(fs: FieldSet) { + // if Fieldset contains apron type selector + if (this._apronTypeSelectId) { + const sel = fs.getFormulaireNodeById(this._apronTypeSelectId); + if (sel) { + // on abonne le formulaire aux propriétés du FieldSet + fs.properties.addObserver(this); + } + } + } + + // interface Observer + + update(sender: IObservable, data: any) { + if (sender instanceof FieldSet && data.action === "propertyChange") { + switch (data.name) { + case "inclinedApron": + // reflect changes in GUI + for (const fs of this.allFieldsets) { + // show / hide dependent fields + fs.updateFields(); + } + this.reset(); + break; + } + } + } } diff --git a/src/app/formulaire/fieldset.ts b/src/app/formulaire/fieldset.ts index ac30f3e42..053d95f2f 100644 --- a/src/app/formulaire/fieldset.ts +++ b/src/app/formulaire/fieldset.ts @@ -246,7 +246,6 @@ export class FieldSet extends FormulaireElement implements Observer { } const selectElement = selectField.getSelectedEntryFromValue(propVal); try { - console.log(`setting propval ${propVal} (propKey ${propertyKey}) on select ${selectId}`, selectElement, selectField); selectField.setValue(selectElement); } catch (e) { console.error(`setSelectValueFromProperty: cannot set value ${propVal} on <select> ${selectId}`); diff --git a/src/app/formulaire/select-field.ts b/src/app/formulaire/select-field.ts index a4ad51902..bcf8cc69c 100644 --- a/src/app/formulaire/select-field.ts +++ b/src/app/formulaire/select-field.ts @@ -159,8 +159,8 @@ export class SelectField extends Field { break; case "mrc_pass_type": // macrorugo complexe: type de radier - this.addEntry(new SelectEntry(this._entriesBaseId + "0", "0")); - this.addEntry(new SelectEntry(this._entriesBaseId + "1", "1")); + this.addEntry(new SelectEntry(this._entriesBaseId + "0", false)); + this.addEntry(new SelectEntry(this._entriesBaseId + "1", true)); break; } } -- GitLab From 9edc56215a80e49e70ad3ce1bc147a739040bb8c Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 27 Aug 2019 12:00:21 +0200 Subject: [PATCH 04/29] MacroRugoCompound: hide/show children depending on apron type --- .../macrorugo-compound.config.json | 16 +++ .../macrorugo-compound.en.json | 2 + .../macrorugo-compound.fr.json | 3 + .../calculator-list.component.ts | 9 +- .../calculator.component.html | 6 +- .../calculator.component.ts | 2 +- .../concrete/form-macrorugo-compound.ts | 100 ++++++++++++++++-- .../formulaire/definition/form-definition.ts | 8 +- src/app/formulaire/fieldset-container.ts | 1 + 9 files changed, 128 insertions(+), 19 deletions(-) diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json index 0f7bd8eab..5f9ef9898 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json @@ -39,6 +39,22 @@ "BR" ] }, + { + "id": "fs_macrorugo", + "type": "fieldset_template", + "calcType": "MacroRugo", + "fields": [ + "ZF1", + "B" + ] + }, + { + "id": "macrorugo_container", + "type": "template_container", + "templates": [ + "fs_macrorugo" + ] + }, { "type": "options", "idCal": "Q", diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json index 93e85029b..700c0b1a9 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json @@ -3,6 +3,8 @@ "fs_pass": "Fish pass parameters", "fs_bloc": "Blocks parameters", "fs_pass_type": "Pass type", + "macrorugo_container": "Aprons", + "fs_macrorugo": "Apron", "select_pass_type": "Pass type", "If": "Slope", diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json index aafd40280..377ca8939 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json @@ -3,6 +3,9 @@ "fs_pass": "Paramètres de la passe", "fs_bloc": "Paramètres des blocs", "fs_pass_type": "Type de passe", + "macrorugo_container": "Radiers", + "fs_macrorugo": "Radier", + "select_pass_type": "Type de passe", "If": "Pente", "Ks": "Rugosité de fond", diff --git a/src/app/components/calculator-list/calculator-list.component.ts b/src/app/components/calculator-list/calculator-list.component.ts index a33f00de6..95be8190d 100644 --- a/src/app/components/calculator-list/calculator-list.component.ts +++ b/src/app/components/calculator-list/calculator-list.component.ts @@ -9,6 +9,7 @@ import { I18nService } from "../../services/internationalisation/internationalis import { FormulaireParallelStructure } from "../../formulaire/definition/concrete/form-parallel-structures"; import { FieldsetContainer } from "../../formulaire/fieldset-container"; import { FormulairePab } from "../../formulaire/definition/concrete/form-pab"; +import { FormulaireMacrorugoCompound } from "../../formulaire/definition/concrete/form-macrorugo-compound"; @Component({ @@ -119,15 +120,15 @@ export class CalculatorListComponent implements OnInit { } } } - // @TODO on ajoute un ouvrage après l'ouverture du module de calcul "passe à macrorugosités complexe" - /* if (f instanceof FormulaireMacrorugoCompound) { + // adding GUI for default apron, in MacroRugoCompound + if (f instanceof FormulaireMacrorugoCompound) { for (const e of f.allFormElements) { if (e instanceof FieldsetContainer) { - e.addFromTemplate(0); + e.addFromTemplate(0, 0, f.mrcNub.children[0]); break; } } - } */ + } }); } diff --git a/src/app/components/generic-calculator/calculator.component.html b/src/app/components/generic-calculator/calculator.component.html index 87c73d874..3fff1f268 100644 --- a/src/app/components/generic-calculator/calculator.component.html +++ b/src/app/components/generic-calculator/calculator.component.html @@ -50,13 +50,13 @@ [fxFlex.lt-sm]="isPAB ? '1 0 auto' : '1 0 300px'"> <ng-template ngFor let-fe [ngForOf]="formElements"> - <field-set *ngIf="isFieldset(fe)" [style.display]="getFieldsetStyleDisplay(fe.id)" [fieldSet]=fe + <field-set *ngIf="isFieldset(fe)" [style.display]="getElementStyleDisplay(fe.id)" [fieldSet]=fe (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) (tabPressed)="onTabPressed($event)"> </field-set> - <fieldset-container *ngIf="isFieldsetContainer(fe)" [_container]=fe (radio)=onRadioClick($event) - (validChange)=onElementValid() (inputChange)=onInputChange($event) + <fieldset-container *ngIf="isFieldsetContainer(fe)" [style.display]="getElementStyleDisplay(fe.id)" [_container]=fe + (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) (tabPressed)="onTabPressed($event)"> </fieldset-container> diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 005a95565..a686bdf08 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -399,7 +399,7 @@ export class GenericCalculatorComponent extends BaseComponent implements OnInit, } } - public getFieldsetStyleDisplay(id: string) { + public getElementStyleDisplay(id: string) { const isDisplayed: boolean = this._formulaire.isDisplayed(id); return isDisplayed ? "block" : "none"; } diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts index 8eda5e7e6..3bd865dc7 100644 --- a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts @@ -1,10 +1,12 @@ -// import { Pab } from "jalhyd"; +import { IObservable, MacroRugo, MacrorugoCompound, Nub, Props, Session } from "jalhyd"; import { FormulaireBase } from "./form-base"; import { FormResultFixedVar } from "../form-result-fixedvar"; import { FormComputeFixedVar } from "../form-compute-fixedvar"; -import { IObservable } from 'jalhyd'; -import { FieldSet } from '../../fieldset'; +import { FieldSet } from "../../fieldset"; +import { FieldsetContainer } from "../../fieldset-container"; +import { FormulaireNode } from "../../formulaire-node"; +import { FieldsetTemplate } from "../../fieldset-template"; /** * Formulaire pour les passes à macrorugosités complexes @@ -26,15 +28,81 @@ export class FormulaireMacrorugoCompound extends FormulaireBase { this._formCompute = new FormComputeFixedVar(this, (this._formResult as FormResultFixedVar)); } + public get mrcNub(): MacrorugoCompound { + return this.currentNub as MacrorugoCompound; + } + + private createMacroRugoNub(templ: FieldsetTemplate): Nub { + const params = {}; + params["calcType"] = templ.calcTypeFromConfig; + return this.createMacroRugo(new Props(params)); + } + + /** + * ajoute un nub MacroRugo + * @param mr nub à ajouter + * @param after position après laquelle insérer le nub, à la fin sinon + */ + private addMacroRugoNub(mr: MacroRugo, after?: number) { + this.mrcNub.addChild(mr, after); + } + + /** + * Asks JaLHyd to create a MacroRugo nub as a child of the current Calculator Module + * and return it; does not store it in the Session (for MacroRugo, not for Calculator Modules) + * @param p properties for the new Nub + */ + protected createMacroRugo(p: Props): MacroRugo { + return Session.getInstance().createNub(p, this.mrcNub) as MacroRugo; + } + + /** + * Replaces the given MacroRugo sn in the current calculator module, + * with a new one built with properties "params" + * @param mr MacroRugo to replace + * @param params properties to build the new Nub (calcType) + */ + protected replaceNub(mr: MacroRugo, params: Props): Nub { + const parent = this.mrcNub; + const newStructure = this.createMacroRugo(params); + parent.replaceChildInplace(mr, newStructure); + return newStructure; + } + + public createFieldset(parent: FormulaireNode, json: {}, data?: {}, nub?: Nub): FieldSet { + if (json["calcType"] === "MacroRugo") { + // indice après lequel insérer le nouveau FieldSet + const after = data["after"]; + + const res: FieldSet = new FieldSet(parent); + let mrn: Nub; + if (nub) { // use existing Nub (build interface based on model) + mrn = nub; + } else { + mrn = this.createMacroRugoNub(data["template"]); + this.addMacroRugoNub(mrn as MacroRugo, after); + } + res.setNub(mrn, false); + + if (after !== undefined) { + parent.kids.splice(after + 1, 0, res); + } else { + parent.kids.push(res); + } + + this.resetResults(); + + return res; + } else { + return super.createFieldset(parent, json, data); + } + } + protected parseOptions(json: {}) { super.parseOptions(json); this._apronTypeSelectId = this.getOption(json, "apronTypeSelectId"); } - /* public get pabNub(): Pab { - return this.currentNub as Pab; - } */ - public afterParseFieldset(fs: FieldSet) { // if Fieldset contains apron type selector if (this._apronTypeSelectId) { @@ -48,18 +116,32 @@ export class FormulaireMacrorugoCompound extends FormulaireBase { // interface Observer - update(sender: IObservable, data: any) { + public update(sender: IObservable, data: any) { if (sender instanceof FieldSet && data.action === "propertyChange") { switch (data.name) { case "inclinedApron": // reflect changes in GUI for (const fs of this.allFieldsets) { - // show / hide dependent fields + // show / hide dependent fields (read from model) fs.updateFields(); } + // show / hide children list (GUI only) + for (const elt of this.allFormElements) { + if (elt instanceof FieldsetContainer) { + elt.isDisplayed = (! data.value); + } + } this.reset(); + this.debugMRC(); break; } } } + + private debugMRC() { + console.log(`MRC: ${this.mrcNub.children.length} children`); + for (const c of this.mrcNub.children) { + console.log(` - ${c.uid} : ZF1=${c.prms.ZF1.singleValue}, B=${c.prms.B.singleValue}`); + } + } } diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index aae431e1e..151e4319e 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -153,8 +153,12 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs public createFieldset(parent: FormulaireNode, json: {}, data?: {}, nub?: Nub): FieldSet { const res: FieldSet = new FieldSet(parent); - res.setNub(this._currentNub, false); - this.kids.push(res); + if (nub !== undefined) { + res.setNub(nub, false); + } else { + res.setNub(this._currentNub, false); + } + parent.kids.push(res); return res; } diff --git a/src/app/formulaire/fieldset-container.ts b/src/app/formulaire/fieldset-container.ts index 0aec05ebc..5dac88c4f 100644 --- a/src/app/formulaire/fieldset-container.ts +++ b/src/app/formulaire/fieldset-container.ts @@ -90,6 +90,7 @@ export class FieldsetContainer extends FormulaireElement { const templ: FieldsetTemplate = this._templates[templateIndex]; const inst: FieldSet = templ.instantiateTemplate(this, after, nub); + console.log("INSTANCIATED TEMPLATE (id / parent id)", inst.id, inst.parent.id, inst); this.updateLocalisation(); -- GitLab From 40f6d337e720b9ffff6525fd64f2e01beeea0c33 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 27 Aug 2019 12:11:16 +0200 Subject: [PATCH 05/29] Fix bug in e2e --- e2e/navbar.po.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index 621416ac9..13b1efc1f 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -2,11 +2,11 @@ import { by, element } from "protractor"; export class Navbar { getAllCalculatorTabs() { - return element.all(by.css("#tabs-container > button.calculator-button")); + return element.all(by.css("#tabs-container button.calculator-button")); } getCalculatorTabForUid(uid: string) { - return element(by.css("#tabs-container > button.calculator-button.calculator-uid-" + uid)); + return element(by.css("#tabs-container button.calculator-button.calculator-uid-" + uid)); } getNewCalculatorButton() { -- GitLab From 95d51dc26ed29ca7a5bfb327008499b906cead3b Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 27 Aug 2019 12:29:56 +0200 Subject: [PATCH 06/29] MacroRugoCompound: manipulate children fieldsets --- .../macrorugo-compound.en.json | 2 + .../macrorugo-compound.fr.json | 2 + .../concrete/form-macrorugo-compound.ts | 78 ++++++++++++++++++- src/app/formulaire/formulaire-element.ts | 4 - 4 files changed, 81 insertions(+), 5 deletions(-) diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json index 700c0b1a9..5a0c150cf 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json @@ -16,6 +16,8 @@ "ZRL": "Left apron elevation", "ZRR": "Right apron elevation", "BR": "Total width", + "ZF1": "Apron elevation", + "B": "Width", "select_pass_type_0": "Multiple aprons", "select_pass_type_1": "Inclined apron" diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json index 377ca8939..3bd851bf0 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json @@ -16,6 +16,8 @@ "ZRL": "Cote de radier gauche", "ZRR": "Cote de radier droite", "BR": "Largeur totale", + "ZF1": "Cote de radier", + "B": "Largeur", "select_pass_type_0": "Radiers multiples", "select_pass_type_1": "Radier incliné" diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts index 3bd865dc7..ed79365fb 100644 --- a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts @@ -7,6 +7,7 @@ import { FieldSet } from "../../fieldset"; import { FieldsetContainer } from "../../fieldset-container"; import { FormulaireNode } from "../../formulaire-node"; import { FieldsetTemplate } from "../../fieldset-template"; +import { NgParameter } from "../../ngparam"; /** * Formulaire pour les passes à macrorugosités complexes @@ -114,10 +115,85 @@ export class FormulaireMacrorugoCompound extends FormulaireBase { } } + public moveFieldsetUp(fs: FieldSet) { + if (fs.nub instanceof MacroRugo) { + // déplacement du nub + fs.nub.parent.moveChildUp(fs.nub); + // déplacement du fieldset + this.fieldsetContainer.moveFieldsetUp(fs); + + this.resetResults(); + } else { + super.moveFieldsetUp(fs); + } + } + + public moveFieldsetDown(fs: FieldSet) { + if (fs.nub instanceof MacroRugo) { + // déplacement du nub + fs.nub.parent.moveChildDown(fs.nub); + // déplacement du fieldset + this.fieldsetContainer.moveFieldsetDown(fs); + + this.resetResults(); + } else { super.moveFieldsetDown(fs); } + } + + public removeFieldset(fs: FieldSet) { + if (fs.nub instanceof MacroRugo) { + // suppression du sous-nub dans le Nub parent + this.deleteNub(fs.nub); + + // suppression du fieldset + this.fieldsetContainer.removeFieldset(fs); + + this.resetResults(); + } else { super.removeFieldset(fs); } + } + + protected completeParse(json: {}) { + this.subscribeFieldsetContainer(); + } + + private get fieldsetContainer(): FieldsetContainer { + const n = this.getFormulaireNodeById("macrorugo_container"); + if (n === undefined || !(n instanceof FieldsetContainer)) { + throw new Error("l'élément 'macrorugo_container' n'est pas du type FieldsetContainer"); + } + return n as FieldsetContainer; + } + + /** + * abonnement en tant qu'observateur du FieldsetContainer + */ + private subscribeFieldsetContainer() { + this.fieldsetContainer.addObserver(this); + } + + /** + * abonnement en tant qu'observateur des NgParameter des FieldSet contenus dans le FieldsetContainer + */ + private subscribeMacrorugoInputFields(fs: FieldSet) { + for (const n of fs.allFormElements) { + if (n instanceof NgParameter) { + n.addObserver(this); + } + } + } + // interface Observer public update(sender: IObservable, data: any) { - if (sender instanceof FieldSet && data.action === "propertyChange") { + + super.update(sender, data); + + if (sender instanceof FieldsetContainer) { + switch (data.action) { + case "newFieldset": + this.reset(); + this.subscribeMacrorugoInputFields(data["fieldset"]); + } + } else if (sender instanceof FieldSet && data.action === "propertyChange") { switch (data.name) { case "inclinedApron": // reflect changes in GUI diff --git a/src/app/formulaire/formulaire-element.ts b/src/app/formulaire/formulaire-element.ts index dab5ab0cb..1542ad315 100644 --- a/src/app/formulaire/formulaire-element.ts +++ b/src/app/formulaire/formulaire-element.ts @@ -53,10 +53,6 @@ export abstract class FormulaireElement extends FormulaireNode { return this._label; } - /* set labelNumber(n: number) { - this._labelNumber = n; - } */ - public getKids(): FormulaireElement[] { return this.kids as FormulaireElement[]; } -- GitLab From f4e946c76deff03f828e149f23e39d7184ef7712 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 27 Aug 2019 15:17:03 +0200 Subject: [PATCH 07/29] Fix #221 - differenciate and localize children type in different parallel structures --- .../field-set/field-set.component.ts | 37 +++++++++++++++---- .../concrete/form-macrorugo-compound.ts | 3 +- src/locale/messages.en.json | 10 +++++ src/locale/messages.fr.json | 10 +++++ 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/app/components/field-set/field-set.component.ts b/src/app/components/field-set/field-set.component.ts index eea59f37d..e083be328 100644 --- a/src/app/components/field-set/field-set.component.ts +++ b/src/app/components/field-set/field-set.component.ts @@ -6,7 +6,6 @@ import { ParamFieldLineComponent } from "../param-field-line/param-field-line.co import { Field } from "../../formulaire/field"; import { InputField } from "../../formulaire/input-field"; import { SelectField } from "../../formulaire/select-field"; -import { SelectFieldModel } from "../../formulaire/select-field-model"; import { FormulairePab } from "../../formulaire/definition/concrete/form-pab"; import { SelectModelFieldLineComponent } from "../select-model-field-line/select-model-field-line.component"; import { FieldsetContainer } from "../../formulaire/fieldset-container"; @@ -15,6 +14,8 @@ import { I18nService } from "../../services/internationalisation/internationalis import { sprintf } from "sprintf-js"; +import { capitalize } from "jalhyd"; + @Component({ selector: "field-set", templateUrl: "./field-set.component.html", @@ -331,6 +332,20 @@ export class FieldSetComponent implements DoCheck { return this.i18nService.localizeText("INFO_FIELDSET_MOVE_DOWN"); } + /** + * Returns the localized name for the children type of the current Nub + * @param plural if true, will return plural name + */ + private childName(plural: boolean = false) { + const type: string = this._fieldSet.nub.parent.childrenType; + console.log(`Child type for nub ${this._fieldSet.nub.constructor.name} : ${type}`); + let k = "INFO_CHILD_TYPE_" + type.toUpperCase(); + if (plural) { + k += "_PLUR"; + } + return this.i18nService.localizeText(k); + } + /** * clic sur le bouton ajouter */ @@ -343,9 +358,11 @@ export class FieldSetComponent implements DoCheck { } let msg: string; if (this.childrenToAdd === 1) { - msg = this.i18nService.localizeText("INFO_DEVICE_ADDED"); + const cns = this.childName(); + msg = sprintf(this.i18nService.localizeText("INFO_STUFF_ADDED"), cns); } else { - msg = sprintf(this.i18nService.localizeText("INFO_DEVICE_ADDED_N_TIMES"), this.childrenToAdd); + const cnp = this.childName(true); + msg = sprintf(this.i18nService.localizeText("INFO_STUFF_ADDED_N_TIMES"), this.childrenToAdd, cnp); } this.notifService.notify(msg); this.childrenToAdd = 1; // reinit to avoid confusion @@ -363,10 +380,11 @@ export class FieldSetComponent implements DoCheck { } const pos = (this._fieldSet.parent as FieldsetContainer).getFieldsetPosition(this._fieldSet) + 1; let msg: string; + const cns = capitalize(this.childName()); if (this.childrenToAdd === 1) { - msg = sprintf(this.i18nService.localizeText("INFO_DEVICE_COPIED"), pos); + msg = sprintf(this.i18nService.localizeText("INFO_STUFF_COPIED"), cns, pos); } else { - msg = sprintf(this.i18nService.localizeText("INFO_DEVICE_COPIED_N_TIMES"), pos, this.childrenToAdd); + msg = sprintf(this.i18nService.localizeText("INFO_STUFF_COPIED_N_TIMES"), cns, pos, this.childrenToAdd); } this.notifService.notify(msg); this.childrenToAdd = 1; // reinit to avoid confusion @@ -378,8 +396,9 @@ export class FieldSetComponent implements DoCheck { private onRemoveClick() { const pos = (this._fieldSet.parent as FieldsetContainer).getFieldsetPosition(this._fieldSet) + 1; this.removeFieldset.emit(this._fieldSet); + const cns = capitalize(this.childName()); this.notifService.notify( - sprintf(this.i18nService.localizeText("INFO_DEVICE_REMOVED"), pos) + sprintf(this.i18nService.localizeText("INFO_STUFF_REMOVED"), cns, pos) ); } @@ -389,8 +408,9 @@ export class FieldSetComponent implements DoCheck { private onMoveUpClick() { const pos = (this._fieldSet.parent as FieldsetContainer).getFieldsetPosition(this._fieldSet) + 1; this.moveFieldsetUp.emit(this._fieldSet); + const cns = capitalize(this.childName()); this.notifService.notify( - sprintf(this.i18nService.localizeText("INFO_DEVICE_MOVED"), pos) + sprintf(this.i18nService.localizeText("INFO_STUFF_MOVED"), cns, pos) ); } @@ -400,8 +420,9 @@ export class FieldSetComponent implements DoCheck { private onMoveDownClick() { const pos = (this._fieldSet.parent as FieldsetContainer).getFieldsetPosition(this._fieldSet) + 1; this.moveFieldsetDown.emit(this._fieldSet); + const cns = capitalize(this.childName()); this.notifService.notify( - sprintf(this.i18nService.localizeText("INFO_DEVICE_MOVED"), pos) + sprintf(this.i18nService.localizeText("INFO_STUFF_MOVED"), cns, pos) ); } diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts index ed79365fb..88375df9f 100644 --- a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts @@ -142,8 +142,7 @@ export class FormulaireMacrorugoCompound extends FormulaireBase { public removeFieldset(fs: FieldSet) { if (fs.nub instanceof MacroRugo) { // suppression du sous-nub dans le Nub parent - this.deleteNub(fs.nub); - + this.mrcNub.deleteChild(fs.nub.findPositionInParent()); // suppression du fieldset this.fieldsetContainer.removeFieldset(fs); diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index c3c892a83..4a82cf001 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -123,6 +123,16 @@ "INFO_DEVICE_MOVED": "Device #%s moved", "INFO_DEVICE_REMOVED": "Device #%s removed", "INFO_DEVICES_REMOVED": "%s device(s) removed", + "INFO_STUFF_ADDED": "1 %s added", + "INFO_STUFF_ADDED_N_TIMES": "%s %s added", + "INFO_STUFF_COPIED": "%s #%s copied", + "INFO_STUFF_COPIED_N_TIMES": "%s #%s copied %s times", + "INFO_STUFF_MOVED": "%s #%s moved", + "INFO_STUFF_REMOVED": "%s #%s removed", + "INFO_CHILD_TYPE_STRUCTURE": "device", + "INFO_CHILD_TYPE_STRUCTURE_PLUR": "devices", + "INFO_CHILD_TYPE_MACRORUGO": "apron", + "INFO_CHILD_TYPE_MACRORUGO_PLUR": "aprons", "INFO_FIELDSET_ADD": "Add", "INFO_FIELDSET_COPY": "Copy", "INFO_FIELDSET_REMOVE": "Remove", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index a35a29bd2..f60e1d225 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -123,6 +123,16 @@ "INFO_DEVICE_MOVED": "Ouvrage n°%s déplacé", "INFO_DEVICE_REMOVED": "Ouvrage n°%s supprimé", "INFO_DEVICES_REMOVED": "%s ouvrage(s) supprimé(s)", + "INFO_STUFF_ADDED": "1 %s ajouté(e)", + "INFO_STUFF_ADDED_N_TIMES": "%s %s ajouté(e)s", + "INFO_STUFF_COPIED": "%s n°%s copié(e)", + "INFO_STUFF_COPIED_N_TIMES": "%s n°%s copié(e) %s fois", + "INFO_STUFF_MOVED": "%s n°%s déplacé(e)", + "INFO_STUFF_REMOVED": "%s n°%s supprimé(e)", + "INFO_CHILD_TYPE_STRUCTURE": "ouvrage", + "INFO_CHILD_TYPE_STRUCTURE_PLUR": "ouvrages", + "INFO_CHILD_TYPE_MACRORUGO": "radier", + "INFO_CHILD_TYPE_MACRORUGO_PLUR": "radiers", "INFO_FIELDSET_ADD": "Ajouter", "INFO_FIELDSET_COPY": "Copier", "INFO_FIELDSET_REMOVE": "Supprimer", -- GitLab From 8d30c71000facfaf31ec6c1518958f8e23fff9f1 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 27 Aug 2019 15:57:00 +0200 Subject: [PATCH 08/29] Improve #221 --- .../macrorugo-compound.en.json | 1 + .../macrorugo-compound.fr.json | 1 + .../field-set/field-set.component.ts | 26 +++++-------------- .../fixed-results.component.ts | 11 +++++--- .../definition/form-compute-fixedvar.ts | 7 ++++- src/app/results/calculator-results.ts | 9 ++++--- src/app/results/var-results.ts | 10 ++++--- .../internationalisation.service.ts | 15 ++++++++++- src/locale/messages.en.json | 1 + src/locale/messages.fr.json | 1 + 10 files changed, 51 insertions(+), 31 deletions(-) diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json index 5a0c150cf..635eddb02 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json @@ -18,6 +18,7 @@ "BR": "Total width", "ZF1": "Apron elevation", "B": "Width", + "xCenter": "Mid-apron abscissa", "select_pass_type_0": "Multiple aprons", "select_pass_type_1": "Inclined apron" diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json index 3bd851bf0..c1999b7e5 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json @@ -18,6 +18,7 @@ "BR": "Largeur totale", "ZF1": "Cote de radier", "B": "Largeur", + "xCenter": "Abscisse du milieu du radier", "select_pass_type_0": "Radiers multiples", "select_pass_type_1": "Radier incliné" diff --git a/src/app/components/field-set/field-set.component.ts b/src/app/components/field-set/field-set.component.ts index e083be328..45601ca85 100644 --- a/src/app/components/field-set/field-set.component.ts +++ b/src/app/components/field-set/field-set.component.ts @@ -332,20 +332,6 @@ export class FieldSetComponent implements DoCheck { return this.i18nService.localizeText("INFO_FIELDSET_MOVE_DOWN"); } - /** - * Returns the localized name for the children type of the current Nub - * @param plural if true, will return plural name - */ - private childName(plural: boolean = false) { - const type: string = this._fieldSet.nub.parent.childrenType; - console.log(`Child type for nub ${this._fieldSet.nub.constructor.name} : ${type}`); - let k = "INFO_CHILD_TYPE_" + type.toUpperCase(); - if (plural) { - k += "_PLUR"; - } - return this.i18nService.localizeText(k); - } - /** * clic sur le bouton ajouter */ @@ -358,10 +344,10 @@ export class FieldSetComponent implements DoCheck { } let msg: string; if (this.childrenToAdd === 1) { - const cns = this.childName(); + const cns = this.i18nService.childName(this._fieldSet.nub.parent); msg = sprintf(this.i18nService.localizeText("INFO_STUFF_ADDED"), cns); } else { - const cnp = this.childName(true); + const cnp = this.i18nService.childName(this._fieldSet.nub.parent, true); msg = sprintf(this.i18nService.localizeText("INFO_STUFF_ADDED_N_TIMES"), this.childrenToAdd, cnp); } this.notifService.notify(msg); @@ -380,7 +366,7 @@ export class FieldSetComponent implements DoCheck { } const pos = (this._fieldSet.parent as FieldsetContainer).getFieldsetPosition(this._fieldSet) + 1; let msg: string; - const cns = capitalize(this.childName()); + const cns = capitalize(this.i18nService.childName(this._fieldSet.nub.parent)); if (this.childrenToAdd === 1) { msg = sprintf(this.i18nService.localizeText("INFO_STUFF_COPIED"), cns, pos); } else { @@ -396,7 +382,7 @@ export class FieldSetComponent implements DoCheck { private onRemoveClick() { const pos = (this._fieldSet.parent as FieldsetContainer).getFieldsetPosition(this._fieldSet) + 1; this.removeFieldset.emit(this._fieldSet); - const cns = capitalize(this.childName()); + const cns = capitalize(this.i18nService.childName(this._fieldSet.nub.parent)); this.notifService.notify( sprintf(this.i18nService.localizeText("INFO_STUFF_REMOVED"), cns, pos) ); @@ -408,7 +394,7 @@ export class FieldSetComponent implements DoCheck { private onMoveUpClick() { const pos = (this._fieldSet.parent as FieldsetContainer).getFieldsetPosition(this._fieldSet) + 1; this.moveFieldsetUp.emit(this._fieldSet); - const cns = capitalize(this.childName()); + const cns = capitalize(this.i18nService.childName(this._fieldSet.nub.parent)); this.notifService.notify( sprintf(this.i18nService.localizeText("INFO_STUFF_MOVED"), cns, pos) ); @@ -420,7 +406,7 @@ export class FieldSetComponent implements DoCheck { private onMoveDownClick() { const pos = (this._fieldSet.parent as FieldsetContainer).getFieldsetPosition(this._fieldSet) + 1; this.moveFieldsetDown.emit(this._fieldSet); - const cns = capitalize(this.childName()); + const cns = capitalize(this.i18nService.childName(this._fieldSet.nub.parent)); this.notifService.notify( sprintf(this.i18nService.localizeText("INFO_STUFF_MOVED"), cns, pos) ); diff --git a/src/app/components/fixedvar-results/fixed-results.component.ts b/src/app/components/fixedvar-results/fixed-results.component.ts index 6a38cb84e..411f4f833 100644 --- a/src/app/components/fixedvar-results/fixed-results.component.ts +++ b/src/app/components/fixedvar-results/fixed-results.component.ts @@ -5,10 +5,14 @@ import { NgParameter } from "../../formulaire/ngparam"; import { CalculatorResults } from "../../results/calculator-results"; import { I18nService } from "../../services/internationalisation/internationalisation.service"; import { ApplicationSetupService } from "../../services/app-setup/app-setup.service"; -import * as XLSX from "xlsx"; -import { Structure } from "jalhyd"; import { FormulaireService } from "../../services/formulaire/formulaire.service"; +import { Structure, Nub, capitalize } from "jalhyd"; + +import * as XLSX from "xlsx"; + +import { sprintf } from "sprintf-js"; + @Component({ selector: "fixed-results", templateUrl: "./fixed-results.component.html", @@ -122,8 +126,9 @@ export class FixedResultsComponent { if (sn.parent) { ct = sn.parent.calcType; } + const cn = capitalize(this.intlService.childName(sn)); data.push({ - label: this.intlService.localizeText("INFO_OUVRAGE_N") + label: sprintf(this.intlService.localizeText("INFO_STUFF_N"), cn) + (c.findPositionInParent() + 1) + " : " + this.formService.expandVariableNameAndUnit(ct, k), value: this.intlService.formatResult(k, er), diff --git a/src/app/formulaire/definition/form-compute-fixedvar.ts b/src/app/formulaire/definition/form-compute-fixedvar.ts index 00d5793b3..ede113a8f 100644 --- a/src/app/formulaire/definition/form-compute-fixedvar.ts +++ b/src/app/formulaire/definition/form-compute-fixedvar.ts @@ -29,7 +29,12 @@ export class FormComputeFixedVar extends FormCompute { } private getComputedParameter(): NgParameter { - return this._formBase.getDisplayedParamFromState(ParamRadioConfig.CAL); + const cpd = this._formBase.currentNub.calculatedParam; + let ngparam = this._formBase.getParamFromSymbol(cpd.symbol); + if (ngparam === undefined) { // calculated parameter is not displayed on screen + ngparam = new NgParameter(cpd, this._formBase); + } + return ngparam; } protected compute() { diff --git a/src/app/results/calculator-results.ts b/src/app/results/calculator-results.ts index 36f23984c..0fcc1c090 100644 --- a/src/app/results/calculator-results.ts +++ b/src/app/results/calculator-results.ts @@ -1,11 +1,13 @@ +import { Nub, capitalize } from "jalhyd"; + import { NgParameter } from "../formulaire/ngparam"; -import { Nub } from "jalhyd"; import { ServiceFactory } from "../services/service-factory"; +import { sprintf } from "sprintf-js"; + export abstract class CalculatorResults { /** - * * @param p parameter to generate label for * @param displaySymbol if true, will prefix label with parameter symbol (ex: "ZDV") * @param referenceNub if given, will detect if parameter belongs to a child of this reference Nub, and @@ -18,10 +20,11 @@ export abstract class CalculatorResults { if (referenceNub) { const children = referenceNub.getChildren(); const parameterNub = p.paramDefinition.parentNub; + const cn = capitalize(ServiceFactory.instance.i18nService.childName(parameterNub)); if (children.includes(parameterNub)) { isChildParam = true; const pos = parameterNub.findPositionInParent() + 1; - res = ServiceFactory.instance.i18nService.localizeText("INFO_OUVRAGE_N") + pos + " : "; + res = sprintf(ServiceFactory.instance.i18nService.localizeText("INFO_OUVRAGE_N"), cn) + pos + " : "; } } if (displaySymbol && ! isChildParam) { diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts index a3823065c..f0354dad7 100644 --- a/src/app/results/var-results.ts +++ b/src/app/results/var-results.ts @@ -1,11 +1,13 @@ import { CalculatorResults } from "./calculator-results"; import { CalculatedParamResults } from "./param-calc-results"; import { NgParameter } from "../formulaire/ngparam"; -import { ResultElement, ParamFamily } from "jalhyd"; +import { ResultElement, ParamFamily, capitalize } from "jalhyd"; import { ServiceFactory } from "../services/service-factory"; import { PlottableData } from "./plottable-data"; import { GraphType } from "./graph-type"; +import { sprintf } from "sprintf-js"; + export class VarResults extends CalculatedParamResults implements PlottableData { /** * paramètres variés @@ -132,7 +134,8 @@ export class VarResults extends CalculatedParamResults implements PlottableData const pos = +match[1]; ct = sn.getChildren()[pos].calcType; symbol = match[2]; - ret += ServiceFactory.instance.i18nService.localizeText("INFO_OUVRAGE_N") + (pos + 1) + " : "; + const cn = capitalize(ServiceFactory.instance.i18nService.childName(sn)); + ret += sprintf(ServiceFactory.instance.i18nService.localizeText("INFO_STUFF_N"), cn) + (pos + 1) + " : "; } ret += ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, symbol); return ret; @@ -360,10 +363,11 @@ export class VarResults extends CalculatedParamResults implements PlottableData // entêtes des résultats des enfants for (const c of sn.getChildren()) { if (c.result) { + const cn = capitalize(ServiceFactory.instance.i18nService.childName(sn)); // using latest ResultElement; results count / types are supposed to be the same on every iteration for (const k of c.result.resultElement.keys) { this._resultHeaders.push( - ServiceFactory.instance.i18nService.localizeText("INFO_OUVRAGE_N") + sprintf(ServiceFactory.instance.i18nService.localizeText("INFO_STUFF_N"), cn) + (c.findPositionInParent() + 1) + " : " + ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(c.calcType, k) ); diff --git a/src/app/services/internationalisation/internationalisation.service.ts b/src/app/services/internationalisation/internationalisation.service.ts index 7590f251d..23621adbe 100644 --- a/src/app/services/internationalisation/internationalisation.service.ts +++ b/src/app/services/internationalisation/internationalisation.service.ts @@ -1,6 +1,6 @@ import { Injectable, isDevMode } from "@angular/core"; -import { Message, MessageCode, Observable, Observer, CalculatorType, LoiDebit } from "jalhyd"; +import { Message, MessageCode, Observable, Observer, CalculatorType, LoiDebit, Nub } from "jalhyd"; import { StringMap } from "../../stringmap"; import { ApplicationSetupService } from "../app-setup/app-setup.service"; @@ -201,6 +201,19 @@ export class I18nService extends Observable implements Observer { return value.toFixed(nDigits); } + /** + * Returns the localized name for the children type of the current Nub + * @param plural if true, will return plural name + */ + public childName(nub: Nub, plural: boolean = false) { + const type: string = nub.childrenType; + let k = "INFO_CHILD_TYPE_" + type.toUpperCase(); + if (plural) { + k += "_PLUR"; + } + return this.localizeText(k); + } + // interface Observer /** diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 4a82cf001..2a22bfec4 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -129,6 +129,7 @@ "INFO_STUFF_COPIED_N_TIMES": "%s #%s copied %s times", "INFO_STUFF_MOVED": "%s #%s moved", "INFO_STUFF_REMOVED": "%s #%s removed", + "INFO_STUFF_N": "%s #", "INFO_CHILD_TYPE_STRUCTURE": "device", "INFO_CHILD_TYPE_STRUCTURE_PLUR": "devices", "INFO_CHILD_TYPE_MACRORUGO": "apron", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index f60e1d225..7155a166c 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -129,6 +129,7 @@ "INFO_STUFF_COPIED_N_TIMES": "%s n°%s copié(e) %s fois", "INFO_STUFF_MOVED": "%s n°%s déplacé(e)", "INFO_STUFF_REMOVED": "%s n°%s supprimé(e)", + "INFO_STUFF_N": "%s n°", "INFO_CHILD_TYPE_STRUCTURE": "ouvrage", "INFO_CHILD_TYPE_STRUCTURE_PLUR": "ouvrages", "INFO_CHILD_TYPE_MACRORUGO": "radier", -- GitLab From 535fe396acdc6b8a3858d215f54e6c11bc5500bf Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 27 Aug 2019 16:58:25 +0200 Subject: [PATCH 09/29] Removed comments --- src/app/components/app-setup/app-setup.component.scss | 2 -- src/app/components/generic-calculator/calculator.component.scss | 2 -- src/app/formulaire/ngparam.ts | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/app/components/app-setup/app-setup.component.scss b/src/app/components/app-setup/app-setup.component.scss index f21f04ee0..8cf82ff5c 100644 --- a/src/app/components/app-setup/app-setup.component.scss +++ b/src/app/components/app-setup/app-setup.component.scss @@ -6,8 +6,6 @@ margin-bottom: 2em; min-height: 110px; - // @WARNING ::ng-deep est déprécié, mais y a rien d'autre pour - // l'instant (en attente de normalisation par le W3C) ::ng-deep .mat-card-header-text { margin: 0; } diff --git a/src/app/components/generic-calculator/calculator.component.scss b/src/app/components/generic-calculator/calculator.component.scss index 86ee92752..e10f32233 100644 --- a/src/app/components/generic-calculator/calculator.component.scss +++ b/src/app/components/generic-calculator/calculator.component.scss @@ -68,8 +68,6 @@ mat-card { } } - // @WARNING ::ng-deep est déprécié, mais y a rien d'autre pour - // l'instant (en attente de normalisation par le W3C) ::ng-deep .mat-card-header-text { margin: 0; } diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts index a76a934ff..5bfa5e187 100644 --- a/src/app/formulaire/ngparam.ts +++ b/src/app/formulaire/ngparam.ts @@ -107,7 +107,7 @@ export class NgParameter extends InputField implements Observer { // calculated param ? if (targetParam.valueMode === ParamValueMode.CALCUL) { // was the result already computed ? - // @WARNING .result might be set but the computation might have failed (dichotomy for ex.) + // .result might be set but the computation might have failed (dichotomy for ex.) if (ref.nub.result) { if (ref.hasMultipleValues()) { // compact representation -- GitLab From 1ec792aa61fc7ea78bd0d0e85f2b1c67c975baca Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 27 Aug 2019 16:58:46 +0200 Subject: [PATCH 10/29] MacroRugoCompound: fix aprons ids collision --- src/app/components/generic-input/generic-input.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/components/generic-input/generic-input.component.ts b/src/app/components/generic-input/generic-input.component.ts index e18680906..1afd483b2 100644 --- a/src/app/components/generic-input/generic-input.component.ts +++ b/src/app/components/generic-input/generic-input.component.ts @@ -1,7 +1,7 @@ import { Input, Output, EventEmitter, ChangeDetectorRef, OnChanges, ViewChild } from "@angular/core"; import { NgModel } from "@angular/forms"; import { BaseComponent } from "../base/base.component"; -import { isNumeric, Structure, Pab } from "jalhyd"; +import { isNumeric, Structure, Pab, MacrorugoCompound } from "jalhyd"; import { FormulaireDefinition } from "../../formulaire/definition/form-definition"; import { NgParameter } from "../../formulaire/ngparam"; import { I18nService } from "../../services/internationalisation/internationalisation.service"; @@ -46,7 +46,7 @@ export abstract class GenericInputComponent extends BaseComponent implements OnC // if inside a nested Structure, prefix with Structure position // to disambiguate const nub = param.paramDefinition.parentNub; - if (nub && (nub instanceof Structure || nub.parent instanceof Pab)) { + if (nub && (nub instanceof Structure || nub.parent instanceof Pab || nub.parent instanceof MacrorugoCompound)) { id = nub.findPositionInParent() + "_" + id; } } -- GitLab From f22220edd9c2c401248b994e2e6da63335fdeb24 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 27 Aug 2019 16:58:55 +0200 Subject: [PATCH 11/29] MacroRugoCompound: added units in config file --- .../macrorugo-compound/macrorugo-compound.en.json | 10 +++++++++- .../macrorugo-compound/macrorugo-compound.fr.json | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json index 635eddb02..6d94fcc83 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json @@ -21,5 +21,13 @@ "xCenter": "Mid-apron abscissa", "select_pass_type_0": "Multiple aprons", - "select_pass_type_1": "Inclined apron" + "select_pass_type_1": "Inclined apron", + + "UNIT_Q": "m³/s", + "UNIT_PV": "W/m³", + "UNIT_Q_GUIDETECH": "m³/s", + "UNIT_V_GUIDETECH": "m/s", + "UNIT_VDEB": "m/s", + "UNIT_VMAX": "m/s", + "UNIT_ZF2": "m" } \ No newline at end of file diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json index c1999b7e5..1a8b5331f 100644 --- a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json @@ -21,5 +21,13 @@ "xCenter": "Abscisse du milieu du radier", "select_pass_type_0": "Radiers multiples", - "select_pass_type_1": "Radier incliné" + "select_pass_type_1": "Radier incliné", + + "UNIT_Q": "m³/s", + "UNIT_PV": "W/m³", + "UNIT_Q_GUIDETECH": "m³/s", + "UNIT_V_GUIDETECH": "m/s", + "UNIT_VDEB": "m/s", + "UNIT_VMAX": "m/s", + "UNIT_ZF2": "m" } \ No newline at end of file -- GitLab From 7c96583d5f889a0df05fc48ef846df57b05044f6 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 27 Aug 2019 17:11:27 +0200 Subject: [PATCH 12/29] Fix units in var results table --- src/app/results/var-results.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts index f0354dad7..d3d5beeae 100644 --- a/src/app/results/var-results.ts +++ b/src/app/results/var-results.ts @@ -369,7 +369,7 @@ export class VarResults extends CalculatedParamResults implements PlottableData this._resultHeaders.push( sprintf(ServiceFactory.instance.i18nService.localizeText("INFO_STUFF_N"), cn) + (c.findPositionInParent() + 1) + " : " - + ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(c.calcType, k) + + ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, k) ); } } -- GitLab From 6f86f48def3ef9131bc1683e046f0484e1d5ef85 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 27 Aug 2019 17:29:14 +0200 Subject: [PATCH 13/29] Fix calculated parameter unit in FixedResults --- .../fixedvar-results/fixed-results.component.ts | 11 +++++++++-- .../services/formulaire/formulaire.service.ts | 17 +++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/app/components/fixedvar-results/fixed-results.component.ts b/src/app/components/fixedvar-results/fixed-results.component.ts index 411f4f833..566d2f333 100644 --- a/src/app/components/fixedvar-results/fixed-results.component.ts +++ b/src/app/components/fixedvar-results/fixed-results.component.ts @@ -7,7 +7,7 @@ import { I18nService } from "../../services/internationalisation/internationalis import { ApplicationSetupService } from "../../services/app-setup/app-setup.service"; import { FormulaireService } from "../../services/formulaire/formulaire.service"; -import { Structure, Nub, capitalize } from "jalhyd"; +import { Structure, capitalize } from "jalhyd"; import * as XLSX from "xlsx"; @@ -109,8 +109,15 @@ export class FixedResultsComponent { if (sn.parent) { ct = sn.parent.calcType; } + let unit; + // is k the calculated parameter ? If so, extract its unit + const p = res.sourceNub.getParameter(k); + if (p) { + unit = p.unit; + } + const label = this.formService.expandVariableNameAndUnit(ct, k, unit); data.push({ - label: this.formService.expandVariableNameAndUnit(ct, k), + label: label, value: this.intlService.formatResult(k, er), isCalcResult: true // for CSS }); diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index 31708213d..17ca8900a 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -208,8 +208,9 @@ 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 */ - public expandVariableNameAndUnit(calcType: CalculatorType, symbol: string): string { + public expandVariableNameAndUnit(calcType: CalculatorType, symbol: string, forceUnit?: string): string { let s = this.expandVariableName(calcType, symbol); let langCache = this.languageCache; // language cache… if (langCache && langCache[calcType]) { @@ -224,9 +225,17 @@ export class FormulaireService extends Observable { if (idx !== -1) { symbolBase = symbolBase.substring(idx + 2); } - const unitKey = "UNIT_" + symbolBase; - if (langCache && langCache[unitKey] !== undefined) { - s = s + " (" + this.intlService.localizeText(unitKey, langCache) + ")"; + let unit; + if (forceUnit) { + unit = forceUnit; + } else { + const unitKey = "UNIT_" + symbolBase; + if (langCache && langCache[unitKey] !== undefined) { + unit = this.intlService.localizeText(unitKey, langCache); + } + } + if (unit) { + s = s + " (" + unit + ")"; } return s; } -- GitLab From bd0850771dd9619f4135db1d185ccde59395bdc4 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Wed, 28 Aug 2019 10:47:47 +0200 Subject: [PATCH 14/29] Fix calculated parameter unit in VarResults --- .../components/fixedvar-results/var-results.component.ts | 4 +--- src/app/results/var-results.ts | 8 +++++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/app/components/fixedvar-results/var-results.component.ts b/src/app/components/fixedvar-results/var-results.component.ts index 5eb499f01..9ed0b85b6 100644 --- a/src/app/components/fixedvar-results/var-results.component.ts +++ b/src/app/components/fixedvar-results/var-results.component.ts @@ -66,9 +66,7 @@ export class VarResultsComponent extends ResultsComponent { if (this._messages.length > 0) { // has log messages this._headers.push("logMessagesColumn"); } - for (let i = 0; i < this._varResults.variatedParameters.length; i++) { - this._headers.push(this._varResults.variableParamHeaders[i]); - } + this._headers = this._headers.concat(this._varResults.variableParamHeaders); this._headers = this._headers.concat(this._varResults.resultHeaders); // C. pre-extract variable parameters values diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts index d3d5beeae..8853d71bf 100644 --- a/src/app/results/var-results.ts +++ b/src/app/results/var-results.ts @@ -356,8 +356,14 @@ export class VarResults extends CalculatedParamResults implements PlottableData // entêtes des résultats this._resultHeaders = []; for (const k of this.resultKeys) { + let unit; + // is k the calculated parameter ? If so, extract its unit + const p = sn.getParameter(k); + if (p) { + unit = p.unit; + } this._resultHeaders.push( - ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, k) + ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, k, unit) ); } // entêtes des résultats des enfants -- GitLab From 38cf3b9ba447fc47deb7a971f2d2e1d0d2334b99 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Wed, 28 Aug 2019 11:30:41 +0200 Subject: [PATCH 15/29] MacroRugoCompound: refresh GUI when new children are generated by "inclined apron" mode --- .../definition/concrete/form-macrorugo-compound.ts | 12 ++++++++++++ src/app/formulaire/fieldset-container.ts | 1 - 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts index 88375df9f..3d62b3b50 100644 --- a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts @@ -206,6 +206,18 @@ export class FormulaireMacrorugoCompound extends FormulaireBase { elt.isDisplayed = (! data.value); } } + // when switching to multiple aprons, remove all fieldset container + // instances and reinstanciate for every MacroRugo child + if (! data.value) { + for (const elt of this.allFormElements) { + if (elt instanceof FieldsetContainer) { + elt.clearKids(); + for (const c of this.mrcNub.children) { + elt.addFromTemplate(0, undefined, c); + } + } + } + } this.reset(); this.debugMRC(); break; diff --git a/src/app/formulaire/fieldset-container.ts b/src/app/formulaire/fieldset-container.ts index 5dac88c4f..0aec05ebc 100644 --- a/src/app/formulaire/fieldset-container.ts +++ b/src/app/formulaire/fieldset-container.ts @@ -90,7 +90,6 @@ export class FieldsetContainer extends FormulaireElement { const templ: FieldsetTemplate = this._templates[templateIndex]; const inst: FieldSet = templ.instantiateTemplate(this, after, nub); - console.log("INSTANCIATED TEMPLATE (id / parent id)", inst.id, inst.parent.id, inst); this.updateLocalisation(); -- GitLab From 4ae039bce797dce1d84c41615d4c58bb28089129 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Wed, 28 Aug 2019 16:24:16 +0200 Subject: [PATCH 16/29] MacrorugoCompound: results table --- src/app/app.module.ts | 8 +- .../calculator-results.component.html | 1 + .../calculator-results.component.ts | 10 + .../calculator.component.html | 26 +- .../calculator.component.ts | 16 +- ...rugo-compound-results-table.component.html | 32 ++ ...rugo-compound-results-table.component.scss | 66 ++++ ...rorugo-compound-results-table.component.ts | 117 +++++++ .../macrorugo-compound-results.component.html | 25 ++ .../macrorugo-compound-results.component.scss | 4 + .../macrorugo-compound-results.component.ts | 322 ++++++++++++++++++ .../pab-results/pab-results.component.html | 4 +- .../pab-results/pab-results.component.ts | 16 +- .../variable-results-selector.component.html} | 2 +- .../variable-results-selector.component.scss} | 0 .../variable-results-selector.component.ts} | 34 +- .../concrete/form-macrorugo-compound.ts | 8 +- .../definition/form-compute-fixedvar.ts | 23 -- .../form-compute-macrorugo-compound.ts | 42 +++ .../formulaire/definition/form-compute-pab.ts | 17 +- src/app/formulaire/definition/form-compute.ts | 24 ++ .../form-result-macrorugo-compound.ts | 33 ++ src/app/results/macrorugo-compound-results.ts | 114 +++++++ src/app/results/multidimension-results.ts | 13 + src/app/results/pab-results.ts | 10 +- .../plottable-macrorugo-compound-results.ts | 141 ++++++++ src/locale/messages.en.json | 1 + src/locale/messages.fr.json | 1 + 28 files changed, 1016 insertions(+), 94 deletions(-) create mode 100644 src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.html create mode 100644 src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.scss create mode 100644 src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts create mode 100644 src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.html create mode 100644 src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.scss create mode 100644 src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts rename src/app/components/{pab-results/pab-variable-results-selector.component.html => variable-results-selector/variable-results-selector.component.html} (76%) rename src/app/components/{pab-results/pab-variable-results-selector.component.scss => variable-results-selector/variable-results-selector.component.scss} (100%) rename src/app/components/{pab-results/pab-variable-results-selector.component.ts => variable-results-selector/variable-results-selector.component.ts} (71%) create mode 100644 src/app/formulaire/definition/form-compute-macrorugo-compound.ts create mode 100644 src/app/formulaire/definition/form-result-macrorugo-compound.ts create mode 100644 src/app/results/macrorugo-compound-results.ts create mode 100644 src/app/results/multidimension-results.ts create mode 100644 src/app/results/plottable-macrorugo-compound-results.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 26158718f..9b3247c78 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -85,8 +85,10 @@ import { ParamLinkComponent } from "./components/param-link/param-link.component import { SelectModelFieldLineComponent } from "./components/select-model-field-line/select-model-field-line.component"; import { PabProfileGraphComponent } from "./components/pab-profile-graph/pab-profile-graph.component"; import { PabTableComponent } from "./components/pab-table/pab-table.component"; -import { PabVariableResultsSelectorComponent } from "./components/pab-results/pab-variable-results-selector.component"; +import { VariableResultsSelectorComponent } from "./components/variable-results-selector/variable-results-selector.component"; import { QuicknavComponent } from "./components/quicknav/quicknav.component"; +import { MacrorugoCompoundResultsTableComponent } from "./components/macrorugo-compound-results/macrorugo-compound-results-table.component"; +import { MacrorugoCompoundResultsComponent } from "./components/macrorugo-compound-results/macrorugo-compound-results.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"; @@ -196,7 +198,9 @@ const appRoutes: Routes = [ PabResultsComponent, PabResultsTableComponent, PabTableComponent, - PabVariableResultsSelectorComponent, + VariableResultsSelectorComponent, + MacrorugoCompoundResultsComponent, + MacrorugoCompoundResultsTableComponent, ParamComputedComponent, ParamFieldLineComponent, ParamLinkComponent, diff --git a/src/app/components/calculator-results/calculator-results.component.html b/src/app/components/calculator-results/calculator-results.component.html index be99ed81b..93748fe04 100644 --- a/src/app/components/calculator-results/calculator-results.component.html +++ b/src/app/components/calculator-results/calculator-results.component.html @@ -2,5 +2,6 @@ <section-results></section-results> <remous-results></remous-results> <pab-results></pab-results> + <macrorugo-compound-results></macrorugo-compound-results> <fixedvar-results></fixedvar-results> </div> diff --git a/src/app/components/calculator-results/calculator-results.component.ts b/src/app/components/calculator-results/calculator-results.component.ts index cf74d342c..9dd4576c5 100644 --- a/src/app/components/calculator-results/calculator-results.component.ts +++ b/src/app/components/calculator-results/calculator-results.component.ts @@ -4,6 +4,7 @@ import { FixedVarResultsComponent } from "../../components/fixedvar-results/fixe import { SectionResultsComponent } from "../../components/section-results/section-results.component"; import { RemousResultsComponent } from "../../components/remous-results/remous-results.component"; import { PabResultsComponent } from "../../components/pab-results/pab-results.component"; +import { MacrorugoCompoundResultsComponent } from "../macrorugo-compound-results/macrorugo-compound-results.component"; import { FormulaireDefinition } from "../../formulaire/definition/form-definition"; @Component({ @@ -37,6 +38,12 @@ export class CalculatorResultsComponent implements AfterViewChecked { @ViewChild(PabResultsComponent, { static: true }) private pabResultsComponent: PabResultsComponent; + /** + * composant d'affichage des résultats des passes à macrorugosités complexes + */ + @ViewChild(MacrorugoCompoundResultsComponent, { static: true }) + private mrcResultsComponent: PabResultsComponent; + /** * événement émis à la fin du dessin de la vue */ @@ -50,11 +57,13 @@ export class CalculatorResultsComponent implements AfterViewChecked { this.sectionResultsComponent.results = undefined; this.remousResultsComponent.results = undefined; this.pabResultsComponent.results = undefined; + this.mrcResultsComponent.results = undefined; } else { this.fixedVarResultsComponent.results = f.results; this.sectionResultsComponent.results = f.results; this.remousResultsComponent.results = f.results; this.pabResultsComponent.results = f.results; + this.mrcResultsComponent.results = f.results; } } @@ -63,6 +72,7 @@ export class CalculatorResultsComponent implements AfterViewChecked { this.sectionResultsComponent.updateView(); this.remousResultsComponent.updateView(); this.pabResultsComponent.updateView(); + this.mrcResultsComponent.updateView(); } public ngAfterViewChecked() { diff --git a/src/app/components/generic-calculator/calculator.component.html b/src/app/components/generic-calculator/calculator.component.html index 3fff1f268..7770790c0 100644 --- a/src/app/components/generic-calculator/calculator.component.html +++ b/src/app/components/generic-calculator/calculator.component.html @@ -29,7 +29,7 @@ </mat-card-header> - <quicknav [fxHide.gt-sm]="! isPAB" [items]="quicknavItems" [currentItem]="'input'" [align]="'left'"></quicknav> + <quicknav [fxHide.gt-sm]="! isWide" [items]="quicknavItems" [currentItem]="'input'" [align]="'left'"></quicknav> <form> @@ -39,15 +39,15 @@ <calc-name id="calculator-name" [title]="uitextCalculatorName"></calc-name> <div id="calc-cards-container" class="container" - [fxLayout]="isPAB ? 'column' : 'row wrap'" - [fxLayoutAlign]="isPAB ? 'space-around stretch' : 'space-around start'"> + [fxLayout]="isWide ? 'column' : 'row wrap'" + [fxLayoutAlign]="isWide ? 'space-around stretch' : 'space-around start'"> <!-- chapitres --> <mat-card id="calc-card-field-sets" - [class.pab-field-sets]="isPAB" - [fxFlex.gt-sm]="isPAB ? '1 0 auto' : '1 0 400px'" - [fxFlex.lt-md]="isPAB ? '1 0 auto' : '1 0 500px'" - [fxFlex.lt-sm]="isPAB ? '1 0 auto' : '1 0 300px'"> + [class.pab-field-sets]="isWide" + [fxFlex.gt-sm]="isWide ? '1 0 auto' : '1 0 400px'" + [fxFlex.lt-md]="isWide ? '1 0 auto' : '1 0 500px'" + [fxFlex.lt-sm]="isWide ? '1 0 auto' : '1 0 300px'"> <ng-template ngFor let-fe [ngForOf]="formElements"> <field-set *ngIf="isFieldset(fe)" [style.display]="getElementStyleDisplay(fe.id)" [fieldSet]=fe @@ -75,16 +75,16 @@ <!-- résultats --> <mat-card id="calc-card-results" - [class.pab-results]="isPAB" - [fxFlex.gt-sm]="isPAB ? '1 0 auto' : '1 0 400px'" - [fxFlex.lt-md]="isPAB ? '1 0 auto' : '1 0 500px'" - [fxFlex.lt-sm]="isPAB ? '1 0 auto' : '1 0 300px'"> + [class.pab-results]="isWide" + [fxFlex.gt-sm]="isWide ? '1 0 auto' : '1 0 400px'" + [fxFlex.lt-md]="isWide ? '1 0 auto' : '1 0 500px'" + [fxFlex.lt-sm]="isWide ? '1 0 auto' : '1 0 300px'"> <div id="fake-results-anchor"></div> - <quicknav [ngClass.lt-xs]="'extraSmall'" [fxHide.gt-sm]="! isPAB" [items]="quicknavItems" [currentItem]="'results'" [align]="'left'"></quicknav> + <quicknav [ngClass.lt-xs]="'extraSmall'" [fxHide.gt-sm]="! isWide" [items]="quicknavItems" [currentItem]="'results'" [align]="'left'"></quicknav> - <mat-card-header *ngIf="! isPAB" [fxHide.lt-md]="! isPAB"> + <mat-card-header *ngIf="! isWide" [fxHide.lt-md]="! isWide"> <mat-card-title> <h1 [innerHTML]="uitextResultsTitle"></h1> </mat-card-title> diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index a686bdf08..19e8926e4 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -205,7 +205,7 @@ export class GenericCalculatorComponent extends BaseComponent implements OnInit, public get quicknavItems() { const elts = [ "input", "results" ]; - if (this.isPAB && this.hasResults) { + if (this.isWide && this.hasResults) { elts.push("charts"); } return elts; @@ -470,6 +470,11 @@ export class GenericCalculatorComponent extends BaseComponent implements OnInit, } // for "one wide column" layout + public get isWide() { + return (this.isPAB || this.isMRC); + } + + // true if current Nub is PAB public get isPAB() { return ( this._formulaire @@ -478,6 +483,15 @@ export class GenericCalculatorComponent extends BaseComponent implements OnInit, ); } + // true if current Nub is MacroRugoCompound + public get isMRC() { + return ( + this._formulaire + && this._formulaire.currentNub + && this._formulaire.currentNub.calcType === CalculatorType.MacroRugoCompound + ); + } + // for "generate PAB" button public get isPABCloisons() { return ( diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.html b/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.html new file mode 100644 index 000000000..1e1df2713 --- /dev/null +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.html @@ -0,0 +1,32 @@ +<!-- @TODO copied from var-results.component.html > merge ?--> +<div class="macrorugo-compound-results-table-container" #mrcResultsTable fxLayout="row wrap" fxLayoutAlign="center center"> + <div fxFlex="1 1 100%"> + <div class="macrorugo-compound-results-table-buttons"> + <button mat-icon-button (click)="exportAsSpreadsheet()" [title]="uitextExportAsSpreadsheet"> + <mat-icon color="primary">file_download</mat-icon> + </button> + <button mat-icon-button *ngIf="! isFullscreen" (click)="setFullscreen(mrcResultsTable)" [title]="uitextEnterFSTitle"> + <mat-icon color="primary" class="scaled12">fullscreen</mat-icon> + </button> + <button mat-icon-button *ngIf="isFullscreen" (click)="exitFullscreen()" [title]="uitextExitFSTitle"> + <mat-icon color="primary" class="scaled12">fullscreen_exit</mat-icon> + </button> + </div> + + <div class="macrorugo-compound-results-table-scrollable-container" [ngClass]="{'full-height': isFullscreen}"> + <!-- scrollable --> + <div class="macrorugo-compound-results-table-inner-container" #tableContainer> + + <table mat-table [dataSource]="dataSet"> + <ng-container *ngFor="let h of headers; let i = index" [matColumnDef]="h"> + <th mat-header-cell *matHeaderCellDef>{{ h }}</th> + <td mat-cell *matCellDef="let element" [innerHTML]="element[i]"></td> + </ng-container> + + <tr mat-header-row *matHeaderRowDef="headers"></tr> + <tr mat-row *matRowDef="let row; columns: headers;"></tr> + </table> + </div> + </div> + </div> +</div> diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.scss b/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.scss new file mode 100644 index 000000000..14c20aa01 --- /dev/null +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.scss @@ -0,0 +1,66 @@ +:host { + display: block; + margin-bottom: 1.5em; +} + +.macrorugo-compound-results-table-container { + background-color: white; +} + +.macrorugo-compound-results-table-buttons { + padding-right: 4px; + padding-top: 4px; + text-align: right; + background-color: white; + + button { + margin-left: 3px; + width: auto; + + mat-icon { + &.scaled12 { + transform: scale(1.2) + } + } + } +} + +.macrorugo-compound-results-table-scrollable-container { + overflow-x: scroll; + border: solid #ccc 1px; + + &.full-height { + height: calc(100vh - 40px); // rend le mode plein-écran scrollable verticalement, sinon ça dépasse + } +} + +table.mat-table { + + .mat-header-row { + height: 40px; + } + + .mat-row { + height: 32px; + + &:nth-child(odd) { + background-color: #f4f4f4; + } + } + + ::ng-deep .mat-cell { + padding: 5px; + + .inner-cell-line { + display: block; + white-space: nowrap; + line-height: 20px; + } + } + + ::ng-deep .mat-header-cell { + font-size: 1em; + color: black; + padding: 5px; + } +} diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts b/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts new file mode 100644 index 000000000..9102984c0 --- /dev/null +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts @@ -0,0 +1,117 @@ +import { Component, ViewChild, ElementRef } from "@angular/core"; + +import { MacroRugo } from "jalhyd"; + +import * as XLSX from "xlsx"; + +import { ApplicationSetupService } from "../../services/app-setup/app-setup.service"; +import { I18nService } from "../../services/internationalisation/internationalisation.service"; +import { ResultsComponent } from "../fixedvar-results/results.component"; +import { MacrorugoCompoundResults } from "../../results/macrorugo-compound-results"; + +@Component({ + selector: "macrorugo-compound-results-table", + templateUrl: "./macrorugo-compound-results-table.component.html", + styleUrls: [ + "./macrorugo-compound-results-table.component.scss" + ] +}) +export class MacrorugoCompoundResultsTableComponent extends ResultsComponent { + + /** résultats non mis en forme */ + private _mrcResults: MacrorugoCompoundResults; + + /** entêtes des colonnes */ + private _headers: string[]; + + /** résultats mis en forme */ + private _dataSet: any[]; + + @ViewChild("tableContainer", { static: false }) + table: ElementRef; + + constructor( + protected appSetupService: ApplicationSetupService, + protected intlService: I18nService + ) { + super(); + } + + public set results(r: MacrorugoCompoundResults) { + this._mrcResults = r; + + this._dataSet = []; + if ( + this._mrcResults + && this._mrcResults.childrenResults + && this._mrcResults.childrenResults.length > 0 + && ! this._mrcResults.hasOnlyErrors() + ) { + const pr = this._mrcResults; + const nDigits = this.appSetupService.displayDigits; + // when a parameter is variating, index of the variating parameter + // values to build the data from + const vi = pr.variableIndex; + + // refresh headers here if language changed + this._headers = pr.headers; + + // lines 1 - n-1 + for (let i = 0; i < pr.childrenResults.length; i++) { + if ( + pr.childrenResults[i].resultElements[vi].vCalc + ) { + const res = pr.childrenResults[i].resultElements[vi].values; + const nub = (pr.childrenResults[i].sourceNub as MacroRugo); + this._dataSet.push([ + i + 1, // n° radier + nub.prms.ZF1.singleValue.toFixed(nDigits), // @TODO what if ZF1 or B varies ? + nub.prms.B.singleValue.toFixed(nDigits), + res.Q.toFixed(nDigits), + res.ZF2.toFixed(nDigits), + res.Vdeb.toFixed(nDigits), + res.Fr.toFixed(nDigits), + res.Vmax.toFixed(nDigits), + res.PV.toFixed(nDigits), + this.intlService.localizeText("INFO_ENUM_MACRORUGOFLOWTYPE_" + res.ENUM_MacroRugoFlowType), + res.Q_GuideTech.toFixed(nDigits), + (res.V_GuideTech !== undefined ? res.V_GuideTech.toFixed(nDigits) : "-"), + res.xCenter.toFixed(nDigits) + ]); + } + } + } + } + + public get headers() { + return this._headers; + } + + /** + * Returns a combination of parameters and results for mat-table + */ + public get dataSet() { + return this._dataSet; + } + + public exportAsSpreadsheet() { + // automagic <table> extraction + const ws: XLSX.WorkSheet = XLSX.utils.table_to_sheet(this.table.nativeElement); + const wb: XLSX.WorkBook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(wb, ws, "default"); + // save and download + XLSX.writeFile(wb, "MacrorugoCompoundResults.xlsx"); + } + + public get uitextExportAsSpreadsheet() { + return this.intlService.localizeText("INFO_RESULTS_EXPORT_AS_SPREADSHEET"); + } + + public get uitextEnterFSTitle() { + return this.intlService.localizeText("INFO_GRAPH_BUTTON_TITLE_ENTER_FS"); + } + + public get uitextExitFSTitle() { + return this.intlService.localizeText("INFO_GRAPH_BUTTON_TITLE_EXIT_FS"); + } +} diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.html b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.html new file mode 100644 index 000000000..9d29b23ea --- /dev/null +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.html @@ -0,0 +1,25 @@ +<div class="container"> + + <log #generalLog [logTitle]="uitextGeneralLogTitle">log général</log> + + <variable-results-selector [results]="mrcResults" (indexChange)="variableIndexChanged()"> + </variable-results-selector> + + <log #iterationLog></log> + + <div> + <!-- tableau de résultats --> + <macrorugo-compound-results-table *ngIf="hasDisplayableResults" [results]="mrcResults"></macrorugo-compound-results-table> + </div> + + <quicknav *ngIf="hasDisplayableResults" [items]="[ 'input', 'results', 'charts' ]" + [currentItem]="'charts'" [align]="'left'"></quicknav> + + <div id="macrorugo-compound-graphs-container" class="container" fxLayout="row wrap" fxLayoutAlign="space-around start"> + <!-- <pab-profile-graph *ngIf="hasDisplayableResults" fxFlex.gt-xs="1 0 400px" fxFlex.lt-sm="1 0 300px"> + </pab-profile-graph> --> + <!-- <results-graph *ngIf="hasDisplayableResults" fxFlex.gt-xs="1 0 400px" fxFlex.lt-sm="1 0 300px"> + </results-graph> --> + </div> + +</div> diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.scss b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.scss new file mode 100644 index 000000000..6f5eb10d5 --- /dev/null +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.scss @@ -0,0 +1,4 @@ +results-graph { + margin-left: 1em; + margin-right: 1em; +} 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 new file mode 100644 index 000000000..db564243e --- /dev/null +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts @@ -0,0 +1,322 @@ +import { Component, ViewChild, DoCheck } from "@angular/core"; + +import { Result, cLog, Message, MessageCode, MessageSeverity } from "jalhyd"; + +import { LogComponent } from "../../components/log/log.component"; +import { CalculatorResults } from "../../results/calculator-results"; +import { NgParameter } from "../../formulaire/ngparam"; +import { ApplicationSetupService } from "../../services/app-setup/app-setup.service"; +import { PlottableData } from "../../results/plottable-data"; +import { ResultsGraphComponent } from "../results-graph/results-graph.component"; +import { I18nService } from "../../services/internationalisation/internationalisation.service"; +import { VariableResultsSelectorComponent } from "../variable-results-selector/variable-results-selector.component"; +import { MacrorugoCompoundResultsTableComponent } from "./macrorugo-compound-results-table.component"; +import { MacrorugoCompoundResults } from "../../results/macrorugo-compound-results"; +import { PlottableMacrorugoCompoundResults } from "../../results/plottable-macrorugo-compound-results"; + +@Component({ + selector: "macrorugo-compound-results", + templateUrl: "./macrorugo-compound-results.component.html", + styleUrls: [ + "./macrorugo-compound-results.component.scss" + ] +}) +export class MacrorugoCompoundResultsComponent implements DoCheck { + + /** résultats non mis en forme */ + private _mrcResults: MacrorugoCompoundResults; + + /** résultats mis en forme pour le graphique de données (classique) */ + private _plottableResults: PlottableMacrorugoCompoundResults; + + /** true si les résultats doiventt être remis à jour */ + private _doUpdate = false; + + @ViewChild(MacrorugoCompoundResultsTableComponent, { static: false }) + private mrcResultsTableComponent: MacrorugoCompoundResultsTableComponent; + + @ViewChild(VariableResultsSelectorComponent, { static: false }) + private variableResultsSelectorComponent: VariableResultsSelectorComponent; + + @ViewChild("generalLog", { static: false }) + private generalLogComponent: LogComponent; + + @ViewChild("iterationLog", { static: false }) + private iterationLogComponent: LogComponent; + + @ViewChild(ResultsGraphComponent, { static: false }) + private resultsGraphComponent: ResultsGraphComponent; + + constructor( + private appSetupService: ApplicationSetupService, + private i18nService: I18nService, + ) { + this._plottableResults = new PlottableMacrorugoCompoundResults(); + } + + public set results(rs: CalculatorResults[]) { + this._mrcResults = undefined; + if (rs.length > 0 && rs[0] instanceof MacrorugoCompoundResults) { + this._mrcResults = rs[0] as MacrorugoCompoundResults; + } + this.updateView(); + } + + /** + * update results table and chart when the variable index changed (event sent by + * VariableResultsSelectorComponent); variable index is already set in + * mrcResults at this time + */ + public variableIndexChanged() { + this.updateView(); + } + + public updateView() { + if (this.iterationLogComponent) { + this.iterationLogComponent.log = undefined; + } + if (this.generalLogComponent) { + this.generalLogComponent.log = undefined; + } + if (this.mrcResultsTableComponent) { + this.mrcResultsTableComponent.results = undefined; + } + if (this.variableResultsSelectorComponent) { + this.variableResultsSelectorComponent.results = undefined; + } + if (this.resultsGraphComponent) { + this.resultsGraphComponent.results = undefined; + } + // set _doUpdate flag so that results are rebuilt on the next Angular display cycle + this._doUpdate = false; + if (this._mrcResults !== undefined) { + this._doUpdate = this._doUpdate || this._mrcResults.hasResults || this._mrcResults.hasLog; + } + } + + public ngDoCheck() { + if (this._doUpdate) { + this._doUpdate = !this.updateResults(); + } + } + + private mergeGlobalLog(result: Result, log: cLog) { + if (result) { + if (result.hasGlobalLog()) { + log.addLog(result.globalLog); + } + // if no parameter is varying, 1st element log is considered "global" + if (this.mrcResults.variatedParameters.length === 0) { + if (result.hasResultElements() && result.resultElement.hasLog()) { + log.addLog(result.log); + } + } + } + } + + /** + * Returns the number of errors, warnings, infos among children logs + */ + private logStats(): any { + const ret = { + info: 0, + warning: 0, + error: 0 + }; + if (this._mrcResults.result && this._mrcResults.result.hasLog()) { + for (const re of this._mrcResults.result.resultElements) { + if (re.hasLog()) { + for (const m of re.log.messages) { + const s = m.getSeverity(); + switch (s) { + case MessageSeverity.INFO: + ret.info ++; + break; + case MessageSeverity.WARNING: + ret.warning ++; + break; + case MessageSeverity.ERROR: + ret.error ++; + break; + } + } + } + } + } + for (const cr of this._mrcResults.childrenResults) { + if (cr && cr.hasLog()) { + for (const re of cr.resultElements) { + if (re.hasLog()) { + for (const m of re.log.messages) { + const s = m.getSeverity(); + switch (s) { + case MessageSeverity.INFO: + ret.info ++; + break; + case MessageSeverity.WARNING: + ret.warning ++; + break; + case MessageSeverity.ERROR: + ret.error ++; + break; + } + } + } + } + } + } + return ret; + } + + /* + * Retourne les logs à afficher dans le composant de log global, au dessus + * du sélecteur d'itération : messages globaux et / ou résumé des messages + * spécifiques à chaque ResultElement + */ + private get globalLog(): cLog { + const l = new cLog(); + if (this._mrcResults && this.mrcResults.variatedParameters.length > 0) { + this.mergeGlobalLog(this._mrcResults.result, l); + // un problème avec la MRC en général / les cloisons, à une étape quelconque ? + if ( + (this.mrcResults.hasLog) + && l.messages.length === 0 // existing global messages make generic message below useless + ) { + const logStats = this.logStats(); + const m = new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED); + m.extraVar.info = "" + logStats.info; // to avoid displaying fixed number of digits + m.extraVar.warning = "" + logStats.warning; + m.extraVar.error = "" + logStats.error; + l.add(m); + // l.add(new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED)); + } + } // sinon pas de log global (aucun paramètre ne varie) + return l; + } + + /** + * Retourne les logs à afficher dans le composant de log global, au dessus + * du sélecteur d'itération : messages globaux et / ou résumé des messages + * spécifiques à chaque ResultElement + */ + private get iterationLog(): cLog { + const l = new cLog(); + if (this._mrcResults) { + if (this.mrcResults.variatedParameters.length > 0) { + // A. si un paramètre varie + const vi = this._mrcResults.variableIndex; + // log de la MRC pour l'itération en cours + if ( + this._mrcResults.result + && this._mrcResults.result.hasResultElements() + && this._mrcResults.result.resultElements[vi] + && this._mrcResults.result.resultElements[vi].hasLog() + ) { + l.addLog(this._mrcResults.result.resultElements[vi].log); + } + // logs des enfants pour l'itération en cours + for (const cr of this._mrcResults.childrenResults) { + if (cr && cr.hasResultElements() && cr.resultElements[vi].hasLog()) { + l.addLog(cr.resultElements[vi].log); + } + } + } else { + // B. si aucun paramètre ne varie + this.mergeGlobalLog(this._mrcResults.result, l); // faut bien mettre le log global quelque part + // logs des enfants + for (const cr of this._mrcResults.childrenResults) { + if (cr && cr.hasResultElements() && cr.resultElement.hasLog()) { + l.addLog(cr.resultElement.log); + } + } + } + } + return l; + } + + /** + * met à jour l'affichage des résultats + * @returns true si les résultats ont pu être mis à jour + */ + private updateResults() { + let mrcUpdated: boolean; + let resultsGraphUpdated: boolean; + let profileGraphUpdated: boolean; + let selectorUpdated: boolean; + + // results or not, there might be a log + const logUpdated = (this.iterationLogComponent !== undefined || this.generalLogComponent !== undefined); // gne ? + if (logUpdated) { + // order of logs is important ! + this.iterationLogComponent.log = this.iterationLog; + this.generalLogComponent.log = this.globalLog; + } + + console.log("update ====>", this._mrcResults); + if (this.hasResults) { + mrcUpdated = this.mrcResultsTableComponent !== undefined; + if (mrcUpdated) { + this.mrcResultsTableComponent.results = this._mrcResults; + } + selectorUpdated = this.variableResultsSelectorComponent !== undefined; + if (selectorUpdated) { + this.variableResultsSelectorComponent.results = this._mrcResults; + } + resultsGraphUpdated = this.resultsGraphComponent !== undefined; + if (resultsGraphUpdated) { + this.resultsGraphComponent.results = this.plottableResults; + this.resultsGraphComponent.updateView(); + } + } else { + mrcUpdated = true; + resultsGraphUpdated = true; + profileGraphUpdated = true; + selectorUpdated = true; + } + + return mrcUpdated && logUpdated && resultsGraphUpdated && profileGraphUpdated && selectorUpdated; + } + + public get mrcResults() { + return this._mrcResults; + } + + public formattedLabel(p: NgParameter): string { + return CalculatorResults.paramLabel(p, false); + } + + public formattedValue(p: NgParameter): string { + const nDigits = this.appSetupService.displayDigits; + return p.getValue().toFixed(nDigits); + } + + public get hasResults(): boolean { + return this._mrcResults && this._mrcResults.hasResults; + } + + public get hasDisplayableResults(): boolean { + let ret = this._mrcResults && this._mrcResults.hasResults; + if ( + this._mrcResults + && this._mrcResults.variatedParameters + && this._mrcResults.variatedParameters.length > 0 + ) { + ret = ret + && this._mrcResults.variableIndex !== undefined + && this._mrcResults.result.resultElements[this._mrcResults.variableIndex] !== undefined + && this._mrcResults.result.resultElements[this._mrcResults.variableIndex].ok; + } + return ret; + } + + public get uitextGeneralLogTitle(): string { + return this.i18nService.localizeText("INFO_TITREJOURNAL_GLOBAL"); + } + + /** builds a set of PlottableData from MacrorugoCompoundResults, to feed the graph */ + protected get plottableResults(): PlottableData { + this._plottableResults.setMrcResults(this.mrcResults); + return this._plottableResults; + } + +} diff --git a/src/app/components/pab-results/pab-results.component.html b/src/app/components/pab-results/pab-results.component.html index 2e31dc126..d601347bd 100644 --- a/src/app/components/pab-results/pab-results.component.html +++ b/src/app/components/pab-results/pab-results.component.html @@ -2,8 +2,8 @@ <log #generalLog [logTitle]="uitextGeneralLogTitle">log général</log> - <pab-variable-results-selector [results]="pabResults" (indexChange)="variableIndexChanged()"> - </pab-variable-results-selector> + <variable-results-selector [results]="pabResults" (indexChange)="variableIndexChanged()"> + </variable-results-selector> <log #iterationLog></log> diff --git a/src/app/components/pab-results/pab-results.component.ts b/src/app/components/pab-results/pab-results.component.ts index 510867ca6..fefa3a36b 100644 --- a/src/app/components/pab-results/pab-results.component.ts +++ b/src/app/components/pab-results/pab-results.component.ts @@ -8,12 +8,13 @@ import { NgParameter } from "../../formulaire/ngparam"; import { ApplicationSetupService } from "../../services/app-setup/app-setup.service"; import { PabResultsTableComponent } from "./pab-results-table.component"; import { PabResults } from "../../results/pab-results"; -import { PabVariableResultsSelectorComponent } from "./pab-variable-results-selector.component"; +import { VariableResultsSelectorComponent } from "../variable-results-selector/variable-results-selector.component"; import { PlottableData } from "../../results/plottable-data"; import { PlottablePabResults } from "../../results/plottable-pab-results"; import { ResultsGraphComponent } from "../results-graph/results-graph.component"; import { I18nService } from "../../services/internationalisation/internationalisation.service"; import { PabProfileGraphComponent } from "../pab-profile-graph/pab-profile-graph.component"; +import { VarResults } from "../../results/var-results"; @Component({ selector: "pab-results", @@ -36,8 +37,8 @@ export class PabResultsComponent implements DoCheck { @ViewChild(PabResultsTableComponent, { static: false }) private pabResultsTableComponent: PabResultsTableComponent; - @ViewChild(PabVariableResultsSelectorComponent, { static: false }) - private pabVariableResultsSelectorComponent: PabVariableResultsSelectorComponent; + @ViewChild(VariableResultsSelectorComponent, { static: false }) + private variableResultsSelectorComponent: VariableResultsSelectorComponent; @ViewChild("generalLog", { static: false }) private generalLogComponent: LogComponent; @@ -85,8 +86,8 @@ export class PabResultsComponent implements DoCheck { if (this.pabResultsTableComponent) { this.pabResultsTableComponent.results = undefined; } - if (this.pabVariableResultsSelectorComponent) { - this.pabVariableResultsSelectorComponent.results = undefined; + if (this.variableResultsSelectorComponent) { + this.variableResultsSelectorComponent.results = undefined; } if (this.resultsGraphComponent) { this.resultsGraphComponent.results = undefined; @@ -272,6 +273,7 @@ export class PabResultsComponent implements DoCheck { * @returns true si les résultats ont pu être mis à jour */ private updateResults() { + console.log("UPD RES PAB", this._pabResults); let pabUpdated: boolean; let resultsGraphUpdated: boolean; let profileGraphUpdated: boolean; @@ -290,9 +292,9 @@ export class PabResultsComponent implements DoCheck { if (pabUpdated) { this.pabResultsTableComponent.results = this._pabResults; } - selectorUpdated = this.pabVariableResultsSelectorComponent !== undefined; + selectorUpdated = this.variableResultsSelectorComponent !== undefined; if (selectorUpdated) { - this.pabVariableResultsSelectorComponent.results = this._pabResults; + this.variableResultsSelectorComponent.results = this._pabResults; } resultsGraphUpdated = this.resultsGraphComponent !== undefined; if (resultsGraphUpdated) { diff --git a/src/app/components/pab-results/pab-variable-results-selector.component.html b/src/app/components/variable-results-selector/variable-results-selector.component.html similarity index 76% rename from src/app/components/pab-results/pab-variable-results-selector.component.html rename to src/app/components/variable-results-selector/variable-results-selector.component.html index c02043692..757776ab8 100644 --- a/src/app/components/pab-results/pab-variable-results-selector.component.html +++ b/src/app/components/variable-results-selector/variable-results-selector.component.html @@ -1,4 +1,4 @@ -<div class="pab-variable-results-selector" *ngIf="hasVariableResults" fxLayout="row wrap" fxLayoutAlign="center center"> +<div class="pabvariable-results-selector" *ngIf="hasVariableResults" fxLayout="row wrap" fxLayoutAlign="center center"> <div fxFlex="1 1 100%"> <mat-form-field> <mat-select id="pab-variating-element" [placeholder]="label" [(value)]="selectedValue"> diff --git a/src/app/components/pab-results/pab-variable-results-selector.component.scss b/src/app/components/variable-results-selector/variable-results-selector.component.scss similarity index 100% rename from src/app/components/pab-results/pab-variable-results-selector.component.scss rename to src/app/components/variable-results-selector/variable-results-selector.component.scss diff --git a/src/app/components/pab-results/pab-variable-results-selector.component.ts b/src/app/components/variable-results-selector/variable-results-selector.component.ts similarity index 71% rename from src/app/components/pab-results/pab-variable-results-selector.component.ts rename to src/app/components/variable-results-selector/variable-results-selector.component.ts index 4986bfbf8..901c77ebb 100644 --- a/src/app/components/pab-results/pab-variable-results-selector.component.ts +++ b/src/app/components/variable-results-selector/variable-results-selector.component.ts @@ -1,20 +1,20 @@ import { Component, Output, EventEmitter } from "@angular/core"; -import { PabResults } from "../../results/pab-results"; import { I18nService } from "../../services/internationalisation/internationalisation.service"; import { ApplicationSetupService } from "../../services/app-setup/app-setup.service"; +import { MultiDimensionResults } from "../../results/multidimension-results"; @Component({ - selector: "pab-variable-results-selector", - templateUrl: "./pab-variable-results-selector.component.html", + selector: "variable-results-selector", + templateUrl: "./variable-results-selector.component.html", styleUrls: [ - "./pab-variable-results-selector.component.scss" + "./variable-results-selector.component.scss" ] }) -export class PabVariableResultsSelectorComponent { +export class VariableResultsSelectorComponent { /** résultats non mis en forme */ - private _pabResults: PabResults; + private _results: MultiDimensionResults; private _selectedValue: number; @@ -34,23 +34,23 @@ export class PabVariableResultsSelectorComponent { this._selectedValue = 0; } - public set results(r: PabResults) { - this._pabResults = r; + public set results(r: MultiDimensionResults) { + this._results = r; - if (this._pabResults) { + if (this._results) { // pre-extract variable parameters values this.varValues = []; const nDigits = this.appSetupService.displayDigits; // find longest list this.size = 0; - for (let i = 0; i < this._pabResults.variatedParameters.length; i++) { - const vs = this._pabResults.variatedParameters[i].valuesIterator.count(); + for (let i = 0; i < this._results.variatedParameters.length; i++) { + const vs = this._results.variatedParameters[i].valuesIterator.count(); if (vs > this.size) { this.size = vs; } } // get extended values lists for each variable parameter - for (const v of this._pabResults.variatedParameters) { + for (const v of this._results.variatedParameters) { const vv = []; const iter = v.getExtendedValuesIterator(this.size); while (iter.hasNext) { @@ -64,9 +64,9 @@ export class PabVariableResultsSelectorComponent { public get hasVariableResults(): boolean { return ( - this._pabResults - && this._pabResults.hasResults - && this._pabResults.variatedParameters.length > 0 + this._results + && this._results.hasResults + && this._results.variatedParameters.length > 0 ); } @@ -81,7 +81,7 @@ export class PabVariableResultsSelectorComponent { protected entryLabel(index: number): string { let i = 0; return this.varValues.map((vv) => { - const vp = this._pabResults.variatedParameters[i]; + const vp = this._results.variatedParameters[i]; i++; let value = "0"; value = vv[index]; @@ -94,7 +94,7 @@ export class PabVariableResultsSelectorComponent { } public set selectedValue(v: number) { - this._pabResults.variableIndex = v; + this._results.variableIndex = v; this.indexChange.emit(); } diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts index 3d62b3b50..7f495c4d7 100644 --- a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts @@ -1,13 +1,13 @@ import { IObservable, MacroRugo, MacrorugoCompound, Nub, Props, Session } from "jalhyd"; import { FormulaireBase } from "./form-base"; -import { FormResultFixedVar } from "../form-result-fixedvar"; -import { FormComputeFixedVar } from "../form-compute-fixedvar"; import { FieldSet } from "../../fieldset"; import { FieldsetContainer } from "../../fieldset-container"; import { FormulaireNode } from "../../formulaire-node"; import { FieldsetTemplate } from "../../fieldset-template"; import { NgParameter } from "../../ngparam"; +import { FormResultMacrorugoCompound } from "../form-result-macrorugo-compound"; +import { FormComputeMacrorugoCompound } from "../form-compute-macrorugo-compound"; /** * Formulaire pour les passes à macrorugosités complexes @@ -19,14 +19,14 @@ export class FormulaireMacrorugoCompound extends FormulaireBase { constructor() { super(); - this._formResult = new FormResultFixedVar(this); + this._formResult = new FormResultMacrorugoCompound(this); // default properties this._props["inclinedApron"] = false; // remove obsolete observer set by super() this.removeObserver(this._formCompute); - this._formCompute = new FormComputeFixedVar(this, (this._formResult as FormResultFixedVar)); + this._formCompute = new FormComputeMacrorugoCompound(this, (this._formResult as FormResultMacrorugoCompound)); } public get mrcNub(): MacrorugoCompound { diff --git a/src/app/formulaire/definition/form-compute-fixedvar.ts b/src/app/formulaire/definition/form-compute-fixedvar.ts index ede113a8f..ba74fda4f 100644 --- a/src/app/formulaire/definition/form-compute-fixedvar.ts +++ b/src/app/formulaire/definition/form-compute-fixedvar.ts @@ -14,29 +14,6 @@ export class FormComputeFixedVar extends FormCompute { return this._formResult as FormResultFixedVar; } - private getVariatedParameters(): NgParameter[] { - let res: NgParameter[] = []; - // find variated local parameters - res = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR); - // add variated linked parameters - const pms = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK); - for (const p of pms) { - if (p.paramDefinition.hasMultipleValues) { - res.push(p); - } - } - return res; - } - - private getComputedParameter(): NgParameter { - const cpd = this._formBase.currentNub.calculatedParam; - let ngparam = this._formBase.getParamFromSymbol(cpd.symbol); - if (ngparam === undefined) { // calculated parameter is not displayed on screen - ngparam = new NgParameter(cpd, this._formBase); - } - return ngparam; - } - protected compute() { this.runNubCalc(this._formBase.currentNub); this.reaffectResultComponents(); diff --git a/src/app/formulaire/definition/form-compute-macrorugo-compound.ts b/src/app/formulaire/definition/form-compute-macrorugo-compound.ts new file mode 100644 index 000000000..4b6de1561 --- /dev/null +++ b/src/app/formulaire/definition/form-compute-macrorugo-compound.ts @@ -0,0 +1,42 @@ +import { Result, MacrorugoCompound } from "jalhyd"; + +import { FormulaireDefinition } from "./form-definition"; +import { FormCompute } from "./form-compute"; +import { FormResultMacrorugoCompound } from "./form-result-macrorugo-compound"; +import { NgParameter, ParamRadioConfig } from "../ngparam"; + +export class FormComputeMacrorugoCompound extends FormCompute { + + constructor(formBase: FormulaireDefinition, formResult: FormResultMacrorugoCompound) { + super(formBase, formResult); + } + + protected get formResult(): FormResultMacrorugoCompound { + return this._formResult as FormResultMacrorugoCompound; + } + + protected compute() { + this.runNubCalc(this._formBase.currentNub); + this.reaffectResultComponents(); + } + + protected reaffectResultComponents() { + const mrc: MacrorugoCompound = (this._formBase.currentNub as MacrorugoCompound); + const computedParam: NgParameter = this.getComputedParameter(); + const varParams: NgParameter[] = this.getVariatedParameters(); + + // résultat de calcul de la passe à macrorugo complexe + const mrcr = this.formResult.mrcResults; + mrcr.calculatedParameter = computedParam; + mrcr.result = mrc.result; + if (varParams) { + mrcr.variatedParameters = varParams; + } + // résultat de chaque enfant + const cr: Result[] = []; + for (const c of mrc.children) { + cr.push(c.result); + } + mrcr.childrenResults = cr; + } +} diff --git a/src/app/formulaire/definition/form-compute-pab.ts b/src/app/formulaire/definition/form-compute-pab.ts index bcde3d155..445ad0b5d 100644 --- a/src/app/formulaire/definition/form-compute-pab.ts +++ b/src/app/formulaire/definition/form-compute-pab.ts @@ -15,17 +15,6 @@ export class FormComputePab extends FormCompute { return this._formResult as FormResultPab; } - private getVariatedParameters(): NgParameter[] { - const res = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR); - const pms = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK); - for (const p of pms) { - if (p.paramDefinition.hasMultipleValues) { - res.push(p); - } - } - return res; - } - protected compute() { this.runNubCalc(this._formBase.currentNub); this.reaffectResultComponents(); @@ -46,7 +35,7 @@ export class FormComputePab extends FormCompute { for (const c of pab.children) { cr.push(c.result); } - pabr.cloisonsResults = cr, + pabr.cloisonsResults = cr; // résultat de la cloison aval pabr.cloisonAvalResults = pab.downWall.result; @@ -74,8 +63,4 @@ export class FormComputePab extends FormCompute { pabr.variatedParameters = varParams; } } - - private getComputedParameter(): NgParameter { - return this._formBase.getDisplayedParamFromState(ParamRadioConfig.CAL); - } } diff --git a/src/app/formulaire/definition/form-compute.ts b/src/app/formulaire/definition/form-compute.ts index af5c587cd..14a21c5d6 100644 --- a/src/app/formulaire/definition/form-compute.ts +++ b/src/app/formulaire/definition/form-compute.ts @@ -2,6 +2,7 @@ import { Nub, Result, ParamDomainValue, Observer, ParamDefinition } from "jalhyd import { FormResult } from "./form-result"; import { FormulaireDefinition } from "./form-definition"; +import { NgParameter, ParamRadioConfig } from "../ngparam"; export abstract class FormCompute implements Observer { @@ -91,6 +92,29 @@ export abstract class FormCompute implements Observer { return nub.CalcSerie(init, this.getParameterRefid(computedParam)); } + protected getComputedParameter(): NgParameter { + const cpd = this._formBase.currentNub.calculatedParam; + let ngparam = this._formBase.getParamFromSymbol(cpd.symbol); + if (ngparam === undefined) { // calculated parameter is not displayed on screen + ngparam = new NgParameter(cpd, this._formBase); + } + return ngparam; + } + + protected getVariatedParameters(): NgParameter[] { + let res: NgParameter[] = []; + // find variated local parameters + res = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR); + // add variated linked parameters + const pms = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK); + for (const p of pms) { + if (p.paramDefinition.hasMultipleValues) { + res.push(p); + } + } + return res; + } + /** * Triggers computation of the Nub, updates form results */ diff --git a/src/app/formulaire/definition/form-result-macrorugo-compound.ts b/src/app/formulaire/definition/form-result-macrorugo-compound.ts new file mode 100644 index 000000000..73ba7e9d2 --- /dev/null +++ b/src/app/formulaire/definition/form-result-macrorugo-compound.ts @@ -0,0 +1,33 @@ +import { FormulaireDefinition } from "./form-definition"; +import { FormResult } from "./form-result"; +import { CalculatorResults } from "../../results/calculator-results"; +import { MacrorugoCompoundResults } from "../../results/macrorugo-compound-results"; + +export class FormResultMacrorugoCompound extends FormResult { + + protected _formBase: FormulaireDefinition; + + protected _mrcResults: MacrorugoCompoundResults; + + constructor(base: FormulaireDefinition) { + super(); + this._formBase = base; + this._mrcResults = new MacrorugoCompoundResults(); + } + + public get mrcResults() { + return this._mrcResults; + } + + public resetResults() { + this._mrcResults.reset(); + } + + public get results(): CalculatorResults[] { + return [ this._mrcResults ]; + } + + public get hasResults(): boolean { + return this._mrcResults.hasResults; + } +} diff --git a/src/app/results/macrorugo-compound-results.ts b/src/app/results/macrorugo-compound-results.ts new file mode 100644 index 000000000..ec1275b92 --- /dev/null +++ b/src/app/results/macrorugo-compound-results.ts @@ -0,0 +1,114 @@ +import { Result } from "jalhyd"; + +import { ServiceFactory } from "../services/service-factory"; +import { MultiDimensionResults } from "./multidimension-results"; + +export class MacrorugoCompoundResults extends MultiDimensionResults { + + /** résultats des modules MacroRugo enfants */ + public childrenResults: Result[]; + + /** symboles des colonnes de résultat */ + protected _columns: string[]; + + public constructor() { + super(); + this.reset(); + // standard headers + this._columns = [ + "RADIER_N", + "ZF1", + "B", + "Q", + "ZF2", + "Vdeb", + "Fr", + "Vmax", + "PV", + "ENUM_MacroRugoFlowType", + "Q_GuideTech", + "V_GuideTech", + "xCenter" + ]; + } + + /** headers symbols */ + public get columns() { + return this._columns; + } + + /** translated headers texts */ + public get headers() { + return this._columns.map((h) => { + // calculator type for translation + const sn = this.result.sourceNub; + let ct = sn.calcType; + if (sn.parent) { + ct = sn.parent.calcType; + } + return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct , h); + }); + } + + public reset() { + super.reset(); + this.childrenResults = []; + } + + /** + * Returns true if at least one log message is present in the PAB result or any + * of the children results + */ + public get hasLog(): boolean { + if (this.childrenResults) { + for (const cr of this.childrenResults) { + if (cr && cr.hasLog()) { + return true; + } + } + } + return (this.result && this.result.hasLog()); + } + + // do not test result.ok else log messages will prevent partial results from being displayed + public get hasResults(): boolean { + return this.result !== undefined && ! this.result.hasOnlyErrors; + } + + /** retourne true si au moins un calcul a échoué (le log a un code négatif) */ + public hasError(): boolean { + let err = false; + // log principal + err = (err || this.result.hasErrorMessages()); + // logs des enfants + for (const c of this.childrenResults) { + err = (err || c.hasErrorMessages()); + } + + return err; + } + + /** retourne true si le calcul à l'itération i a échoué */ + public iterationHasError(i: number): boolean { + let err = this.result.resultElements[i].hasErrorMessages(); + // logs des cloisons + for (const c of this.childrenResults) { + err = (err || c.resultElements[i].hasErrorMessages()); + } + + return err; + } + + /** retourne true si tous les calculs ont échoué */ + public hasOnlyErrors(): boolean { + let err = true; + // log principal + err = (err && this.result.hasOnlyErrors); + // logs des cloisons + for (const c of this.childrenResults) { + err = (err && c.hasOnlyErrors); + } + + return err; + } +} diff --git a/src/app/results/multidimension-results.ts b/src/app/results/multidimension-results.ts new file mode 100644 index 000000000..86c42164c --- /dev/null +++ b/src/app/results/multidimension-results.ts @@ -0,0 +1,13 @@ +import { CalculatedParamResults } from "./param-calc-results"; +import { PlottableData } from "./plottable-data"; +import { NgParameter } from "../formulaire/ngparam"; + + +export class MultiDimensionResults extends CalculatedParamResults/* implements PlottableData */ { + + /** paramètres variés */ + public variatedParameters: NgParameter[]; + + /** index de la valeur du paramètre varié à afficher dans les résultats */ + public variableIndex = 0; +} diff --git a/src/app/results/pab-results.ts b/src/app/results/pab-results.ts index a81d37158..d407ae8a4 100644 --- a/src/app/results/pab-results.ts +++ b/src/app/results/pab-results.ts @@ -1,10 +1,10 @@ import { Result } from "jalhyd"; -import { CalculatedParamResults } from "./param-calc-results"; import { NgParameter } from "../formulaire/ngparam"; import { ServiceFactory } from "../services/service-factory"; +import { MultiDimensionResults } from "./multidimension-results"; -export class PabResults extends CalculatedParamResults { +export class PabResults extends MultiDimensionResults { /** résultats des modules Cloisons avant chaque bassin */ public cloisonsResults: Result[]; @@ -18,12 +18,6 @@ export class PabResults extends CalculatedParamResults { * */ public Z2: number[]; - /** paramètres variés */ - public variatedParameters: NgParameter[]; - - /** index de la valeur du paramètre varié à afficher dans les résultats */ - public variableIndex = 0; - /** symboles des colonnes de résultat */ protected _columns: string[]; diff --git a/src/app/results/plottable-macrorugo-compound-results.ts b/src/app/results/plottable-macrorugo-compound-results.ts new file mode 100644 index 000000000..0be1264f1 --- /dev/null +++ b/src/app/results/plottable-macrorugo-compound-results.ts @@ -0,0 +1,141 @@ +import { PlottableData } from "./plottable-data"; +import { GraphType } from "./graph-type"; +import { ServiceFactory } from "../services/service-factory"; +import { MacrorugoCompoundResults } from "./macrorugo-compound-results"; + +export class PlottableMacrorugoCompoundResults implements PlottableData { + + public graphType: GraphType = GraphType.Scatter; + public chartX: string; + public chartY: string; + + protected mrcResults: MacrorugoCompoundResults; + + public constructor(mrcResults?: MacrorugoCompoundResults) { + if (mrcResults) { + this.setMrcResults(mrcResults); + } + // axes par défaut + this.chartX = this.chartX || "CLOISON"; + this.chartY = this.chartY || "YMOY"; + } + + /** reaffect mrcResults, for ex. when objet was contructed with empty mrcResults */ + public setMrcResults(mrcResults: MacrorugoCompoundResults) { + this.mrcResults = mrcResults; + } + + /** + * Returns the label to display, for an element of getAvailableChartAxis() + * @param symbol parameter / result symbol (ex: "Q") + */ + public getChartAxisLabel(symbol: string): string { + if (symbol === "x") { // specific case for wall abscissa + return ServiceFactory.instance.i18nService.localizeText("INFO_LIB_ABSCISSE_CLOISON"); + } else { + return this.mrcResults.headers[this.mrcResults.columns.indexOf(symbol)]; + } + } + + public expandLabelFromSymbol(symbol: string): string { + return symbol; + } + + /** + * Returns a list of plottable parameters / result elements, that can be defined + * as X or Y chart axis + */ + public getAvailableChartAxis(): string[] { + const axis = []; + axis.push("x"); // wall abscissa + for (const c of this.mrcResults.columns) { + if (c.indexOf("ENUM_") === -1) { // ENUM variables are not plottable + axis.push(c); + } + } + return axis; + } + + public getAvailableXAxis(): string[] { + return this.getAvailableChartAxis(); + } + + public getAvailableYAxis(): string[] { + return this.getAvailableChartAxis(); + } + + // just to implement interface + public getVariatingParametersSymbols(): string[] { + return []; + } + + /** + * Returns the series of values for the required symbol + * @param symbol parameter / result symbol (ex: "Q") + */ + public getValuesSeries(symbol: string): number[] { + const data: number[] = []; + const pr = this.mrcResults; + const l = this.mrcResults.childrenResults.length; + // when a parameter is variating, index of the variating parameter + // values to build the data from + const vi = this.mrcResults.variableIndex; + + if (this.mrcResults.iterationHasError(vi)) { + return []; + } + + switch (symbol) { + case "RADIER_N": + data.push(undefined); + for (let i = 0; i <= l; i++) { // <= for one extra step (downwall) + data.push(i + 1); + } + break; + + case "DH": + case "ZRAM": + /* case "Q": + data.push(undefined); + for (let i = 0; i < l; i++) { + const er = pr.cloisonsResults[i].resultElements[vi].getValue(symbol); + data.push(er); + } + const zrAval = pr.cloisonAvalResults.resultElements[vi].getValue(symbol); + data.push(zrAval); + break; + + case "Z": + for (let i = 0; i < l; i++) { + data.push(pr.cloisonsResults[i].resultElements[vi].vCalc); + } + data.push(pr.cloisonAvalResults.resultElements[vi].vCalc); + data.push(pr.Z2[vi]); + break; */ + + case "PV": + case "YMOY": + case "ZRMB": + case "QA": + data.push(undefined); + for (let i = 0; i < l; i++) { + const er = pr.childrenResults[i].resultElements[vi].getValue(symbol); + data.push(er); + } + data.push(undefined); + break; + + /* case "x": // wall abscissa + data.push(undefined); + for (let i = 0; i < l; i++) { + const er = pr.cloisonsResults[i].resultElements[vi].getValue(symbol); + data.push(er); + } + const erXdw = pr.cloisonAvalResults.resultElements[vi].getValue(symbol); + data.push(erXdw); + break; */ + } + + return data; + } +} diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 2a22bfec4..adcc569ba 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -217,6 +217,7 @@ "INFO_LIB_R": "Hydraulic radius", "INFO_LIB_S": "Orifice area", "INFO_LIB_RADIER": "Basin bottom", + "INFO_LIB_RADIER_N": "Apron #", "INFO_LIB_SELECT_LOIDEBIT": "Stage-discharge law", "INFO_LIB_SELECT_LOIDEBIT1_KIVI": "Kindsvater-Carter and Villemonte", "INFO_LIB_SELECT_LOIDEBIT1": "Stage-discharge law", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 7155a166c..e5c5de4bf 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -215,6 +215,7 @@ "INFO_LIB_QA": "Débit d'attrait", "INFO_LIB_R": "Rayon hydraulique", "INFO_LIB_RADIER": "Radier", + "INFO_LIB_RADIER_N": "Radier n°", "INFO_LIB_S": "Surface de l'orifice", "INFO_LIB_SELECT_LOIDEBIT": "Loi de débit", "INFO_LIB_SELECT_LOIDEBIT1_KIVI": "Kindsvater-Carter et Villemonte", -- GitLab From e860b55be1689adfe35f8f78ffed31e7c2ba8761 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Thu, 29 Aug 2019 10:51:11 +0200 Subject: [PATCH 17/29] MacroRugoCompound: manage varying parameters and iteration selector --- ...rorugo-compound-results-table.component.ts | 59 ++++++++++++------- .../macrorugo-compound-results.component.ts | 1 - .../variable-results-selector.component.ts | 22 ++++--- src/locale/messages.en.json | 3 +- src/locale/messages.fr.json | 1 + 5 files changed, 57 insertions(+), 29 deletions(-) diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts b/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts index 9102984c0..8352c1fa5 100644 --- a/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts @@ -58,27 +58,46 @@ export class MacrorugoCompoundResultsTableComponent extends ResultsComponent { // lines 1 - n-1 for (let i = 0; i < pr.childrenResults.length; i++) { - if ( - pr.childrenResults[i].resultElements[vi].vCalc - ) { - const res = pr.childrenResults[i].resultElements[vi].values; - const nub = (pr.childrenResults[i].sourceNub as MacroRugo); - this._dataSet.push([ - i + 1, // n° radier - nub.prms.ZF1.singleValue.toFixed(nDigits), // @TODO what if ZF1 or B varies ? - nub.prms.B.singleValue.toFixed(nDigits), - res.Q.toFixed(nDigits), - res.ZF2.toFixed(nDigits), - res.Vdeb.toFixed(nDigits), - res.Fr.toFixed(nDigits), - res.Vmax.toFixed(nDigits), - res.PV.toFixed(nDigits), - this.intlService.localizeText("INFO_ENUM_MACRORUGOFLOWTYPE_" + res.ENUM_MacroRugoFlowType), - res.Q_GuideTech.toFixed(nDigits), - (res.V_GuideTech !== undefined ? res.V_GuideTech.toFixed(nDigits) : "-"), - res.xCenter.toFixed(nDigits) - ]); + // @TODO protect loop contents with if(vCalc) ? Will hide erroneous apron results.. + const res = pr.childrenResults[i].resultElements[vi].values; + const nub = (pr.childrenResults[i].sourceNub as MacroRugo); + // does ZF1 or B vary ? + let zf1: number; + try { + if (nub.prms.ZF1.hasMultipleValues) { + zf1 = nub.prms.ZF1.getInferredValuesList()[vi]; + } else { + zf1 = nub.prms.ZF1.singleValue; + } + } catch (e) { + // silent fail } + let b: number; + try { + if (nub.prms.B.hasMultipleValues) { + b = nub.prms.B.getInferredValuesList()[vi]; + } else { + b = nub.prms.B.singleValue; + } + } catch (e) { + // silent fail + } + + this._dataSet.push([ + i + 1, // n° radier + (zf1 !== undefined ? zf1.toFixed(nDigits) : "-"), + (b !== undefined ? b.toFixed(nDigits) : "-"), + res.Q.toFixed(nDigits), + res.ZF2.toFixed(nDigits), + res.Vdeb.toFixed(nDigits), + res.Fr.toFixed(nDigits), + res.Vmax.toFixed(nDigits), + res.PV.toFixed(nDigits), + this.intlService.localizeText("INFO_ENUM_MACRORUGOFLOWTYPE_" + res.ENUM_MacroRugoFlowType), + res.Q_GuideTech.toFixed(nDigits), + (res.V_GuideTech !== undefined ? res.V_GuideTech.toFixed(nDigits) : "-"), + res.xCenter.toFixed(nDigits) + ]); } } } 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 db564243e..20b521280 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 @@ -252,7 +252,6 @@ export class MacrorugoCompoundResultsComponent implements DoCheck { this.generalLogComponent.log = this.globalLog; } - console.log("update ====>", this._mrcResults); if (this.hasResults) { mrcUpdated = this.mrcResultsTableComponent !== undefined; if (mrcUpdated) { 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 901c77ebb..0ac86ebd1 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 @@ -79,14 +79,22 @@ export class VariableResultsSelectorComponent { } protected entryLabel(index: number): string { - let i = 0; - return this.varValues.map((vv) => { + const kv = []; + for (let i = 0; i < this.varValues.length; i++) { + const vv = this.varValues[i]; const vp = this._results.variatedParameters[i]; - i++; - let value = "0"; - value = vv[index]; - return `${vp.symbol} = ${value}`; - }).join(", "); + let symbol = vp.symbol; + // is vp a parameter of a child Nub ? + if ( + vp.paramDefinition.parentNub + && vp.paramDefinition.parentNub !== vp.paramDefinition.originNub + ) { + const pos = vp.paramDefinition.parentNub.findPositionInParent() + 1; + symbol = this.intlService.localizeText("INFO_LIB_RADIER_N_COURT") + pos + "_" + symbol; + } + kv.push(`${symbol} = ${vv[index]}`); + } + return kv.join(", "); } public get selectedValue(): number { diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index adcc569ba..5953d1ee7 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -215,9 +215,10 @@ "INFO_LIB_Q": "Discharge", "INFO_LIB_QA": "Attraction flow", "INFO_LIB_R": "Hydraulic radius", - "INFO_LIB_S": "Orifice area", "INFO_LIB_RADIER": "Basin bottom", "INFO_LIB_RADIER_N": "Apron #", + "INFO_LIB_RADIER_N_COURT": "A#", + "INFO_LIB_S": "Orifice area", "INFO_LIB_SELECT_LOIDEBIT": "Stage-discharge law", "INFO_LIB_SELECT_LOIDEBIT1_KIVI": "Kindsvater-Carter and Villemonte", "INFO_LIB_SELECT_LOIDEBIT1": "Stage-discharge law", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index e5c5de4bf..ba9202669 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -216,6 +216,7 @@ "INFO_LIB_R": "Rayon hydraulique", "INFO_LIB_RADIER": "Radier", "INFO_LIB_RADIER_N": "Radier n°", + "INFO_LIB_RADIER_N_COURT": "R", "INFO_LIB_S": "Surface de l'orifice", "INFO_LIB_SELECT_LOIDEBIT": "Loi de débit", "INFO_LIB_SELECT_LOIDEBIT1_KIVI": "Kindsvater-Carter et Villemonte", -- GitLab From d5ef05a1cc013fb67fc9fffb1f81aa89f2d418f6 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Thu, 29 Aug 2019 11:34:53 +0200 Subject: [PATCH 18/29] Removed debug method causing a bug ^^ --- .../definition/concrete/form-macrorugo-compound.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts index 7f495c4d7..a1739d5cd 100644 --- a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts @@ -219,16 +219,8 @@ export class FormulaireMacrorugoCompound extends FormulaireBase { } } this.reset(); - this.debugMRC(); break; } } } - - private debugMRC() { - console.log(`MRC: ${this.mrcNub.children.length} children`); - for (const c of this.mrcNub.children) { - console.log(` - ${c.uid} : ZF1=${c.prms.ZF1.singleValue}, B=${c.prms.B.singleValue}`); - } - } } -- GitLab From 19a515f9181942a6bb29f4bfdcef76b193b6b4bf Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Thu, 29 Aug 2019 11:35:14 +0200 Subject: [PATCH 19/29] Update translation --- src/locale/messages.en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 5953d1ee7..6be90e4e7 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -217,7 +217,7 @@ "INFO_LIB_R": "Hydraulic radius", "INFO_LIB_RADIER": "Basin bottom", "INFO_LIB_RADIER_N": "Apron #", - "INFO_LIB_RADIER_N_COURT": "A#", + "INFO_LIB_RADIER_N_COURT": "A", "INFO_LIB_S": "Orifice area", "INFO_LIB_SELECT_LOIDEBIT": "Stage-discharge law", "INFO_LIB_SELECT_LOIDEBIT1_KIVI": "Kindsvater-Carter and Villemonte", -- GitLab From d29cda41abdf9351e34d3ad0e185bf9110b261e7 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Thu, 29 Aug 2019 15:02:55 +0200 Subject: [PATCH 20/29] MacroRugoCompound: graph --- .../macrorugo-compound-results.component.html | 4 +- .../macrorugo-compound-results.component.ts | 4 +- .../plottable-macrorugo-compound-results.ts | 94 ++++++++----------- 3 files changed, 40 insertions(+), 62 deletions(-) diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.html b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.html index 9d29b23ea..e03d0b2b1 100644 --- a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.html +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.html @@ -18,8 +18,8 @@ <div id="macrorugo-compound-graphs-container" class="container" fxLayout="row wrap" fxLayoutAlign="space-around start"> <!-- <pab-profile-graph *ngIf="hasDisplayableResults" fxFlex.gt-xs="1 0 400px" fxFlex.lt-sm="1 0 300px"> </pab-profile-graph> --> - <!-- <results-graph *ngIf="hasDisplayableResults" fxFlex.gt-xs="1 0 400px" fxFlex.lt-sm="1 0 300px"> - </results-graph> --> + <results-graph *ngIf="hasDisplayableResults" fxFlex.gt-xs="1 0 400px" fxFlex.lt-sm="1 0 300px"> + </results-graph> </div> </div> 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 20b521280..ca523574c 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 @@ -241,7 +241,6 @@ export class MacrorugoCompoundResultsComponent implements DoCheck { private updateResults() { let mrcUpdated: boolean; let resultsGraphUpdated: boolean; - let profileGraphUpdated: boolean; let selectorUpdated: boolean; // results or not, there might be a log @@ -269,11 +268,10 @@ export class MacrorugoCompoundResultsComponent implements DoCheck { } else { mrcUpdated = true; resultsGraphUpdated = true; - profileGraphUpdated = true; selectorUpdated = true; } - return mrcUpdated && logUpdated && resultsGraphUpdated && profileGraphUpdated && selectorUpdated; + return mrcUpdated && logUpdated && resultsGraphUpdated && selectorUpdated; } public get mrcResults() { diff --git a/src/app/results/plottable-macrorugo-compound-results.ts b/src/app/results/plottable-macrorugo-compound-results.ts index 0be1264f1..b4fb93c50 100644 --- a/src/app/results/plottable-macrorugo-compound-results.ts +++ b/src/app/results/plottable-macrorugo-compound-results.ts @@ -16,8 +16,8 @@ export class PlottableMacrorugoCompoundResults implements PlottableData { this.setMrcResults(mrcResults); } // axes par défaut - this.chartX = this.chartX || "CLOISON"; - this.chartY = this.chartY || "YMOY"; + this.chartX = this.chartX || "xCenter"; + this.chartY = this.chartY || "Q"; } /** reaffect mrcResults, for ex. when objet was contructed with empty mrcResults */ @@ -30,11 +30,7 @@ export class PlottableMacrorugoCompoundResults implements PlottableData { * @param symbol parameter / result symbol (ex: "Q") */ public getChartAxisLabel(symbol: string): string { - if (symbol === "x") { // specific case for wall abscissa - return ServiceFactory.instance.i18nService.localizeText("INFO_LIB_ABSCISSE_CLOISON"); - } else { - return this.mrcResults.headers[this.mrcResults.columns.indexOf(symbol)]; - } + return this.mrcResults.headers[this.mrcResults.columns.indexOf(symbol)]; } public expandLabelFromSymbol(symbol: string): string { @@ -47,7 +43,6 @@ export class PlottableMacrorugoCompoundResults implements PlottableData { */ public getAvailableChartAxis(): string[] { const axis = []; - axis.push("x"); // wall abscissa for (const c of this.mrcResults.columns) { if (c.indexOf("ENUM_") === -1) { // ENUM variables are not plottable axis.push(c); @@ -75,7 +70,6 @@ export class PlottableMacrorugoCompoundResults implements PlottableData { */ public getValuesSeries(symbol: string): number[] { const data: number[] = []; - const pr = this.mrcResults; const l = this.mrcResults.childrenResults.length; // when a parameter is variating, index of the variating parameter // values to build the data from @@ -85,55 +79,41 @@ export class PlottableMacrorugoCompoundResults implements PlottableData { return []; } - switch (symbol) { - case "RADIER_N": - data.push(undefined); - for (let i = 0; i <= l; i++) { // <= for one extra step (downwall) + for (let i = 0; i < l; i++) { + switch (symbol) { + case "RADIER_N": data.push(i + 1); - } - break; - - case "DH": - case "ZRAM": - /* case "Q": - data.push(undefined); - for (let i = 0; i < l; i++) { - const er = pr.cloisonsResults[i].resultElements[vi].getValue(symbol); - data.push(er); - } - const zrAval = pr.cloisonAvalResults.resultElements[vi].getValue(symbol); - data.push(zrAval); - break; - - case "Z": - for (let i = 0; i < l; i++) { - data.push(pr.cloisonsResults[i].resultElements[vi].vCalc); - } - data.push(pr.cloisonAvalResults.resultElements[vi].vCalc); - data.push(pr.Z2[vi]); - break; */ - - case "PV": - case "YMOY": - case "ZRMB": - case "QA": - data.push(undefined); - for (let i = 0; i < l; i++) { - const er = pr.childrenResults[i].resultElements[vi].getValue(symbol); - data.push(er); - } - data.push(undefined); - break; - - /* case "x": // wall abscissa - data.push(undefined); - for (let i = 0; i < l; i++) { - const er = pr.cloisonsResults[i].resultElements[vi].getValue(symbol); - data.push(er); - } - const erXdw = pr.cloisonAvalResults.resultElements[vi].getValue(symbol); - data.push(erXdw); - break; */ + break; + + case "ZF1": + case "B": + let v: number; + const nub = this.mrcResults.childrenResults[i].sourceNub; + const param = nub.getParameter(symbol); + try { + if (param.hasMultipleValues) { + v = param.getInferredValuesList()[vi]; + } else { + v = param.singleValue; + } + } catch (e) { + // silent fail + } + data.push(v); + break; + + case "Q": + case "ZF2": + case "Vdeb": + case "Fr": + case "Vmax": + case "PV": + case "Q_GuideTech": + case "V_GuideTech": + case "xCenter": + data.push(this.mrcResults.childrenResults[i].resultElements[vi].getValue(symbol)); + break; + } } return data; -- GitLab From dda1cc280247d7063778246d2c0e637d3dabc11d Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Thu, 29 Aug 2019 17:40:11 +0200 Subject: [PATCH 21/29] MacrorugoCompound: update GUI apron state at session load --- .../concrete/form-macrorugo-compound.ts | 53 +++++++++++-------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts index a1739d5cd..d15d41e2b 100644 --- a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts @@ -152,6 +152,7 @@ export class FormulaireMacrorugoCompound extends FormulaireBase { protected completeParse(json: {}) { this.subscribeFieldsetContainer(); + this.updateApronState(this.mrcNub.properties.getPropValue("inclinedApron")); } private get fieldsetContainer(): FieldsetContainer { @@ -180,6 +181,34 @@ export class FormulaireMacrorugoCompound extends FormulaireBase { } } + /** + * Reflect inclinedApron property state in GUI + */ + public updateApronState(inclined: boolean) { + for (const fs of this.allFieldsets) { + // show / hide dependent fields (read from model) + fs.updateFields(); + } + // show / hide children list (GUI only) + for (const elt of this.allFormElements) { + if (elt instanceof FieldsetContainer) { + elt.isDisplayed = (! inclined); + } + } + // when switching to multiple aprons, remove all fieldset container + // instances and reinstanciate for every MacroRugo child + if (! inclined) { + for (const elt of this.allFormElements) { + if (elt instanceof FieldsetContainer) { + elt.clearKids(); + for (const c of this.mrcNub.children) { + elt.addFromTemplate(0, undefined, c); + } + } + } + } + } + // interface Observer public update(sender: IObservable, data: any) { @@ -195,29 +224,7 @@ export class FormulaireMacrorugoCompound extends FormulaireBase { } else if (sender instanceof FieldSet && data.action === "propertyChange") { switch (data.name) { case "inclinedApron": - // reflect changes in GUI - for (const fs of this.allFieldsets) { - // show / hide dependent fields (read from model) - fs.updateFields(); - } - // show / hide children list (GUI only) - for (const elt of this.allFormElements) { - if (elt instanceof FieldsetContainer) { - elt.isDisplayed = (! data.value); - } - } - // when switching to multiple aprons, remove all fieldset container - // instances and reinstanciate for every MacroRugo child - if (! data.value) { - for (const elt of this.allFormElements) { - if (elt instanceof FieldsetContainer) { - elt.clearKids(); - for (const c of this.mrcNub.children) { - elt.addFromTemplate(0, undefined, c); - } - } - } - } + this.updateApronState(data.value); this.reset(); break; } -- GitLab From 91e00728e57ea5d6f61f3e5986b1b8f083367f9c Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Fri, 30 Aug 2019 09:58:43 +0200 Subject: [PATCH 22/29] FieldSetContainer validation: an empty or hidden container is always valid --- .../fieldset-container/fieldset-container.component.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/components/fieldset-container/fieldset-container.component.ts b/src/app/components/fieldset-container/fieldset-container.component.ts index 784034788..615282617 100644 --- a/src/app/components/fieldset-container/fieldset-container.component.ts +++ b/src/app/components/fieldset-container/fieldset-container.component.ts @@ -116,7 +116,7 @@ export class FieldsetContainerComponent implements DoCheck, AfterViewInit { private updateValidity() { this._isValid = false; - if (this._fieldsetComponents !== undefined) { + if (this._fieldsetComponents !== undefined && this._fieldsetComponents.length > 0) { this._isValid = this._fieldsetComponents.reduce( // callback ( @@ -133,6 +133,9 @@ export class FieldsetContainerComponent implements DoCheck, AfterViewInit { } // valeur initiale , this._fieldsetComponents.length > 0); + } else { + // empty / hidden container ? everything OK. + this._isValid = true; } this.validChange.emit(); -- GitLab From 5a6d200e3afa4692db41155ab1e988ab5609f17d Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Fri, 30 Aug 2019 11:27:24 +0200 Subject: [PATCH 23/29] MacrorugoCompound: add unit in results for ZF1 and B --- src/app/results/macrorugo-compound-results.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/app/results/macrorugo-compound-results.ts b/src/app/results/macrorugo-compound-results.ts index ec1275b92..dc63e24aa 100644 --- a/src/app/results/macrorugo-compound-results.ts +++ b/src/app/results/macrorugo-compound-results.ts @@ -46,7 +46,13 @@ export class MacrorugoCompoundResults extends MultiDimensionResults { if (sn.parent) { ct = sn.parent.calcType; } - return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct , h); + let unit; + // is h a parameter ? If so, extract its unit + const p = sn.getParameter(h); + if (p) { + unit = p.unit; + } + return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct , h, unit); }); } -- GitLab From 5fed209aaf4eb15493815ee9a5e72fd76c20678c Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Fri, 30 Aug 2019 11:39:15 +0200 Subject: [PATCH 24/29] MacrorugoCompound: added total flow result line --- .../macrorugo-compound-results-table.component.ts | 10 +++++++++- src/locale/messages.en.json | 1 + src/locale/messages.fr.json | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts b/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts index 8352c1fa5..5f3e09781 100644 --- a/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results-table.component.ts @@ -56,7 +56,7 @@ export class MacrorugoCompoundResultsTableComponent extends ResultsComponent { // refresh headers here if language changed this._headers = pr.headers; - // lines 1 - n-1 + // lines 1 - n-1 (aprons) for (let i = 0; i < pr.childrenResults.length; i++) { // @TODO protect loop contents with if(vCalc) ? Will hide erroneous apron results.. const res = pr.childrenResults[i].resultElements[vi].values; @@ -99,6 +99,14 @@ export class MacrorugoCompoundResultsTableComponent extends ResultsComponent { res.xCenter.toFixed(nDigits) ]); } + + // line n (total flow) + this._dataSet.push([ + this.intlService.localizeText("INFO_LIB_TOTAL"), + "", "", + pr.result.resultElements[vi].vCalc.toFixed(nDigits), + "", "", "", "", "", "", "", "", "" + ]); } } diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 6be90e4e7..3305a7ddc 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -230,6 +230,7 @@ "INFO_LIB_STRUCT_CONTAINER": "Devices", "INFO_LIB_TAU0": "Tractive force", "INFO_LIB_TOR": "Supercritical water line", + "INFO_LIB_TOTAL": "Total", "INFO_LIB_V_GUIDETECH": "Technical guide speed", "INFO_LIB_V": "Average speed", "INFO_LIB_VDEB": "Conveyance speed", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index ba9202669..5f94ea7ac 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -229,6 +229,7 @@ "INFO_LIB_STRUCT_CONTAINER": "Ouvrages", "INFO_LIB_TAU0": "Force tractrice", "INFO_LIB_TOR": "Ligne d'eau torrentielle", + "INFO_LIB_TOTAL": "Total", "INFO_LIB_V_GUIDETECH": "Vitesse Guide technique", "INFO_LIB_V": "Vitesse moyenne", "INFO_LIB_VDEB": "Vitesse débitante", -- GitLab From 0938e29fec36f0a2f25f2011596ef313a0975386 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Mon, 2 Sep 2019 10:44:13 +0200 Subject: [PATCH 25/29] Set protractor back to headless --- protractor.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protractor.conf.js b/protractor.conf.js index 4c1db58bb..6c546c716 100644 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -16,7 +16,7 @@ exports.config = { capabilities: { browserName: 'chrome', chromeOptions: { - // args: [ "--headless", "--window-size=1024x768" ], + args: [ "--headless", "--window-size=1024x768" ], prefs: { download: { prompt_for_download: false, -- GitLab From f8937e14ef12ca877f1354602a94997a60694cb0 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 3 Sep 2019 17:48:24 +0200 Subject: [PATCH 26/29] Remove comment --- src/app/services/formulaire/formulaire.service.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index 17ca8900a..dd372d615 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -409,18 +409,6 @@ export class FormulaireService extends Observable { f.pabNub.downWall = newDownWall; } - // @TODO add aprons for existing Aprons if needed - // (when loading session only) - /* if (f.currentNub instanceof MacrorugoCompound) { - for (const struct of f.currentNub.structures) { - for (const e of f.allFormElements) { - if (e instanceof FieldsetContainer) { // @TODO manage many containers one day ? - e.addFromTemplate(0, undefined, struct); - } - } - } - } */ - return f; }).then(fi => { -- GitLab From 6ae4771543ec4e3680aeaf7271170c0d0bdf8fe7 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Wed, 4 Sep 2019 11:20:12 +0200 Subject: [PATCH 27/29] Update dependencies --- package-lock.json | 2482 ++++++++++++++++++++++----------------------- package.json | 64 +- 2 files changed, 1256 insertions(+), 1290 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4c9a9bbd2..3ef9b8aab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,12 +11,12 @@ "dev": true }, "@angular-devkit/architect": { - "version": "0.801.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.801.2.tgz", - "integrity": "sha512-gdPdT6y3TDA3hzTAlI3Ym8QB8Zj8kqAMzDwP1JSXxekF6md0qc+NK7WCu6Y+pj1Bbo5mXpxHBov4Xwv1l4STQA==", + "version": "0.801.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.801.3.tgz", + "integrity": "sha512-gg6ZyJMiRYuzzmbpuDszrsE/hpwzoUnlOVoLNNzbACGBSDiqelC1mvGHb9JQM56Sy8gSjZn6RT0K2/Og79GoSg==", "dev": true, "requires": { - "@angular-devkit/core": "8.1.2", + "@angular-devkit/core": "8.1.3", "rxjs": "6.4.0" }, "dependencies": { @@ -32,16 +32,16 @@ } }, "@angular-devkit/build-angular": { - "version": "0.801.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.801.2.tgz", - "integrity": "sha512-PXwqvogl/brFjWhQMJoBTif5cGs5w1O/dahNaW3s9qbPGOg0E0nta+K8F/lL8x2pksslQi0jui6CeP1Yv+i1aA==", + "version": "0.801.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.801.3.tgz", + "integrity": "sha512-BmN48xepRzQN2h2L7k9MhEWSAmEJj8celtD9Tu9Gn2DeM0yh2TFW9OKFKJlqyF3vGd3at24bqHOXI4MtDeltQQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.801.2", - "@angular-devkit/build-optimizer": "0.801.2", - "@angular-devkit/build-webpack": "0.801.2", - "@angular-devkit/core": "8.1.2", - "@ngtools/webpack": "8.1.2", + "@angular-devkit/architect": "0.801.3", + "@angular-devkit/build-optimizer": "0.801.3", + "@angular-devkit/build-webpack": "0.801.3", + "@angular-devkit/core": "8.1.3", + "@ngtools/webpack": "8.1.3", "ajv": "6.10.0", "autoprefixer": "9.6.0", "browserslist": "4.6.3", @@ -99,12 +99,41 @@ "uri-js": "^4.2.2" } }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, "core-js": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==", "dev": true }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -119,6 +148,18 @@ "path-is-absolute": "^1.0.0" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "rxjs": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", @@ -149,13 +190,58 @@ "buffer-from": "^1.0.0", "source-map": "^0.6.0" } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "webpack-dev-server": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.7.2.tgz", + "integrity": "sha512-mjWtrKJW2T9SsjJ4/dxDC2fkFVUw8jlpemDERqV0ZJIkjjjamR2AbQlr3oz+j4JLhYCHImHnXZK5H06P2wvUew==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.6", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "^0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "killable": "^1.0.1", + "loglevel": "^1.6.3", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.20", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.4", + "semver": "^6.1.1", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "^4.0.0", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.0", + "webpack-log": "^2.0.0", + "yargs": "12.0.5" + } } } }, "@angular-devkit/build-optimizer": { - "version": "0.801.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.801.2.tgz", - "integrity": "sha512-BwbRn+11MpR4XjVLoFZZY1DAPCnft/5z6g6kfbTmoJNm6TD7+KypCEXw3MzdGt9vp085XJibc405R1QmmrOF+g==", + "version": "0.801.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.801.3.tgz", + "integrity": "sha512-5wyzek1Ls7T9bh24yGDC/3Ss1YePpnOyBu0D8mJkByjPJjQr0xXR6UPx/7Idq6Y8BMeGO/+MiMOLZoUTPTIa0w==", "dev": true, "requires": { "loader-utils": "1.2.3", @@ -179,13 +265,13 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.801.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.801.2.tgz", - "integrity": "sha512-xy0MHLaXw4pz0NEg7fNyPjXdKkjeLAI6T2fnzYbLw3TJOqVe9y7p5uDLWa2/wp66mk34gcM/7A0ILqaIJ/ytGg==", + "version": "0.801.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.801.3.tgz", + "integrity": "sha512-IuR1WKldZwrAQWlKCLv+MnNeR1tWFCSJ9wXAgKqvlAPiYHEvTvazRVbWerxgVFvL4MCOt2wYVz/AqQWVYAhwlQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.801.2", - "@angular-devkit/core": "8.1.2", + "@angular-devkit/architect": "0.801.3", + "@angular-devkit/core": "8.1.3", "rxjs": "6.4.0", "webpack-merge": "4.2.1" }, @@ -202,9 +288,9 @@ } }, "@angular-devkit/core": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.1.2.tgz", - "integrity": "sha512-sNkqXbkHE9+ObtLOYmDKJL1bOf1zY0AwGVKemgDqCmu1mRUNqhb7CmF13DRscfU3MEcuiJYDjXqBQDjIszrFiw==", + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.1.3.tgz", + "integrity": "sha512-Vj5fowuz27J+S74U1+MrSrJ7vI+OZC5HBOp4m7rrh/GcYlujcX3BUu0Bxi7LI1v90yDsr0s/iEAKsff05ByXiw==", "dev": true, "requires": { "ajv": "6.10.0", @@ -238,15 +324,40 @@ } }, "@angular-devkit/schematics": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.1.2.tgz", - "integrity": "sha512-Di/3vPR4jwdYcMAk13t19sAF0qQUH8KSkFcmO/5E/gECTL1tXNvV690K1Vhn6zpeE17Z1MLB5HwRNcb6nJkD+Q==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.3.2.tgz", + "integrity": "sha512-WwiHtDeW7+Gw5pukdjyuwQ+Ino7AFnoKUqqYrsTwPnNky+p8JVT4tY6jTxwenOLOVsLSDz5oVn9jk5u70HLX4Q==", "dev": true, "requires": { - "@angular-devkit/core": "8.1.2", + "@angular-devkit/core": "8.3.2", "rxjs": "6.4.0" }, "dependencies": { + "@angular-devkit/core": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.2.tgz", + "integrity": "sha512-jFrBGPJBhy4D4foH9YHDrlbqGmb+ZivTKtHnR4yV241VUd3W53+KABrvPyHeS5xk/aHTRsm76rx6l+UREEEUkw==", + "dev": true, + "requires": { + "ajv": "6.10.2", + "fast-json-stable-stringify": "2.0.0", + "magic-string": "0.25.3", + "rxjs": "6.4.0", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "rxjs": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", @@ -259,17 +370,17 @@ } }, "@angular/animations": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-8.1.2.tgz", - "integrity": "sha512-szR5qzRe6vS1qrPhV2p5fMp5vQxT2SaljXGs3Xgt2Tl23om0XVNcqK0I8NNuK/ehuJ5LXQ1fJHniGcmN2aUw0g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-8.2.4.tgz", + "integrity": "sha512-EHTvA5ugoFiYVwi9SyozJORWcBhUIn06VbNa2uhQQdOUrsbvKBCF0PpH2nZZJz7wsQ6Pyonizee8vgea8/X59Q==", "requires": { "tslib": "^1.9.0" } }, "@angular/cdk": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-8.1.3.tgz", - "integrity": "sha512-+DOS6x05/nNdnoRmEi3bgQxKym34PeCRGD6dimdw0l7ZgM57qhlaBWo0dXB7QSyR9E44uVT91e4h8ye+/ne1DQ==", + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-8.1.4.tgz", + "integrity": "sha512-U0tjhAZM4qqUHGGKIKFZZ9d8929s2U/HO0FdoT/eX+oHPOA6mm3bBep7myrSzlkP9V7O1JJfYdhEgijXhYxprQ==", "requires": { "parse5": "^5.0.0", "tslib": "^1.7.1" @@ -284,37 +395,96 @@ } }, "@angular/cli": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-8.1.2.tgz", - "integrity": "sha512-Zz9WGqPgr+w9SfpDeKLPzGFLZaX7uu2kU7/r6vxvnESJcnoxKOJBf+ipXu42TY7D3FtSiPBO27GBTSVgPCseoQ==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-8.3.2.tgz", + "integrity": "sha512-NFL/QG+u607kQigubTj6Mlv289/6AvBooqkesBGta/Axaqgz3kPqJbz8YJs51mrHpa9rmx0IIncIMeKjHa7vTw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.801.2", - "@angular-devkit/core": "8.1.2", - "@angular-devkit/schematics": "8.1.2", - "@schematics/angular": "8.1.2", - "@schematics/update": "0.801.2", + "@angular-devkit/architect": "0.803.2", + "@angular-devkit/core": "8.3.2", + "@angular-devkit/schematics": "8.3.2", + "@schematics/angular": "8.3.2", + "@schematics/update": "0.803.2", "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.0", + "ansi-colors": "4.1.1", "debug": "^4.1.1", "ini": "1.3.5", - "inquirer": "6.4.1", + "inquirer": "6.5.1", "npm-package-arg": "6.1.0", "open": "6.4.0", - "pacote": "9.5.1", + "pacote": "9.5.5", "read-package-tree": "5.3.1", - "semver": "6.2.0", + "semver": "6.3.0", "symbol-observable": "1.2.0", "universal-analytics": "^0.4.20", "uuid": "^3.3.2" }, "dependencies": { + "@angular-devkit/architect": { + "version": "0.803.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.803.2.tgz", + "integrity": "sha512-1HFuZzMOFhVmbfoNwbYDLU3hhYMFmtB0eve/dB4KEvCFq6AEoFPVc5xt4tWpeN41wISfiCgxf5kHE3y07g0Yag==", + "dev": true, + "requires": { + "@angular-devkit/core": "8.3.2", + "rxjs": "6.4.0" + } + }, + "@angular-devkit/core": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.2.tgz", + "integrity": "sha512-jFrBGPJBhy4D4foH9YHDrlbqGmb+ZivTKtHnR4yV241VUd3W53+KABrvPyHeS5xk/aHTRsm76rx6l+UREEEUkw==", + "dev": true, + "requires": { + "ajv": "6.10.2", + "fast-json-stable-stringify": "2.0.0", + "magic-string": "0.25.3", + "rxjs": "6.4.0", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "dev": true, + "requires": { + "type-fest": "^0.5.2" + } + }, + "ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.0.tgz", - "integrity": "sha512-3NkLpm6I6kEgC8J0I9EZ0fouXc/mm5J9zqJFCgA2jGqmsL0O64I7Uvi3AmUMnnRqc6u7uLgVVnY4pyBQ03nCiw==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -324,40 +494,136 @@ "ms": "^2.1.1" } }, + "figures": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz", + "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "inquirer": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz", + "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true + }, + "string-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", + "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^5.2.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" + } } } }, "@angular/common": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-8.1.2.tgz", - "integrity": "sha512-bywFofN5RjcvygYEC/3eo+bfUnYBmARA6DPau8fm6D2ZGpXrWXJ3Thd99ZesuuffvpniaIHlAjbHGI83XSnixQ==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-8.2.4.tgz", + "integrity": "sha512-sPeTkor3uf8T3MvpekS0ZQe9K/yzlHBSoMyT0bIPOYeDTHUph3f/0XyYhH7KSGXLo7tSw1Mx9Ua05nQ+VHtLGQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-8.1.2.tgz", - "integrity": "sha512-oRkHrstOV6imbb4mGf6q20d4N4iYfBbI6WfxtPL4dz08GipGg4Zvekn4e3R01vzhFBxssGcgmeEtFQJh/UzI8g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-8.2.4.tgz", + "integrity": "sha512-LYaYhQlW3GFiXrNywJBYQtsLOWmUFcgudacF1m7QHHhlljnkG3BqkosbT0Dkcl7ayrIDYT/ZMTkVmaiGvgAhnw==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-8.1.2.tgz", - "integrity": "sha512-Dxm99iuv265AlUf3aX3nRl+Iqrj3RvlQgPOYLsV1EEVnA2+4Mjj52zbKgdOOOfhCF48imVbaU45Sh8p2l1xdOw==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-8.2.4.tgz", + "integrity": "sha512-tN269yWPbJsetzmO8x/Bx7wLwqCfnD8BYoJsBFPcZOZpW0cfELzVdY13R325WB1uXiMrVN0lskNtPBLe9OcMTA==", "dev": true, "requires": { "canonical-path": "1.0.0", @@ -372,10 +638,16 @@ "yargs": "13.1.0" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -392,6 +664,18 @@ "upath": "^1.1.1" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -404,86 +688,141 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "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 }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true + }, + "yargs": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.1.0.tgz", + "integrity": "sha512-1UhJbXfzHiPqkfXNHYhiz79qM/kZqjTE8yGlEjZa85Q+3+OwcV6NRkV7XOV1W2Eom2bzILeUn55pQYffjVOLAg==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, "@angular/core": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-8.1.2.tgz", - "integrity": "sha512-Gm/UIUnIkeah39vxi4enVH/CUcPZOgGDyw4RNagw4pH8dTP8V0RUz8uteOr3DS+Eh49BcHkrT2oU5MBZSZ3lvw==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-8.2.4.tgz", + "integrity": "sha512-8FSdkUSb5S4+K2w49iLzrQF/jzcmoRnOogFZQ8CctiXQHSVHHF8AjpoFpFVUAI6/77UVL8CehlyBSKF5EE1Z8A==", "requires": { "tslib": "^1.9.0" } }, "@angular/flex-layout": { - "version": "8.0.0-beta.26", - "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-8.0.0-beta.26.tgz", - "integrity": "sha512-lXDLlMSNQhidW0grvisIsj/3gqLuYyN2MvABuRYybnFTc233sXGZuOAaulqq663LA0/DP/GNcz6a+A4ZAAlmPA==", + "version": "8.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-8.0.0-beta.27.tgz", + "integrity": "sha512-qmpvQPesU4ZQ56IscwgmVRpK2UnyV+gwvXUql7TMv0QV215hLcHczjGsrKkLfW2By5E7XEyDat9br72uVXcPMw==", "requires": { "tslib": "^1.7.1" } }, "@angular/forms": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-8.1.2.tgz", - "integrity": "sha512-DHqbWt6AGnLkNajLZUAH4yQrxZdgUkjzEW6oxwvS2PxmLIrppz4TYWizfAVQndZ1Ddl7Eo1zRoRzqqHT90XyGA==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-8.2.4.tgz", + "integrity": "sha512-TsaMrfy/Ls9kpxxlkqaPSQCL3DWqIzh3fMd0aGXTjcsEFI3gztttAmE/dlU0dtVsQxD0M9cdqjjPqi0TGamfTw==", "requires": { "tslib": "^1.9.0" } }, "@angular/language-service": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-8.1.2.tgz", - "integrity": "sha512-9DR5TclsEpMIzCmagLHKYDTAqcZUkZKPjkngqIAUJg5R4IUjsuYn8NZX+agoOrS4ky6Dy9FXGYUC+QB0iEiycg==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-8.2.4.tgz", + "integrity": "sha512-8yoplzpNgZOMMluvxiyc0hwVs6WJBkHJoM8Dy3pb0UIRfYO1IDwrEEV6bbn25oORW59q7tUO3GD1yXwuJCswPQ==", "dev": true }, "@angular/material": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-8.1.3.tgz", - "integrity": "sha512-qZVWrJ/EO1y0lJCy7pe536RlYiih3p3fQzj7tgus7JdOpspyF+zBLzn8gNrdAFACXpVWwq2kLorieoR3BB47ZQ==", + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-8.1.4.tgz", + "integrity": "sha512-HV1qU63MaOtAc+cWg21Y2ygQKdEDjsGQ/3d3qym9sfR0xU2vvY7OG6gH48BfPeU63oMYxQkhxfoGP8wWMXSU1w==", "requires": { "tslib": "^1.7.1" } }, "@angular/platform-browser": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-8.1.2.tgz", - "integrity": "sha512-n61OtH3B0e+LTHCfHPjB7hiuo0ZxKxZvNWigczGyLZf2abga5jac2bNrdZnU8zXC44AUfasUD2qDS2IPIhNbqA==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-8.2.4.tgz", + "integrity": "sha512-3nd71h6S4RT9lHu9mVGD/741O+8MBSjI1A0V8H/LjT79yWnkxoR6BgZA7KL76AeTTITagUcVIuxtNAaxssgLHg==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.1.2.tgz", - "integrity": "sha512-NmbGMwKPbYq3ZFt6nOqRslJsQNRS2E94cjkSLseEb5wauUmdUBX9stoHu8BOhvd+EIEcYhD7uxPB+L/qPsH46g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.2.4.tgz", + "integrity": "sha512-qn84B796UZIl1KB+YcxwFCx/Ze439Zf7G8ZK+xKsUA16H0R6GswAgBndnYq8xFjww1g4dY7zNH/XZ2FKngETKA==", "requires": { "tslib": "^1.9.0" } }, "@angular/router": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-8.1.2.tgz", - "integrity": "sha512-+SWoYZHyDBBUydDTbIu+hyoGzWtSA4VUsriUPWEOCplzQiabFhWxVvcT00mO0cim4XfupL1tmiPjE66sivLYBw==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-8.2.4.tgz", + "integrity": "sha512-ZJwsztlD1vbb2HF9SgvHfpIK82BkOlDP2OmdZZavnxV7RstbU5hUkJ4lB4JB/EN9B76djo117CwOxxIveOhJMQ==", "requires": { "tslib": "^1.9.0" } }, "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "dev": true, "requires": { "@babel/highlight": "^7.0.0" @@ -546,9 +885,9 @@ } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -615,15 +954,6 @@ "lodash": "^4.17.13" }, "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -929,6 +1259,16 @@ } } }, + "@develar/schema-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.1.0.tgz", + "integrity": "sha512-qjCqB4ctMig9Gz5bd6lkdFr3bO6arOdQqptdBSpF1ZpCnjofieCciEzkoS9ujY9cMGyllYSCSmBJ3x9OKHXzoA==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, "@dsherret/to-absolute-glob": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@dsherret/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", @@ -950,12 +1290,12 @@ } }, "@ngtools/webpack": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.1.2.tgz", - "integrity": "sha512-xA1SZI6BiEqmfxyaxw2TobF3gkZdfyEeCP1zhPm38PjQ1zU7Xx3TbvxTeMKGV3EOTMxvUETDiS65YJrIvGnaNA==", + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.1.3.tgz", + "integrity": "sha512-gSsLMdCJsQp7ZKF5Tl/yfns1eMtmc89J+yoWiOLoSHb8cupP2G4o7DL8wGkylsyALu5eomF/RSnivC9SGvdxYQ==", "dev": true, "requires": { - "@angular-devkit/core": "8.1.2", + "@angular-devkit/core": "8.1.3", "enhanced-resolve": "4.1.0", "rxjs": "6.4.0", "tree-kill": "1.2.1", @@ -980,49 +1320,110 @@ "dev": true }, "@schematics/angular": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.1.2.tgz", - "integrity": "sha512-BeEzuS0s4j+BPboUhl97VMfhj7V+HpNbbY3PkD3TLd0cnSEoaLmtX+YjxbxZgwk6vhDp+l6YtpWt//5H/+0rFQ==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.3.2.tgz", + "integrity": "sha512-kDT5lhr488NpqS4OKn8B9VUwl5AUNqRkLLqWgNHvxQcV1OtLhVJVw4ih1vhrH7wlUd39EwnRqtBX+53cg2PDmA==", "dev": true, "requires": { - "@angular-devkit/core": "8.1.2", - "@angular-devkit/schematics": "8.1.2" - } - }, - "@schematics/update": { - "version": "0.801.2", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.801.2.tgz", - "integrity": "sha512-xb54QXvII1JLdqgEqsh6mWu5qTt5UezmOWTZayRegsj0vNlzWFzoLXpiPFCWVEKUODa6aV4O5XW5CiQuVYPVuQ==", - "dev": true, - "requires": { - "@angular-devkit/core": "8.1.2", - "@angular-devkit/schematics": "8.1.2", - "@yarnpkg/lockfile": "1.1.0", - "ini": "1.3.5", - "pacote": "9.5.1", - "rxjs": "6.4.0", - "semver": "6.2.0", - "semver-intersect": "1.4.0" + "@angular-devkit/core": "8.3.2", + "@angular-devkit/schematics": "8.3.2" }, "dependencies": { - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "@angular-devkit/core": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.2.tgz", + "integrity": "sha512-jFrBGPJBhy4D4foH9YHDrlbqGmb+ZivTKtHnR4yV241VUd3W53+KABrvPyHeS5xk/aHTRsm76rx6l+UREEEUkw==", "dev": true, "requires": { - "tslib": "^1.9.0" + "ajv": "6.10.2", + "fast-json-stable-stringify": "2.0.0", + "magic-string": "0.25.3", + "rxjs": "6.4.0", + "source-map": "0.7.3" } }, - "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", - "dev": true - } - } - }, - "@sindresorhus/is": { + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@schematics/update": { + "version": "0.803.2", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.803.2.tgz", + "integrity": "sha512-UX01kuGEXMEnV19Dd7/lNzFnokZ05an9o0yEoRp50e7HH2mUOCPcxlnwGOq1obUJdyXkvItNrwWsIp2krXt4wQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "8.3.2", + "@angular-devkit/schematics": "8.3.2", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "pacote": "9.5.5", + "rxjs": "6.4.0", + "semver": "6.3.0", + "semver-intersect": "1.4.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.2.tgz", + "integrity": "sha512-jFrBGPJBhy4D4foH9YHDrlbqGmb+ZivTKtHnR4yV241VUd3W53+KABrvPyHeS5xk/aHTRsm76rx6l+UREEEUkw==", + "dev": true, + "requires": { + "ajv": "6.10.2", + "fast-json-stable-stringify": "2.0.0", + "magic-string": "0.25.3", + "rxjs": "6.4.0", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", @@ -1038,9 +1439,9 @@ } }, "@types/debug": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.4.tgz", - "integrity": "sha512-D9MyoQFI7iP5VdpEyPZyjjqIJ8Y8EDNQFIFVLOmeg1rI1xiHOChyUPMPRUVfqFCerxfE+yS3vMyj37F6IdtOoQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", + "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", "dev": true }, "@types/events": { @@ -1067,9 +1468,9 @@ } }, "@types/jasmine": { - "version": "3.3.14", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.14.tgz", - "integrity": "sha512-0mE8mLKrobGicrQqSU3GI1rE+yy0tfGWoGklhrsYVV3ZaHcQGNUs0UQ07pXIiGVHJB3fKP0qApcmApySk4wCRw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.4.0.tgz", + "integrity": "sha512-6pUnBg6DuSB55xnxJ5+gW9JOkFrPsXkYAuqqEE8oyrpgDiPQ+TZ+1Zt4S+CHcRJcxyNYXeIXG4vHSzdF6y9Uvw==", "dev": true }, "@types/jasminewd2": { @@ -1093,9 +1494,9 @@ "integrity": "sha512-13gmo3M2qVvjQrWNseqM3+cR6S2Ss3grbR2NZltgMq94wOwqJYQdgn8qzwDshzgXqMlSUtyPZjysImmktu22ew==" }, "@types/node": { - "version": "12.6.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz", - "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", + "version": "12.7.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.4.tgz", + "integrity": "sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ==", "dev": true }, "@types/pako": { @@ -1365,9 +1766,9 @@ } }, "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", "dev": true }, "acorn-dynamic-import": { @@ -1385,12 +1786,6 @@ "printj": "~1.1.0" } }, - "adm-zip": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", - "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", - "dev": true - }, "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", @@ -1462,9 +1857,9 @@ } }, "angular2-hotkeys": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/angular2-hotkeys/-/angular2-hotkeys-2.1.4.tgz", - "integrity": "sha512-/KzgsrFjodoeZosXqsx1IvUo3rWBalSJ3QyVz2EALj1C0Woz84iNtXPZnlzuPNHrCmHcfOu28BNvIGBa+9Ving==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/angular2-hotkeys/-/angular2-hotkeys-2.1.5.tgz", + "integrity": "sha512-HiAnK1pW7lns5LpxtRsdkRRb5iVa7fv8Cf69Jye6l9gI6/IyvaVDptRtsWmdIG7VAr2Ngz6Yeehkym39O/LdgA==", "requires": { "@types/mousetrap": "^1.6.0", "mousetrap": "^1.6.0" @@ -1490,10 +1885,10 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "string-width": { @@ -1609,26 +2004,27 @@ "dev": true }, "app-builder-bin": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.4.0.tgz", - "integrity": "sha512-ZyQqfFnyjAmXep29PmuMIu2KvGlfHiziz2/I38zOFe5kqnkMqeNNn/qmnwD6wdCKKeHqBuZtoWQnft8q0YyLpw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.4.3.tgz", + "integrity": "sha512-qMhayIwi3juerQEVJMQ76trObEbfQT0nhUdxZz9a26/3NLT3pE6awmQ8S1cEnrGugaaM5gYqR8OElcDezfmEsg==", "dev": true }, "app-builder-lib": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-21.1.1.tgz", - "integrity": "sha512-nG5w9xjv4c16ki+pyBPqJvUCtQY97XQNsA4dEBryq6vClwDTkwKrl7aS0cXjo3dsWKsf/5EIcLrV0tfIiXUqJA==", + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-21.2.0.tgz", + "integrity": "sha512-aOX/nv77/Bti6NymJDg7p9T067xD8m1ipIEJR7B4Mm1GsJWpMm9PZdXtCRiMNRjHtQS5KIljT0g17781y6qn5A==", "dev": true, "requires": { "7zip-bin": "~5.0.3", + "@develar/schema-utils": "~2.1.0", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "21.1.1", + "builder-util": "21.2.0", "builder-util-runtime": "8.3.0", "chromium-pickle-js": "^0.2.0", "debug": "^4.1.1", "ejs": "^2.6.2", - "electron-publish": "21.1.1", + "electron-publish": "21.2.0", "fs-extra": "^8.1.0", "hosted-git-info": "^2.7.1", "is-ci": "^2.0.0", @@ -1637,9 +2033,9 @@ "lazy-val": "^1.0.4", "minimatch": "^3.0.4", "normalize-package-data": "^2.5.0", - "read-config-file": "4.0.1", - "sanitize-filename": "^1.6.1", - "semver": "^6.2.0", + "read-config-file": "5.0.0", + "sanitize-filename": "^1.6.2", + "semver": "^6.3.0", "temp-file": "^3.3.4" }, "dependencies": { @@ -1652,29 +2048,6 @@ "ms": "^2.1.1" } }, - "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", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.2.tgz", - "integrity": "sha512-C3FSxJdNrEr2F4z6uFtNzECDM5hXk+46fxaa+cwBe5/XrWSmzdG8DDgyjfX6/NRdBB21q2JXuRAzPCUs+fclnQ==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1682,9 +2055,9 @@ "dev": true }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -1956,9 +2329,9 @@ "dev": true }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "asynckit": { @@ -2309,9 +2682,9 @@ } }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", "dev": true }, "bluebird-lst": { @@ -2321,14 +2694,6 @@ "dev": true, "requires": { "bluebird": "^3.5.5" - }, - "dependencies": { - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", - "dev": true - } } }, "bn.js": { @@ -2374,15 +2739,6 @@ "toidentifier": "1.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==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -2445,16 +2801,10 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "string-width": { @@ -2476,6 +2826,12 @@ "requires": { "ansi-regex": "^4.1.0" } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true } } }, @@ -2729,14 +3085,14 @@ "dev": true }, "builder-util": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-21.1.1.tgz", - "integrity": "sha512-+t6pbMo/COTYDfqfRDrWDi9tuPxBctb0S9PVt8Kgd+K0eqD1lvbF05rrkiQpXIrhb6cndXgcl3FG18Oqgy5YPg==", + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-21.2.0.tgz", + "integrity": "sha512-Nd6CUb6YgDY8EXAXEIegx+1kzKqyFQ5ZM5BoYkeunAlwz/zDJoH1UCyULjoS5wQe5czNClFQy07zz2bzYD0Z4A==", "dev": true, "requires": { "7zip-bin": "~5.0.3", "@types/debug": "^4.1.4", - "app-builder-bin": "3.4.0", + "app-builder-bin": "3.4.3", "bluebird-lst": "^1.0.9", "builder-util-runtime": "8.3.0", "chalk": "^2.4.2", @@ -2744,7 +3100,7 @@ "fs-extra": "^8.1.0", "is-ci": "^2.0.0", "js-yaml": "^3.13.1", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "stat-mode": "^0.3.0", "temp-file": "^3.3.4" }, @@ -2758,23 +3114,6 @@ "ms": "^2.1.1" } }, - "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", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2788,9 +3127,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -2878,12 +3217,6 @@ "y18n": "^4.0.0" }, "dependencies": { - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", - "dev": true - }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -2907,15 +3240,6 @@ "yallist": "^3.0.2" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", @@ -2976,6 +3300,12 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true + }, + "normalize-url": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", + "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==", + "dev": true } } }, @@ -3016,9 +3346,9 @@ "dev": true }, "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "camelcase-keys": { @@ -3029,6 +3359,14 @@ "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } } }, "caniuse-lite": { @@ -3056,9 +3394,9 @@ "dev": true }, "cfb": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.2.tgz", - "integrity": "sha512-FAEjGHtrAF027TFkhDmTDNbRf97C33jBXRa9ODeabZRqYDglsq/F5uRpJfV5BitCH4yiyplHNBKx2xOhQb12PA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.3.tgz", + "integrity": "sha512-joXBW0nMuwV9no7UTMiyVJnQL6XIU3ThXVjFUDHgl9MpILPOomyfaGqC290VELZ48bbQKZXnQ81UT5HouTxHsw==", "requires": { "adler-32": "~1.2.0", "commander": "^2.16.0", @@ -3306,22 +3644,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3478,9 +3800,9 @@ "dev": true }, "compare-versions": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.0.tgz", - "integrity": "sha512-hX+4kt2Rcwu+x1U0SsEFCn1quURjEjPEGH/cPBlpME/IidGimAdwfMU+B+xDr7et/KTR7VH2+ZqWGerv4NGs2w==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.1.tgz", + "integrity": "sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg==", "dev": true }, "component-bind": { @@ -3681,17 +4003,6 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.0" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "copy-descriptor": { @@ -4236,9 +4547,9 @@ } }, "core-js": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", - "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", + "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==" }, "core-util-is": { "version": "1.0.2", @@ -4535,6 +4846,16 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, "default-require-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", @@ -4612,37 +4933,105 @@ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "optional": true - }, - "dep-graph": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz", - "integrity": "sha1-+t6GqSeZqBPptCURzfPfpsyNvv4=", + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { - "underscore": "1.2.1" + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "dependencies": { - "underscore": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz", - "integrity": "sha1-/FxrB2VnPZKi1KyLTcCqiHAuK9Q=", + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true - } - } - }, - "depd": { - "version": "1.1.2", + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "dep-graph": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz", + "integrity": "sha1-+t6GqSeZqBPptCURzfPfpsyNvv4=", + "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": "sha1-/FxrB2VnPZKi1KyLTcCqiHAuK9Q=", + "dev": true + } + } + }, + "depd": { + "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true @@ -4733,38 +5122,20 @@ } }, "dmg-builder": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-21.1.1.tgz", - "integrity": "sha512-WsafJ+LkG20ddVfKfNlJC6AMRKTvLMJhAwAmBHzb+KWhMZVs9/3QY2yd2BIpvWYRfUD/lWd+LmclTNWw7540Cw==", + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-21.2.0.tgz", + "integrity": "sha512-9cJEclnGy7EyKFCoHDYDf54pub/t92CQapyiUxU0w9Bj2vUvfoDagP1PMiX4XD5rPp96141h9A+QN0OB4VgvQg==", "dev": true, "requires": { - "app-builder-lib": "~21.1.1", + "app-builder-lib": "~21.2.0", "bluebird-lst": "^1.0.9", - "builder-util": "~21.1.1", + "builder-util": "~21.2.0", "fs-extra": "^8.1.0", "iconv-lite": "^0.5.0", "js-yaml": "^3.13.1", - "parse-color": "^1.0.0", - "sanitize-filename": "^1.6.1" + "sanitize-filename": "^1.6.2" }, "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", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", - "dev": true - }, "iconv-lite": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", @@ -4870,9 +5241,9 @@ } }, "dotenv": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz", - "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz", + "integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA==", "dev": true }, "dotenv-expand": { @@ -4937,15 +5308,15 @@ "dev": true }, "ejs": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz", - "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.1.tgz", + "integrity": "sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==", "dev": true }, "electron": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/electron/-/electron-5.0.7.tgz", - "integrity": "sha512-OMMz8DhatxLuBFbnW7KYcAUjflGYFn0IQEtKR0iZhMAm89FgNOd9SVbxXWAGNxvRR6C0gORXwhTh6BCqqqcR6Q==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/electron/-/electron-5.0.10.tgz", + "integrity": "sha512-OSyxTlJ+7Yf0B+6pTdHdxY9RvI4U+mVKAbn+CkAOWxlCPMg3K+jt5UHKSPRRLnXQhQ0Tulg4vupbC0k27aukVw==", "dev": true, "requires": { "@types/node": "^10.12.18", @@ -4954,30 +5325,30 @@ }, "dependencies": { "@types/node": { - "version": "10.14.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.12.tgz", - "integrity": "sha512-QcAKpaO6nhHLlxWBvpc4WeLrTvPqlHOvaj0s5GriKkA1zq+bsFBPpfYCvQhLqLgYlIko8A9YrPdaMHCo5mBcpg==", + "version": "10.14.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.17.tgz", + "integrity": "sha512-p/sGgiPaathCfOtqu2fx5Mu1bcjuP8ALFg4xpGgNkcin7LwRyzUKniEHBKdcE1RPsenq5JVPIpMTJSygLboygQ==", "dev": true } } }, "electron-builder": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-21.1.1.tgz", - "integrity": "sha512-4A3h0dhqSranoX7cM0eqkzABeHABH9Nch12003XIZ9MUPV4jL97nK5WBbbVG06qglYTV9x62XAqPPDS+KBOsEg==", + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-21.2.0.tgz", + "integrity": "sha512-x8EXrqFbAb2L3N22YlGar3dGh8vwptbB3ovo3OF6K7NTpcsmM2zEoJv7GhFyX73rNzSG2HaWpXwGAtOp2JWiEw==", "dev": true, "requires": { - "app-builder-lib": "21.1.1", + "app-builder-lib": "21.2.0", "bluebird-lst": "^1.0.9", - "builder-util": "21.1.1", + "builder-util": "21.2.0", "builder-util-runtime": "8.3.0", "chalk": "^2.4.2", - "dmg-builder": "21.1.1", + "dmg-builder": "21.2.0", "fs-extra": "^8.1.0", "is-ci": "^2.0.0", "lazy-val": "^1.0.4", - "read-config-file": "4.0.1", - "sanitize-filename": "^1.6.1", + "read-config-file": "5.0.0", + "sanitize-filename": "^1.6.2", "update-notifier": "^3.0.1", "yargs": "^13.3.0" }, @@ -4999,16 +5370,11 @@ "wrap-ansi": "^5.1.0" } }, - "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", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "get-caller-file": { "version": "2.0.5", @@ -5016,18 +5382,6 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -5082,6 +5436,16 @@ "y18n": "^4.0.0", "yargs-parser": "^13.1.1" } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -5137,13 +5501,13 @@ } }, "electron-publish": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-21.1.1.tgz", - "integrity": "sha512-cM5XLFolIB5NnVpBKewcUM3Ggg+wm+LeKRYHjcB9ri58cbPKxaN+fRUXAZs3m1U9t7SIgjZy83sUSi3asxMXgQ==", + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-21.2.0.tgz", + "integrity": "sha512-mWavuoWJe87iaeKd0I24dNWIaR+0yRzshjNVqGyK019H766fsPWl3caQJnVKFaEyrZRP397v4JZVG0e7s16AxA==", "dev": true, "requires": { "bluebird-lst": "^1.0.9", - "builder-util": "~21.1.1", + "builder-util": "~21.2.0", "builder-util-runtime": "8.3.0", "chalk": "^2.4.2", "fs-extra": "^8.1.0", @@ -5151,23 +5515,6 @@ "mime": "^2.4.4" }, "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", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", - "dev": true - }, "mime": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", @@ -5177,9 +5524,9 @@ } }, "electron-to-chromium": { - "version": "1.3.199", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.199.tgz", - "integrity": "sha512-gachlDdHSK47s0N2e58GH9HMC6Z4ip0SfmYUa5iEbE50AKaOUXysaJnXMfKj0xB245jWbYcyFSH+th3rqsF8hA==", + "version": "1.3.252", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.252.tgz", + "integrity": "sha512-NWJ5TztDnjExFISZHFwpoJjMbLUifsNBnx7u2JI0gCw6SbKyQYYWWtBHasO/jPtHym69F4EZuTpRNGN11MT/jg==", "dev": true }, "elementtree": { @@ -5198,9 +5545,9 @@ } }, "elliptic": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", - "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -5213,9 +5560,9 @@ } }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "emojis-list": { @@ -5510,9 +5857,9 @@ } }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", "dev": true }, "events": { @@ -6133,9 +6480,9 @@ "dev": true }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -6172,22 +6519,28 @@ } }, "follow-redirects": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", - "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.8.1.tgz", + "integrity": "sha512-micCIbldHioIegeKs41DoH0KS3AXfFzgS30qVkM6z/XOE/GJgvmsoc839NUqa1B9udYe9dQxgv7KFwng6+p/dw==", "dev": true, "requires": { - "debug": "=3.1.0" + "debug": "^3.0.0" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, @@ -7353,6 +7706,18 @@ } } }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -7506,60 +7871,6 @@ "requires": { "pkg-dir": "^3.0.0", "resolve-cwd": "^2.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-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.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" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } } }, "imurmurhash": { @@ -7583,6 +7894,12 @@ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -7728,6 +8045,16 @@ } } }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -7771,6 +8098,12 @@ "is-windows": "^1.0.1" } }, + "is-absolute-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.1.tgz", + "integrity": "sha512-c2QjUwuMxLsld90sj3xYzpFYWJtuxkIn1f5ua9RTEYJt/vV2IsM+Py00/6qjV7qExgifUvt7qfyBGBBKm+2iBg==", + "dev": true + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -7898,13 +8231,10 @@ } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { "version": "4.0.0", @@ -7963,21 +8293,6 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "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": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": 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==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, "is-path-inside": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", @@ -8103,13 +8418,10 @@ "dev": true }, "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" - } + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.2.tgz", + "integrity": "sha512-C3FSxJdNrEr2F4z6uFtNzECDM5hXk+46fxaa+cwBe5/XrWSmzdG8DDgyjfX6/NRdBB21q2JXuRAzPCUs+fclnQ==", + "dev": true }, "isexe": { "version": "2.0.0", @@ -8181,9 +8493,9 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -8195,9 +8507,9 @@ "dev": true }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -8313,9 +8625,9 @@ "dev": true }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -8370,19 +8682,10 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "source-map": { @@ -8622,9 +8925,9 @@ } }, "karma": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.2.0.tgz", - "integrity": "sha512-fmCuxN1rwJxTdZfOXK5LjlmS4Ana/OvzNMpkyLL/TLE8hmgSkpVpMYQ7RTVa8TNKRVQDZNl5W1oF5cfKfgIMlA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.3.0.tgz", + "integrity": "sha512-NSPViHOt+RW38oJklvYxQC4BSQsv737oQlr/r06pCM+slDOr4myuI1ivkRmp+3dVpJDfZt2DmaPJ2wkx+ZZuMQ==", "dev": true, "requires": { "bluebird": "^3.3.0", @@ -8641,7 +8944,7 @@ "graceful-fs": "^4.1.2", "http-proxy": "^1.13.0", "isbinaryfile": "^3.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.14", "log4js": "^4.0.0", "mime": "^2.3.1", "minimatch": "^3.0.2", @@ -8657,9 +8960,9 @@ }, "dependencies": { "anymatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.0.3.tgz", - "integrity": "sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.0.tgz", + "integrity": "sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -8697,12 +9000,6 @@ "readdirp": "^3.1.1" } }, - "core-js": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", - "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==", - "dev": true - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -8752,8 +9049,17 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "mime": { - "version": "2.4.4", + "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" + } + }, + "mime": { + "version": "2.4.4", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", "dev": true @@ -8765,23 +9071,14 @@ "dev": true }, "readdirp": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.1.tgz", - "integrity": "sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.2.tgz", + "integrity": "sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw==", "dev": true, "requires": { "picomatch": "^2.0.4" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8800,9 +9097,9 @@ } }, "karma-chrome-launcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.0.0.tgz", - "integrity": "sha512-u/PnVgDOP97AUe/gJeABlC6Wa6aQ83MZsm0JgsJQ5bGQ9XcXON/7b2aRhl59A62Zom+q3PFveBkczc7E1RT7TA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", + "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", "dev": true, "requires": { "which": "^1.2.1" @@ -8829,9 +9126,9 @@ } }, "karma-coverage-istanbul-reporter": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.6.tgz", - "integrity": "sha512-WFh77RI8bMIKdOvI/1/IBmgnM+Q7NOLhnwG91QJrM8lW+CIXCjTzhhUsT/svLvAkLmR10uWY4RyYbHMLkTglvg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.1.0.tgz", + "integrity": "sha512-UH0mXPJFJyK5uiK7EkwGtQ8f30lCBAfqRResnZ4pzLJ04SOp4SPlYkmwbbZ6iVJ6sQFVzlDUXlntBEsLRdgZpg==", "dev": true, "requires": { "istanbul-api": "^2.1.6", @@ -9297,13 +9594,13 @@ "dev": true }, "make-fetch-happen": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.2.tgz", - "integrity": "sha512-YMJrAjHSb/BordlsDEcVcPyTbiJKkzqMf48N8dAJZT9Zjctrkb6Yg4TY9Sq2AwSIQJFn5qBBKVTYt3vP5FMIHA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz", + "integrity": "sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA==", "dev": true, "requires": { "agentkeepalive": "^3.4.1", - "cacache": "^11.3.3", + "cacache": "^12.0.0", "http-cache-semantics": "^3.8.1", "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^2.2.1", @@ -9315,6 +9612,43 @@ "ssri": "^6.0.0" }, "dependencies": { + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -9568,26 +9902,6 @@ "normalize-url": "1.9.1", "schema-utils": "^1.0.0", "webpack-sources": "^1.1.0" - }, - "dependencies": { - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - } } }, "minimalistic-assert": { @@ -9617,9 +9931,9 @@ "dev": true }, "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.5.0.tgz", + "integrity": "sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q==", "dev": true, "requires": { "safe-buffer": "^5.1.2", @@ -9744,17 +10058,6 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "ms": { @@ -9859,9 +10162,9 @@ } }, "ngx-webstorage-service": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ngx-webstorage-service/-/ngx-webstorage-service-4.0.1.tgz", - "integrity": "sha512-hSWmwnj+hHBdwMZDeFbJjzXKUrJMw86B3l74cb6LePM97Vu8D62MTOPj2+ABB5NMIkUhxgO1E27ih/zhrEd9Fg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ngx-webstorage-service/-/ngx-webstorage-service-4.1.0.tgz", + "integrity": "sha512-t0aO4X8rqesLqypU8ZK2W7xGVbpi/z7u/Xg7qhnLoKVauI29NFzdKxV2oaYZmpkxIpgdbLSsIfklkjgxIM0IFA==", "requires": { "tslib": "^1.9.0" } @@ -9928,9 +10231,9 @@ } }, "node-releases": { - "version": "1.1.25", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.25.tgz", - "integrity": "sha512-fI5BXuk83lKEoZDdH3gRhtsNgh05/wZacuXkgbiYkceE7+QIMXOg98n9ZV7mz27B+kFHnqHcUpscZZlGRSmTpQ==", + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.29.tgz", + "integrity": "sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ==", "dev": true, "requires": { "semver": "^5.3.0" @@ -9974,10 +10277,16 @@ "dev": true }, "normalize-url": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", - "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==", - "dev": true + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } }, "npm-bundled": { "version": "1.0.6", @@ -10019,16 +10328,16 @@ } }, "npm-registry-fetch": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.1.tgz", - "integrity": "sha512-VQCEZlydXw4AwLROAXWUR7QDfe2Y8Id/vpAgp6TI1/H78a4SiQ1kQrKZALm5/zxM5n4HIi+aYb+idUAV/RuY0Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz", + "integrity": "sha512-Jllq35Jag8dtv0M17ue74XtdQTyqKzuAYGiX9mAjOhkmNjib3bBUgK6mUY61+AHnXeSRobQkpY3/xIOS/omptw==", "dev": true, "requires": { "JSONStream": "^1.3.4", "bluebird": "^3.5.1", "figgy-pudding": "^3.4.1", "lru-cache": "^5.1.1", - "make-fetch-happen": "^4.0.2", + "make-fetch-happen": "^5.0.0", "npm-package-arg": "^6.1.0" }, "dependencies": { @@ -10380,9 +10689,9 @@ "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -10397,6 +10706,12 @@ "p-limit": "^2.0.0" } }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, "p-retry": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", @@ -10404,14 +10719,6 @@ "dev": true, "requires": { "retry": "^0.12.0" - }, - "dependencies": { - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - } } }, "p-try": { @@ -10421,38 +10728,49 @@ "dev": true }, "package-json": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.4.0.tgz", - "integrity": "sha512-bd1T8OBG7hcvMd9c/udgv6u5v9wISP3Oyl9Cm7Weop8EFwrtcQDnS2sb6zhwqus2WslSr5wSTIPiTTpxxmPm7Q==", + "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": "^3.4.0", + "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", - "semver": "^6.1.1" + "semver": "^6.2.0" }, "dependencies": { + "registry-auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.0.0.tgz", + "integrity": "sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==", + "dev": true, + "requires": { + "rc": "^1.2.8", + "safe-buffer": "^5.0.1" + } + }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "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": "9.5.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.1.tgz", - "integrity": "sha512-Zqvczvf/zZ7QNosdE9uTC7SRuvSs9tFqRkF6cJl+2HH7COBnx4BRAGpeXJlrbN+mM0CMHpbi620xdEHhCflghA==", + "version": "9.5.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.5.tgz", + "integrity": "sha512-jAEP+Nqj4kyMWyNpfTU/Whx1jA7jEc5cCOlurm0/0oL+v8TAp1QSsK83N7bYe+2bEdFzMAtPG5TBebjzzGV0cA==", "dev": true, "requires": { "bluebird": "^3.5.3", - "cacache": "^11.3.2", + "cacache": "^12.0.2", "figgy-pudding": "^3.5.1", "get-stream": "^4.1.0", "glob": "^7.1.3", + "infer-owner": "^1.0.4", "lru-cache": "^5.1.1", - "make-fetch-happen": "^4.0.1", + "make-fetch-happen": "^5.0.0", "minimatch": "^3.0.4", "minipass": "^2.3.5", "mississippi": "^3.0.0", @@ -10461,7 +10779,7 @@ "npm-package-arg": "^6.1.0", "npm-packlist": "^1.1.12", "npm-pick-manifest": "^2.2.3", - "npm-registry-fetch": "^3.8.0", + "npm-registry-fetch": "^4.0.0", "osenv": "^0.1.5", "promise-inflight": "^1.0.1", "promise-retry": "^1.1.1", @@ -10475,6 +10793,45 @@ "which": "^1.3.1" }, "dependencies": { + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -10493,19 +10850,10 @@ "yallist": "^3.0.2" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "yallist": { @@ -10563,15 +10911,6 @@ "safe-buffer": "^5.1.1" } }, - "parse-color": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz", - "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=", - "dev": true, - "requires": { - "color-convert": "~0.5.0" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -10852,9 +11191,9 @@ "dev": true }, "portfinder": { - "version": "1.0.21", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.21.tgz", - "integrity": "sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA==", + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.23.tgz", + "integrity": "sha512-B729mL/uLklxtxuiJKfQ84WPxNw5a7Yhx3geQZdcA4GjNjZSTSSMMWyoennMVnTWSmAR0lMdzWYN0JLnHrg1KQ==", "dev": true, "requires": { "async": "^1.5.2", @@ -10942,9 +11281,9 @@ "dev": true }, "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, "pretty-bytes": { @@ -10958,9 +11297,9 @@ } }, "primeng": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/primeng/-/primeng-8.0.1.tgz", - "integrity": "sha512-87HQEh+S4lm4r280Thlk3pHzJJ1lr4Dl82zidnfWeOBZ5lMbK2w9w9yKJH875aPKWs0MMDVZeQ5V9jMWolRjlA==" + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-8.0.2.tgz", + "integrity": "sha512-MCY2oYXt0TLqDHcuMD2yqe/pg7OCCTvK/szqInkhXn8a76KA0yLDmm+hF+gaH/xQShqnYuazb23GlYVZi8zFDQ==" }, "printj": { "version": "1.1.2", @@ -11072,6 +11411,14 @@ "requires": { "err-code": "^1.0.0", "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + } } }, "promzard": { @@ -11120,7 +11467,7 @@ "selenium-webdriver": "3.6.0", "source-map-support": "~0.4.0", "webdriver-js-extender": "2.1.0", - "webdriver-manager": "^12.0.6" + "webdriver-manager": "^12.1.6" }, "dependencies": { "ansi-styles": { @@ -11157,13 +11504,19 @@ "rimraf": "^2.2.8" }, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": 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==", "dev": true, "requires": { - "glob": "^7.1.3" + "is-path-inside": "^1.0.0" } } } @@ -11216,9 +11569,9 @@ "dev": true }, "webdriver-manager": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.1.tgz", - "integrity": "sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA==", + "version": "12.1.6", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.6.tgz", + "integrity": "sha512-B1mOycNCrbk7xODw7Jgq/mdD3qzPxMaTsnKIQDy2nXlQoyjTrJTTD0vRpEZI9b8RibPEyQvh9zIZ0M1mpOxS3w==", "dev": true, "requires": { "adm-zip": "^0.4.9", @@ -11234,14 +11587,11 @@ "xml2js": "^0.4.17" }, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "adm-zip": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", + "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", + "dev": true } } } @@ -11454,15 +11804,6 @@ "toidentifier": "1.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==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -11552,13 +11893,11 @@ } }, "read-config-file": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-4.0.1.tgz", - "integrity": "sha512-5caED3uo2IAZMPcbh/9hx/O29s2430RLxtnFDdzxpH/epEpawOrQnGBHueotIXUrGPPIgdNQN+S/CIp2WmiSfw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-5.0.0.tgz", + "integrity": "sha512-jIKUu+C84bfnKxyJ5j30CxCqgXWYjZLXuVE/NYlMEpeni+dhESgAeZOZd0JZbg1xTkMmnCdxksDoarkOyfEsOg==", "dev": true, "requires": { - "ajv": "^6.10.1", - "ajv-keywords": "^3.4.1", "dotenv": "^8.0.0", "dotenv-expand": "^5.1.0", "fs-extra": "^8.1.0", @@ -11567,35 +11906,6 @@ "lazy-val": "^1.0.4" }, "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "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", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", - "dev": true - }, "json5": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", @@ -11973,9 +12283,9 @@ "dev": true }, "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, "rfdc": { @@ -11984,6 +12294,15 @@ "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", "dev": true }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", @@ -12018,9 +12337,9 @@ } }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "requires": { "tslib": "^1.9.0" } @@ -12047,9 +12366,9 @@ "dev": true }, "sanitize-filename": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", - "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", + "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" @@ -12105,9 +12424,9 @@ } }, "screenfull": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-4.2.0.tgz", - "integrity": "sha512-qpyI9XbwuMJElWRP5vTgxkFAl4k7HpyhIqBFOZEwX9QBXn0MAuRSpn7LOc6/4CeSwoz61oBu1VPV+2fbIWC+5Q==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-4.2.1.tgz", + "integrity": "sha512-PLSp6f5XdhvjCCCO8OjavRfzkSGL3Qmdm7P82bxyU8HDDDBhDV3UckRaYcRa/NDNTYt8YBpzjoLWHUAejmOjLg==" }, "select": { "version": "1.1.2", @@ -12261,9 +12580,9 @@ } }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.0.tgz", + "integrity": "sha512-UkGlcYMtw4d9w7YfCtJFgdRTps8N4L0A48R+SmcGL57ki1+yHwJXnalk5bjgrw+ljv6SfzjzPjhohod2qllg/Q==", "dev": true }, "serve-index": { @@ -12403,6 +12722,28 @@ "dev": true, "requires": { "string-width": "^1.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } } }, "slash": { @@ -12799,9 +13140,9 @@ "dev": true }, "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -13114,14 +13455,30 @@ "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "string.prototype.codepointat": { @@ -13361,25 +13718,6 @@ "requires": { "async-exit-hook": "^2.0.1", "fs-extra": "^8.1.0" - }, - "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", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", - "dev": true - } } }, "term-size": { @@ -13420,9 +13758,9 @@ } }, "terser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.2.tgz", - "integrity": "sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.1.tgz", + "integrity": "sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A==", "dev": true, "requires": { "commander": "^2.20.0", @@ -13437,9 +13775,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -13514,9 +13852,9 @@ "dev": true }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -13755,9 +14093,9 @@ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "tslint": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz", - "integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.19.0.tgz", + "integrity": "sha512-1LwwtBxfRJZnUvoS9c0uj8XQtAnyhWr9KlNvDIdB+oXyT+VpsOAaEhEgKi1HrZ8rq0ki/AAnbGSv4KM6/AfVZw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -13815,9 +14153,9 @@ } }, "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", "dev": true }, "type-is": { @@ -13854,9 +14192,9 @@ "dev": true }, "typescript": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", - "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", "dev": true }, "uglify-js": { @@ -14155,6 +14493,14 @@ "dev": true, "requires": { "prepend-http": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + } } }, "use": { @@ -14391,9 +14737,9 @@ } }, "webpack-dev-server": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.7.2.tgz", - "integrity": "sha512-mjWtrKJW2T9SsjJ4/dxDC2fkFVUw8jlpemDERqV0ZJIkjjjamR2AbQlr3oz+j4JLhYCHImHnXZK5H06P2wvUew==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.0.tgz", + "integrity": "sha512-Hs8K9yI6pyMvGkaPTeTonhD6JXVsigXDApYk9JLW4M7viVBspQvb1WdAcWxqtmttxNW4zf2UFLsLNe0y87pIGQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -14409,42 +14755,32 @@ "import-local": "^2.0.0", "internal-ip": "^4.3.0", "ip": "^1.1.5", + "is-absolute-url": "^3.0.0", "killable": "^1.0.1", "loglevel": "^1.6.3", "opn": "^5.5.0", "p-retry": "^3.0.1", - "portfinder": "^1.0.20", + "portfinder": "^1.0.21", "schema-utils": "^1.0.0", "selfsigned": "^1.10.4", - "semver": "^6.1.1", + "semver": "^6.3.0", "serve-index": "^1.9.1", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "^4.0.0", + "spdy": "^4.0.1", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", "webpack-dev-middleware": "^3.7.0", "webpack-log": "^2.0.0", + "ws": "^6.2.1", "yargs": "12.0.5" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -14461,49 +14797,6 @@ "upath": "^1.1.1" } }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } - } - }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -14513,179 +14806,6 @@ "ms": "^2.1.1" } }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.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==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "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" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.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" - } - }, - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -14698,148 +14818,25 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.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" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, - "webpack-dev-middleware": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", - "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.2", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "async-limiter": "~1.0.0" } } } @@ -15078,6 +15075,28 @@ "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } } }, "wrappy": { @@ -15114,9 +15133,9 @@ "dev": true }, "xlsx": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.14.4.tgz", - "integrity": "sha512-AYVNzZKmU9pxDf4d6dSOy52EivzRnJ5lo0Jyxqk7Pz5G+8dMCUsO1PdFlGj6C6MQZ8xBRPinmIpTHYzI2DyfXg==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.14.5.tgz", + "integrity": "sha512-s/5f4/mjeWREmIWZ+HtDfh/rnz51ar+dZ4LWKZU3u9VBx2zLdSIWTdXgoa52/pnZ9Oe/Vu1W1qzcKzLVe+lq4w==", "requires": { "adler-32": "~1.2.0", "cfb": "^1.1.2", @@ -15187,86 +15206,33 @@ "dev": true }, "yargs": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.1.0.tgz", - "integrity": "sha512-1UhJbXfzHiPqkfXNHYhiz79qM/kZqjTE8yGlEjZa85Q+3+OwcV6NRkV7XOV1W2Eom2bzILeUn55pQYffjVOLAg==", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { "cliui": "^4.0.0", + "decamelize": "^1.2.0", "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", + "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", - "string-width": "^3.0.0", + "string-width": "^2.0.0", "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } }, "yauzl": { diff --git a/package.json b/package.json index 2fd54de46..43c683940 100644 --- a/package.json +++ b/package.json @@ -29,26 +29,26 @@ }, "private": true, "dependencies": { - "@angular/animations": "^8.1.2", - "@angular/cdk": "^8.1.3", - "@angular/common": "^8.1.2", - "@angular/compiler": "^8.1.2", - "@angular/core": "^8.1.2", - "@angular/flex-layout": "^8.0.0-beta.26", - "@angular/forms": "^8.1.2", - "@angular/material": "^8.1.3", - "@angular/platform-browser": "^8.1.2", - "@angular/platform-browser-dynamic": "^8.1.2", - "@angular/router": "^8.1.2", + "@angular/animations": "^8.2.4", + "@angular/cdk": "^8.1.4", + "@angular/common": "^8.2.4", + "@angular/compiler": "^8.2.4", + "@angular/core": "^8.2.4", + "@angular/flex-layout": "^8.0.0-beta.27", + "@angular/forms": "^8.2.4", + "@angular/material": "^8.1.4", + "@angular/platform-browser": "^8.2.4", + "@angular/platform-browser-dynamic": "^8.2.4", + "@angular/router": "^8.2.4", "@types/pako": "^1.0.1", "@types/sprintf-js": "^1.1.2", "angular2-chartjs": "^0.5.1", - "angular2-hotkeys": "^2.1.4", + "angular2-hotkeys": "^2.1.5", "chartjs-plugin-zoom": "^0.7.3", "cordova-android": "^8.0.0", "cordova-plugin-device": "^2.0.3", "cordova-plugin-whitelist": "^1.3.4", - "core-js": "^3.1.4", + "core-js": "^3.2.1", "file-saver": "^2.0.2", "hammerjs": "^2.0.8", "he": "^1.2.0", @@ -58,44 +58,44 @@ "ngx-konami": "^1.6.0", "ngx-material-file-input": "^1.1.1", "ngx-md": "^8.0.0", - "ngx-webstorage-service": "^4.0.1", + "ngx-webstorage-service": "^4.1.0", "pako": "^1.0.10", - "primeng": "^8.0.1", + "primeng": "^8.0.2", "roboto-fontface": "^0.10.0", - "rxjs": "^6.5.2", - "screenfull": "^4.2.0", + "rxjs": "^6.5.3", + "screenfull": "^4.2.1", "tslib": "^1.10.0", - "xlsx": "^0.14.4", + "xlsx": "^0.14.5", "zone.js": "~0.9.1" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.801.2", - "@angular/cli": "^8.1.2", - "@angular/compiler-cli": "^8.1.2", - "@angular/language-service": "^8.1.2", + "@angular-devkit/build-angular": "^0.801.3", + "@angular/cli": "^8.3.2", + "@angular/compiler-cli": "^8.2.4", + "@angular/language-service": "^8.2.4", "@compodoc/compodoc": "^1.1.10", "@types/file-saver": "^2.0.1", - "@types/jasmine": "^3.3.14", + "@types/jasmine": "^3.4.0", "@types/jasminewd2": "^2.0.6", - "@types/node": "^12.6.8", + "@types/node": "^12.7.4", "codelyzer": "^5.0.1", "cordova": "^9.0.0", - "electron": "^5.0.7", - "electron-builder": "^21.1.1", + "electron": "^5.0.10", + "electron-builder": "^21.2.0", "fs-extra": "^8.1.0", "jasmine-core": "^3.4.0", "jasmine-spec-reporter": "~4.2.1", - "karma": "^4.2.0", - "karma-chrome-launcher": "^3.0.0", + "karma": "^4.3.0", + "karma-chrome-launcher": "^3.1.0", "karma-cli": "~2.0.0", - "karma-coverage-istanbul-reporter": "^2.0.6", + "karma-coverage-istanbul-reporter": "^2.1.0", "karma-jasmine": "^2.0.1", "karma-jasmine-html-reporter": "^1.4.2", "protractor": "^5.4.2", "ts-node": "^8.3.0", - "tslint": "^5.18.0", - "typescript": "^3.4.5", - "webpack-dev-server": "^3.7.2" + "tslint": "^5.19.0", + "typescript": "^3.5.3", + "webpack-dev-server": "^3.8.0" }, "cordova": { "plugins": { -- GitLab From 7dd12073b82fb7865706b7af7295b16b3b31118e Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Wed, 4 Sep 2019 11:20:36 +0200 Subject: [PATCH 28/29] Update e2e tests for calc types 4 and 17 --- e2e/calculate-all-params.e2e-spec.ts | 16 ++++++++++++++-- e2e/calculator.po.ts | 4 ++++ e2e/clone-all-calc.e2e-spec.ts | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index f83a8212a..043642aa6 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -1,12 +1,13 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; +import { browser } from "protractor"; /** * 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", () => { +fdescribe("ngHyd − calculate all parameters of all calculators", () => { let listPage: ListPage; let calcPage: CalculatorPage; let navBar: Navbar; @@ -18,7 +19,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { }); // get calculators list (IDs) @TODO read it from config ! - const calcTypes = [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15 ]; + const calcTypes = [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 17 ]; // for each calculator for (const ct of calcTypes) { @@ -58,6 +59,17 @@ describe("ngHyd − calculate all parameters of all calculators", () => { const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } + } else { + // module has no calculable params, just click the "compute" button + // check that "compute" button is active + const calcButton = calcPage.getCalculateButton(); + const disabledState = await calcButton.getAttribute("disabled"); + expect(disabledState).not.toBe("true"); + // click "compute" button + await calcButton.click(); + // check that result is not empty + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(true); } }); }); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 8ca7eac65..f1659ce67 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -100,7 +100,11 @@ export class CalculatorPage { || await element(by.css("fixedvar-results results-graph > graph-results-container")).isPresent() || + await element(by.css("remous-results #main-chart")).isPresent() + || await element(by.css("pab-results pab-results-table")).isPresent() + || + await element(by.css("macrorugo-compound-results macrorugo-compound-results-table")).isPresent() ); } diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index 1cf0a8d47..e8260ac6b 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -18,7 +18,7 @@ describe("ngHyd − clone all calculators with all possible <select> values", () }); // get calculators list (IDs) @TODO read it from config ! - const calcTypes = [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15 ]; + const calcTypes = [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 17 ]; // for each calculator for (const ct of calcTypes) { -- GitLab From 705772c9941a74ac17a96d409201db9ec36eca81 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Wed, 4 Sep 2019 11:20:54 +0200 Subject: [PATCH 29/29] Fix broken CourbeRemous --- .../fixedvar-results/fixed-results.component.ts | 10 ++++++---- src/app/results/macrorugo-compound-results.ts | 10 ++++++---- src/app/results/var-results.ts | 10 ++++++---- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/app/components/fixedvar-results/fixed-results.component.ts b/src/app/components/fixedvar-results/fixed-results.component.ts index 566d2f333..ff3b3e8b7 100644 --- a/src/app/components/fixedvar-results/fixed-results.component.ts +++ b/src/app/components/fixedvar-results/fixed-results.component.ts @@ -111,10 +111,12 @@ export class FixedResultsComponent { } let unit; // is k the calculated parameter ? If so, extract its unit - const p = res.sourceNub.getParameter(k); - if (p) { - unit = p.unit; - } + try { + const p = res.sourceNub.getParameter(k); + if (p) { + unit = p.unit; + } + } catch (e) { /* silent fail */ } const label = this.formService.expandVariableNameAndUnit(ct, k, unit); data.push({ label: label, diff --git a/src/app/results/macrorugo-compound-results.ts b/src/app/results/macrorugo-compound-results.ts index dc63e24aa..dbcdaa455 100644 --- a/src/app/results/macrorugo-compound-results.ts +++ b/src/app/results/macrorugo-compound-results.ts @@ -48,10 +48,12 @@ export class MacrorugoCompoundResults extends MultiDimensionResults { } let unit; // is h a parameter ? If so, extract its unit - const p = sn.getParameter(h); - if (p) { - unit = p.unit; - } + try { + const p = sn.getParameter(h); + if (p) { + unit = p.unit; + } + } catch (e) { /* silent fail */ } return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct , h, unit); }); } diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts index 8853d71bf..132ae8234 100644 --- a/src/app/results/var-results.ts +++ b/src/app/results/var-results.ts @@ -358,10 +358,12 @@ export class VarResults extends CalculatedParamResults implements PlottableData for (const k of this.resultKeys) { let unit; // is k the calculated parameter ? If so, extract its unit - const p = sn.getParameter(k); - if (p) { - unit = p.unit; - } + try { + const p = sn.getParameter(k); + if (p) { + unit = p.unit; + } + } catch (e) { /* silent fail */ } this._resultHeaders.push( ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, k, unit) ); -- GitLab